CN111191243A - 一种漏洞检测方法、装置和存储介质 - Google Patents

一种漏洞检测方法、装置和存储介质 Download PDF

Info

Publication number
CN111191243A
CN111191243A CN201910753298.6A CN201910753298A CN111191243A CN 111191243 A CN111191243 A CN 111191243A CN 201910753298 A CN201910753298 A CN 201910753298A CN 111191243 A CN111191243 A CN 111191243A
Authority
CN
China
Prior art keywords
detected
vulnerability detection
function
thread
stack pointer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201910753298.6A
Other languages
English (en)
Inventor
李振环
陈楠
刘深荣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201910753298.6A priority Critical patent/CN111191243A/zh
Publication of CN111191243A publication Critical patent/CN111191243A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例公开了一种漏洞检测方法、装置和存储介质;本发明实施例在当检测到待检测对象受到网络攻击时,调用漏洞检测函数,通过所述漏洞检测函数,获取所述待检测对象当前的线程信息,在所述线程信息中查询所述待检测对象当前的线程栈指针值,当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。由于该方案可以在受到网络攻击时就可以对漏洞进行实时检测,而无需等待到出现异常信息,所以,相对于现在只能在出现异常信息时才会对漏洞进行检测的方案而言,可以更加及时、有效的阻止漏洞的攻击,大大增强了对漏洞检测的实时性,以及提高应用程序的安全性。

Description

一种漏洞检测方法、装置和存储介质
技术领域
本发明涉及通信技术领域,具体涉及一种漏洞检测方法、装置和存储介质。
背景技术
漏洞是存在于计算机网络系统中的、可能对系统中的部件和数据造成损害。具体而言,计算机网络系统的应用程序中若存在漏洞,会使得攻击者能够在未授权的情况下访问或破坏应用程序,是一种巨大的安全隐患。现有技术中,针对应用程序中漏洞的检测,采用的方法是检测应用程序关联启动进程信息是否符合预设异常条件来判断。
在对现有技术的研究和实践过程中,本发明的发明人发现,通过关联启动进程信息来检测,检测到信息异常时,有可能黑客针对该漏洞的攻击已经完成,应用程序可能已经被破坏,具有滞后性,导致应用程序的安全性低。
发明内容
本发明实施例提供一种漏洞检测方法、装置和存储介质。可以提高应用程序的安全性。
一种漏洞检测方法,包括:
当检测到待检测对象受到网络攻击时,调用漏洞检测函数;
通过所述漏洞检测函数,获取所述待检测对象当前的线程信息;
在所述线程信息中查询所述待检测对象当前的线程栈指针值;
当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
相应的,本发明实施例提供一种漏洞检测装置,包括:
调用单元,用于当检测到待检测对象受到网络攻击时,调用漏洞检测函数,所述漏洞检测函数包括检测命令;
获取单元,用于通过所述漏洞检测函数,获取所述待检测对象当前的线程信息;
查询单元,用于在所述当前的线程信息中查询所述待检测对象当前的线程栈指针值;
确定单元,用于当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
可选的,在一些实施例中,所述调用单元,具体用于当检测到待检测对象受到网络攻击时,获取所述待检测对象的导入函数表,基于所述导入函数表查询漏洞检测函数的存储地址,根据所述存储地址调用所述漏洞检测函数。
可选的,在一些实施例中,所述调用单元,具体可用于获取待检测对象的内存函数,将所述内存函数头部的指令修改为跳转指令,所述跳转指令携带目标位置,在所述内存函数的目标位置插入检测代码,得到所述漏洞检测函数。
可选的,在一些实施例中,所述调用单元,具体可用于获取检测代码,并根据所述检测代码创建漏洞检测函数,以内存函数的格式对所述漏洞检测函数进行存储,在所述待检测对象的导入函数表中添加所述漏洞检测函数的存储地址。
可选的,在一些实施例中,所述获取单元,具体可用于在执行所述漏洞检测函数的跳转指令时,根据所述跳转指令将当前指针跳转至所述目标位置,以所述目标位置为起始位置执行所述检测代码,以获取所述待检测对象当前的线程地址,基于所述线程地址,搜索所述待检测对象当前的线程。
可选的,在一些实施例中,所述获取单元,具体可用于以所述漏洞检测函数的头部为起始位置执行所述检测代码,以获取所述待检测对象当前的线程地址,基于所述线程地址,搜索所述待检测对象当前的线程,当搜索到所述待检测对象当前的线程时,读取所述待检测对象当前的线程信息。
可选的,在一些实施例中,所述确定单元,具体可用于所述当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞,停止所述待检测对象的服务,采集通过所述漏洞攻击所述待检测对象的攻击信息。
此外,本发明实施例还提供一种存储介质,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一种漏洞检测方法中的步骤。
本发明实施例在当检测到待检测对象受到网络攻击时,调用漏洞检测函数;通过漏洞检测函数,获取待检测对象当前的线程信息;在线程信息中查询待检测对象当前的线程栈指针值;当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞,由于该方案可以在受到网络攻击时就可以对漏洞进行实时检测,而无需等待到出现异常信息,所以,相对于现在只能在出现异常信息时才会对漏洞进行检测的方案而言,可以更加及时、有效的阻止漏洞的攻击,大大增强了对漏洞检测的实时性,以及提高应用程序的安全性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的漏洞检测方法的场景示意图;
图2是本发明实施例提供的漏洞检测方法的流程示意图;
图3是本发明实施例提供的漏洞检测方法的另一流程示意图;
图4是本发明实施例提供的漏洞检测装置的结构示意图;
图5是本发明实施例提供的漏洞检测装置的调用单元的结构示意图;
图6是本发明实施例提供的漏洞检测装置的获取单元的结构示意图;
图7是本发明实施例提供的漏洞检测装置的获取单元的另一结构示意图;
图8是本发明实施例提供的漏洞检测装置的确定单元的结构示意图;
图9是本发明实施例提供的漏洞检测装置的确定单元的另一结构示意图;
图10是本发明实施例提供的漏洞检测装置的另一结构示意图;
图11是本发明实施例提供的漏洞检测装置的得到单元的结构示意图;
图12是本发明实施例提供的漏洞检测装置的得到单元的另一结构示意图;
图13是本发明实施例提供的网络设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种漏洞检测方法、装置和存储介质。其中,该漏洞检测装置可以集成在网络设备中,该网络设备可以是服务器,也可以是终端等设备。
例如,参见图1,以该漏洞检测装置集成在网络设备中为例,该网络设备当检测到待检测对象受到网络攻击时,调用漏洞检测函数,然后,通过漏洞检测函数,获取待检测对象当前的线程信息,再然后,在线程信息中查询待检测对象当前的线程栈指针值,当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
以下分别进行详细说明。需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本实施例将从漏洞检测装置的角度进行描述,该漏洞检测装置具体可以集成在网络设备中,该该网络设备可以是服务器,也可以是终端等设备;其中,该终端可以包括平板电脑、笔记本电脑、以及个人计算(PC,Personal Computer)等设备。
一种漏洞检测方法,包括:当检测到待检测对象受到网络攻击时,调用漏洞检测函数;通过漏洞检测函数,获取待检测对象当前的线程信息;在线程信息中查询待检测对象当前的线程栈指针值;当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
如图2所示,该漏洞检测方法的具体流程如下:
101、当检测到待检测对象受到网络攻击时,调用漏洞检测函数。
其中,网络攻击可以包括针对计算机信息系统、基础设施、计算机网络或个人计算机设备的,任何类型的进攻动作。对于计算机和计算机网络中的应用程序,破坏、揭露、修改、使软件或服务失去功能、在没有得到授权的情况下偷取或访问任何一台计算机的数据,都会被视为于计算机和计算机网络中的应用程序的攻击。比如,针对应用程序如浏览器的攻击,黑客可以设计恶意代码并嵌入到网页中,当用户在不知情的情况下打开该网页时,就可以通过浏览器进行攻击,窃取用户在浏览器中的数据,并对浏览器进行破坏。
其中,漏洞检测函数可以包括应用程序如浏览器中用于检测漏洞的函数。
所谓漏洞,漏洞是指一个系统存在的弱点或缺陷,系统对特定威胁攻击或危险事件的敏感性,或进行攻击的威胁作用的可能性。漏洞可能来自应用软件或操作系统设计时的缺陷或编码时产生的错误,也可能来自业务在交互处理过程中的设计缺陷或逻辑流程上的不合理之处。这些缺陷、错误或不合理之处可能被有意或无意地利用,从而对一个组织的资产或运行造成不利影响,如信息系统被攻击或控制,重要资料被窃取,用户数据被篡改,系统被作为入侵其他主机系统的跳板。比如,应用程序中的漏洞如浏览器即时发布漏洞(0day漏洞),其中,0day漏洞可以为已经被发现(有可能未被公开),而官方还没有相关补丁的漏洞。
例如,当检测到待检测对象受到网络攻击时,获取待检测对象的导入函数表,比如系统或应用程序检测到运行出现异常,通过对异常进行检测,确定为受到网络攻击后,分析网络攻击类型,确定需要调用的漏洞检测函数,根据确定结果,生成提示信息,根据提示信息进行引导,获取系统或应用程序内的导入函数表,也可以在确定受到网络攻击后,分析该网络攻击类型并确定需要调用的漏洞函数,自动获取检测对象的导入函数表,获取的方式可以包括多种,比如,可以通过指令直接获取,还可以通过获取导入函数表的地址,通过该地址进行查询,得到待检测对象的导入函数表,等等。
其中,导入函数表又称为导入表,如下表所示,用于引导系统或应用程序在调用应用程序接口(Application Programming Interface,API)。其中,API为在计算机系统中预设定义的函数,也称API函数。导入函数表可以通过导入描述符的形式存储API函数的信息,比如函数的名称、属性和动态链接库中该函数的地址等信息。
导入表
API函数A(导入描述符)
API函数B(导入描述符)
API函数C(导入描述符)
……
例如,根据网络攻击类型,确定的漏洞检测函数类型和名称,从导入函数表中的API函数信息中获取对应的函数信息,比如,获取该函数的属性信息和存储地址,其中存储地址为该漏洞检测函数存储在计算机系统的动态链接库中的地址。通过获取到的漏洞检测函数的地址,通过该地址在计算机系统中查询到该漏洞检测函数,根据调用指令对该漏洞检测函数进行调用。
另外,需要说明的是,存储于动态链接库中的漏洞检测函数可以为用户新建并存储,也可以在动态链接库中的已有函数中进行修改。即,步骤“当检测到待检测对象受到网络攻击时,调用漏洞检测函数”之前,还可以包括得到漏洞检测函数,得到漏洞检测函数的方式可以包括以下方式:
(1)修改内存函数中的指令,得到漏洞检测函数。
例如,获取待检测对象的内存函数,比如,获取待检测对象的函数库,检测对象可以包括系统或应用程序,在系统或应用程序中获取到函数库,在获取到的函数库中搜索内存相关函数,其中,内存相关函数可以包括内存操作函数和内存管理函数等内存函数,该内存相关函数至少包括一个内存函数,具体函数类型可以包括:VirtualAllocEx、VirtualAlloc、VirtualProtect、VirtualProtectEx等函数。对搜索到的内存函数中的指令进行修改,比如,对内存函数的头部指令进行修改,将头部指令修改为跳转指令,譬如,修改为jmp xxx,其中jmp为跳转指令,xxx为跳转位置或地址,比如,该地址可以为0x42855。在该跳转位置或地址对应的指令区域添加检测代码,该检测代码用于获取检测对象当前的线程信息。将添加跳转指令和检测代码的内存函数作为漏洞检测函数。
(2)创建漏洞检测函数,在待检测对象的导入函数表中添加所述漏洞检测函数的存储地址。
例如,获取针对网络攻击的漏洞检测代码,比如,黑客将栈指针指向伪造的栈(Stack Pivot攻击),漏洞检测代码可以包括检测当前的线程信息的代码。基于检测代码创建API函数,可以采用创建工具创建,创建完成后,对创建好的API函数以内存函数的格式进行存储,比如,可以修改该API函数的名称为内存函数的常用名称,还可以对该API函数的结构与部分内容进行填充,填充为内存函数,修改或填充完毕后,系统对该API函数进行检测和分类,将该API函数归为内存函数,将API函数作为漏洞检测函数,并将漏洞检测函数的存储地址添加到检测对象的导入函数表中,以备调用。
102、通过漏洞检测函数,获取待检测对象当前的线程信息。
其中,线程信息可以包括线程内属性信息、状态信息和堆栈信息等。比如,可以包括线程标识(线程ID)、线程名称、线程优先级和堆栈信息等信息。
所谓,线程可以为操作系统能够进行运算调度的最小单位,是进程中单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。可以由线程ID,当前指令指针,寄存器集合和堆栈组成。
例如,执行漏洞检测函数中的检测指令,根据检测指令获取待检测对象当前的线程信息,获取待检测对象当前的线程信息的方式可以有多种,具体如下:
(1)执行跳转指令,跳转到目标位置执行检测代码,获取待检测对象当前的线程信息。
例如,调用漏洞检测函数后,开始执行漏洞检测函数的指令或代码。在执行漏洞检测函数的指令或代码时,读取漏洞检测函数的头部指令,由于漏洞检测函数的头部指令已经被修改为跳转指令,则执行跳转指令,跳转到漏洞检测函数中的目标位置,由于该目标位置处已插入检测代码,此时,以目标位置为起始位置开始执行插入的检测代码。根据执行的检测代码,以获取待检测对象当前的线程地址,比如,执行检测代码中的搜索指令,在系统或应用程序的进程中搜索当前的线程地址。根据获取到的线程地址,在系统或应用程序的进程中搜索到待检测对象当前的线程。当搜索到待检测对象当前的线程时,利用执行的检测代码中的读取指令,读取待检测对象当前的线程信息,比如,读取待检测对象的线程名称、线程优先级和堆栈信息等信息。
(2)执行漏洞检测函数的检测代码,获取待检测对象当前的线程信息。
例如,以漏洞检测函数的头部为起始位置执行检测代码,根据执行的检测代码,以获取待检测对象当前的线程地址,比如,执行检测代码中的搜索指令,在系统或应用程序的进程中搜索当前的线程地址。根据获取到的线程地址,在系统或应用程序的进程中搜索到待检测对象当前的线程。当搜索到待检测对象当前的线程时,利用执行的检测代码中的读取指令,读取待检测对象当前的线程信息,比如,读取待检测对象的线程名称、线程优先级和堆栈信息等信息。
103、在线程信息中查询待检测对象当前的线程栈指针值。
其中,线程栈指针值可以包括线程中栈指针的地址。其中,栈指针可以为跟踪栈顶地址的指针,按"先进后出"的原则在线程栈中存取数据。
所谓栈,被用来传递函数参数、存储返回信息、临时保存寄存器原有值以备恢复以及用来存储局部数据。单个函数调用操作所使用的栈部分被称为栈帧(stack frame)结构。栈帧结构的两端由两个指针来指定。寄存器通常用做帧指针(frame pointer),而顶部指针则用作栈指针(stack pointer)。在函数执行过程中,栈指针会随着数据的入栈和出栈而移动。
例如,根据获取到的当前的线程信息,在当前的线程信息中筛选出堆栈信息,堆栈信息可以包括现程栈的信息,比如,栈指针值。在堆栈信息中查询栈指针值,将查询到的栈指针值进行存储,比如,可以缓存也可以存储在本地数据库中。
104、当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
例如,将获取到线程栈指针值与预设栈指针值范围进行对比,比如,栈指针值即栈指针地址可以为二进制的地址也可以为十六进制地址,譬如,xx0bd00a,可以对该地址进行转换,比如,转化为十进制的数字15,将转化后的数字与预设栈指针值的合法范围进行对比,比如,预设栈指针值的合法范围为12~14,此时,待检测对象的线程栈指针值在预设栈指针值范围之外,则确定待检测对象存在漏洞。当预设栈指针值的合法范围为12~16时,此时,待检测对象的线程栈指针值在预设栈指针值范围之内时,则确定待检测对象不存在漏洞。
当确定待检测对象存在漏洞的同时,停止待检测对象的服务,采集通过该漏洞进行攻击的攻击信息。比如,假设待检测对象为应用程序,譬如浏览器,此时,需要采集攻击浏览器的恶意页面和浏览器的相关信息发送到指定区域进行安全性的后续分析,并将攻击的页面或者攻击的信息加入黑名单或攻击库,然后,在浏览器页面生成报警信息,生成报警信息的方式有多种,可以将报警信息插入对话框,弹出报警对话框,还可以生成报警页面,也可以在生成报警信息的同时,发出报警信息提示用户浏览器存在漏洞,请及时修复。提示信息的持续时间可以根据实际应用设定,当达到预设的持续时间后,关闭浏览器中受到攻击的页面,还可以停止该浏览器的服务。
另外,需要说明的是,预设栈指针范围可以由维护人员人为设定,还可以由漏洞检测装置自行设定。即步骤“当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞”之前,还包括:
在线程信息中获取线程环境块,线程环境控制块存储有预设栈指针值范围;
在所述线程环境块中提取预设栈指针值范围。
其中,线程环境块(TBE)可以为存放线程状态信息的内存空间,比如,可以存放栈指针值合法范围。比如栈指针地址最小值(Stack Base)和栈指针地址最大值(StackLimit)等信息。
在线程信息中获取线程环境块,可以通过查询或者筛选的方式在线程信息中获取线程环境块。
常见的线程环境块结构如下所示:
Figure BDA0002167938420000091
以上述线程环境块为例,在TEB偏移0x4和0x8的位置,存放了当前线程的栈指针合法范围。在TEB中对偏移0x4和0x8的位置的信息进行提取,提取出存放在偏移0x4和0x8的位置线程的栈指针合法范围。比如,查询到栈指针合法范围如下所示:
Figure BDA0002167938420000092
由上述信息中可以得出,StackBase的地址值为02210000,StackLimit的地址值为02201000。如果在线程信息中查询的栈指针值与预设栈指针值的范围进制不一样时,可以对栈指针值或者预设栈指针值进行统一,比如统一转换成十进制的数字,也可以转换为十六进制,根据实际应用来设定。
由以上可知,本实施例当检测到待检测对象受到网络攻击时,调用漏洞检测函数,通过漏洞检测函数,获取待检测对象当前的线程信息,然后,在线程信息中查询待检测对象当前的线程栈指针值,再然后,当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。由于该方案可以在受到网络攻击时就可以对漏洞进行实时检测,而无需等待到出现异常信息,所以,相对于现在只能在出现异常信息时才会对漏洞进行检测的方案而言,可以更加及时、有效的阻止漏洞的攻击,大大增强了对漏洞检测的实时性,以及提高应用程序的安全性。
根据上一个实施例所描述的方法,以下将举例作进一步详细说明。
本实施例中,将以待检测对象为浏览器,受到的网络攻击为Stack Povit攻击为例进行说明。漏洞检测装置具体可以集成在网络设备。
如图3所示,一种漏洞检测方法,具体流程可以如下:
201、网络设备得到漏洞检测函数。
例如,网络设备得到漏洞检测函数的方式可以包括以下方式:
(1)网络设备修改内存函数中的指令,得到漏洞检测函数。
例如,网络设备获取浏览器的函数库,在获取到的函数库中搜索内存操作函数和内存管理函数等内存相关函数,对搜索到的内存函数中的指令进行修改,比如,对内存函数的头部指令进行修改,将头部指令修改为跳转指令,譬如,修改为jmp xxx,其中jmp为跳转指令,xxx为跳转位置或地址,比如,该地址可以为0x42855。在该跳转位置或地址对应的指令区域添加检测代码,该检测代码用于获取检测对象当前的线程信息。将添加跳转指令和检测代码的内存函数作为漏洞检测函数。
(2)网络设备创建漏洞检测函数,在待检测对象的导入函数表中添加所述漏洞检测函数的存储地址。
例如,网络设备获取针对Stack Pivot攻击的漏洞检测代码,漏洞检测代码可以包括检测当前的线程信息的代码。基于检测代码创建API函数,可以采用创建工具创建,创建完成后,对创建好的API函数以内存函数的格式进行存储,比如,可以修改该API函数的名称为内存函数的常用名称,还可以对该API函数的结构与部分内容进行填充,填充为内存函数,修改或填充完毕后,系统对该API函数进行检测和分类,将该API函数归为内存函数,将API函数作为漏洞检测函数,并将漏洞检测函数的存储地址添加到检测对象的导入函数表中,以备调用。
202、当检测到浏览器受到网络攻击时,网络设备调用漏洞检测函数。
例如,黑客通过Stack Pivot技术攻击浏览器,使得浏览器受到网络攻击,具体过程如下:
(1)访问恶意页面
其中,恶意页面可以为对计算机用户存在恶意行为的网页,常见的有修改主页、挂马、钓鱼、自动弹出、恶意跳转等恶意行为。
例如,黑客布置好恶意页面,引导用户通过浏览器去访问该恶意页面,比如,可以通过附加广告等虚假信息诱导用户去点击去访问。当用户访问该恶意页面时,浏览器开始运行该恶意页面。
(2)构造伪栈
其中,伪栈可以为黑客伪造的线程栈。
例如,当用户访问恶意页面时,黑客利用恶意页面中在浏览器中通过堆喷射技术(Heap Spray),在运行的线程中批量创建可控数据对象,比如,Array,TypedArray等,在浏览器的当前进程的内存区域构建一段连续可控的内存,将需要返回的地址和数据填入其中,将该内存作为伪栈。
(3)触发漏洞
例如,当浏览器存在漏洞时,Stack Pivot攻击可以触发浏览器中存在的漏洞,不同的漏洞有不同的触发方法,比如,浏览器中常见的零时漏洞(0day漏洞),Stack Pivot攻击破坏浏览器的内存时,触发0day漏洞,通过破坏浏览器的内存,达到修改任意地址内存的目的。
(4)跳转到Stack Pivot指令,进行栈翻转
例如,触发漏洞后,黑客利用内置在恶意页面的攻击工具执行控制指令,根据控制指令,跳转到Stack Pivot指令进行栈翻转,比如,跳转到Stack Pivot指令后,通过伪造虚函数表,对浏览器中的内存函数的属性进行修改。
(5)修改栈指针
例如,将栈指针修改为黑客伪造的伪栈,比如,常用的修改指令可以为“XCHG EAX,ESP;RET;”,其中EAX指向了黑客伪造的栈,ESP为栈指针,XCHG指令将它们的值进行了交换,即ESP的值等于了EAX,接下来RET指令会从ESP指向的栈中取出地址来跳转,从而黑客达到了控制程序流程的目的。
例如,黑客通过Stack Pivot攻击技术攻击浏览器时,当网络设备检测到浏览器内存属性修改时,确定为受到Stack Pivot攻击技术的网络攻击,确定需要调用的漏洞检测函数,根据确定结果,生成提示信息,根据提示信息进行引导,获取系统或应用程序内的导入函数表,也可以在确定受到网络攻击后,分析该网络攻击类型并确定需要调用的漏洞函数,自动获取检测对象的导入函数表,获取的方式可以包括多种,比如,可以通过指令直接获取,还可以通过获取导入函数表的地址,通过该地址进行查询,得到待检测对象的导入函数表,等等。
例如,网络设备根据网络攻击类型,确定的漏洞检测函数类型和名称,从导入函数表中的API函数信息中获取对应的函数信息,比如,获取该函数的属性信息和存储地址,其中存储地址为该漏洞检测函数存储在计算机系统的动态链接库中的地址。通过获取到的漏洞检测函数的地址,通过该地址在计算机系统中查询到该漏洞检测函数,根据调用指令对该漏洞检测函数进行调用。
另外,需要说明的是,存储于动态链接库中的漏洞检测函数可以为用户新建并存储,也可以在动态链接库中的已有函数中进行修改。即,步骤“当检测到待检测对象受到网络攻击时,调用漏洞检测函数”之前,还可以包括得到漏洞检测函数,得到漏洞检测函数的方式可以包括以下两种方式:
(1)网络设备修改内存函数中的指令,得到漏洞检测函数。
例如,获取浏览器的内存函数,比如,获取浏览器的函数库,在获取到的函数库中搜索内存相关函数,其中,内存相关函数可以包括内存操作函数和内存管理函数等内存函数,该内存相关函数至少包括一个内存函数,具体函数类型可以包括:VirtualAllocEx、VirtualAlloc、VirtualProtect、VirtualProtectEx等函数。对搜索到的内存函数中的指令进行修改,比如,对内存函数的头部指令进行修改,将头部指令修改为跳转指令,譬如,修改为jmp xxx,其中jmp为跳转指令,xxx为跳转位置或地址,比如,该地址可以为0x42855。在该跳转位置或地址对应的指令区域添加检测代码,该检测代码用于获取检测对象当前的线程信息。将添加跳转指令和检测代码的内存函数作为漏洞检测函数。
(2)网络设备创建漏洞检测函数,在浏览器的导入函数表中添加该漏洞检测函数的存储地址。
例如,获取针对网络攻击的漏洞检测代码,比如,黑客将栈指针指向伪造的栈(Stack Pivot攻击),漏洞检测代码可以包括检测当前的线程信息的代码。基于检测代码创建API函数,可以采用创建工具创建,创建完成后,对创建好的API函数以内存函数的格式进行存储,比如,可以修改该API函数的名称为内存函数的常用名称,还可以对该API函数的结构与部分内容进行填充,填充为内存函数,修改或填充完毕后,系统对该API函数进行检测和分类,将该API函数归为内存函数,将API函数作为漏洞检测函数,并将漏洞检测函数的存储地址添加到检测对象的导入函数表中,以备调用。
203、网络设备通过漏洞检测函数,获取浏览器当前的线程信息。
例如,网络设备执行漏洞检测函数中的检测指令,根据检测指令获取浏览器当前的线程信息,获取浏览器当前的线程信息的方式可以有多种,具体如下:
(1)网络设备执行跳转指令,跳转到目标位置执行检测代码,获取待检测对象当前的线程信息。
例如,网络设备调用漏洞检测函数后,开始执行漏洞检测函数的指令或代码。在执行漏洞检测函数的指令或代码时,读取漏洞检测函数的头部指令,由于漏洞检测函数的头部指令已经被修改为跳转指令,则执行跳转指令,跳转到漏洞检测函数中的目标位置,由于该目标位置处已插入检测代码,此时,以目标位置为起始位置开始执行插入的检测代码。根据执行的检测代码,以获取待检测对象当前的线程地址,比如,执行检测代码中的搜索指令,在浏览器的进程中搜索当前的线程地址。根据获取到的线程地址,在浏览器的进程中搜索到待检测对象当前的线程。当搜索到待检测对象当前的线程时,利用执行的检测代码中的读取指令,读取待检测对象当前的线程信息,比如,读取浏览器的线程名称、线程优先级和堆栈信息等信息。
(2)网络设备执行漏洞检测函数的检测代码,获取待检测对象当前的线程信息。
例如,网络设备以漏洞检测函数的头部为起始位置执行检测代码,根据执行的检测代码,以获取浏览器当前的线程地址,比如,执行检测代码中的搜索指令,在浏览器的进程中搜索当前的线程地址。根据获取到的线程地址,在浏览器的进程中搜索到当前的线程。当搜索到当前的线程时,利用执行的检测代码中的读取指令,读取待检测对象当前的线程信息,比如,读浏览器的线程名称、线程优先级和堆栈信息等信息。
204、网络设备在线程信息中查询待检测对象当前的线程栈指针值。
例如,根据获取到的当前的线程信息,网络设备在当前的线程信息中筛选出堆栈信息,堆栈信息可以包括现程栈的信息,比如,栈指针值。在堆栈信息中查询栈指针值,将查询到的栈指针值进行存储,可以缓存也可以存储在本地数据库中。
205、当所述线程栈指针值位于预设栈指针值范围之外时,网络设备确定待检测对象存在漏洞。
例如,网络设备将获取到线程栈指针值与预设栈指针值范围进行对比,比如,栈指针值即栈指针地址可以为二进制的地址也可以为十六进制地址,譬如,xx0bd00a,可以对该地址进行转换,比如,转化为十进制的数字15,将转化后的数字与预设栈指针值的合法范围进行对比,比如,预设栈指针值的合法范围为12~14,此时,浏览器的线程栈指针值在预设栈指针值范围之外,则确定浏览器存在漏洞。当预设栈指针值的合法范围为12~16时,此时,浏览器的线程栈指针值在预设栈指针值范围之内时,则确定浏览器不存在漏洞。
当确定浏览器存在漏洞的同时,网络设备停止浏览器的服务,采集通过该漏洞进行攻击的攻击信息。比如,需要采集攻击浏览器的恶意页面和浏览器的相关信息发送到指定区域的安全服务器中进行安全性的后续分析,并将攻击的页面或者攻击的信息加入黑名单或攻击库,然后,在浏览器页面生成报警信息,生成报警信息的方式有多种,可以将报警信息插入对话框,弹出报警对话框,还可以生成报警页面,也可以在生成报警信息的同时,发出报警信息提示用户浏览器存在漏洞,请及时修复。提示信息的持续时间可以根据实际应用设定,当达到预设的持续时间后,关闭浏览器中受到攻击的页面,还可以停止该浏览器的服务。
另外,需要说明的是,预设栈指针范围可以由维护人员人为设定,还可以由漏洞检测装置自行设定。即步骤“当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞”之前,还包括:
网络设备在线程信息中获取线程环境块,线程环境控制块存储有预设栈指针值范围;
网络设备在所述线程环境块中提取预设栈指针值范围。
例如,网络设备在线程信息中获取线程环境块,可以通过查询或者筛选的方式在线程信息中获取线程环境块。
常见的线程环境块结构如下所示:
Figure BDA0002167938420000151
以上述线程环境块为例,在TEB偏移0x4和0x8的位置,存放了当前线程的栈指针合法范围。在TEB中对偏移0x4和0x8的位置的信息进行提取,提取出存放在偏移0x4和0x8的位置线程的栈指针合法范围。比如,查询到栈指针合法范围如下所示:
Figure BDA0002167938420000152
由上述信息中可以得出,StackBase的地址值为02210000,StackLimit的地址值为02201000。如果在线程信息中查询的栈指针值与预设栈指针值的范围进制不一样时,可以对栈指针值或者预设栈指针值进行统一,比如统一转换成十进制的数字,也可以转换为十六进制,根据实际应用来设定。
由以上可知,本实施例当检测到浏览器受到网络攻击时,网络设备调用漏洞检测函数,通过漏洞检测函数,网络设备获取浏览器当前的线程信息,然后,网络设备在线程信息中查询浏览器当前的线程栈指针值,再然后,当线程栈指针值位于预设栈指针值范围之外时,网络设备确定浏览器存在漏洞。由于该方案可以在受到网络攻击时就可以对漏洞进行实时检测,而无需等待到出现异常信息,所以,相对于现在只能在出现异常信息时才会对漏洞进行检测的方案而言,可以更加及时、有效的阻止漏洞的攻击,大大增强了对漏洞检测的实时性,以及提高应用程序的安全性。
为了更好的实施以上方法,本发明实施例还提供一种漏洞检测装置,该漏洞检测装置可以集成在网络设备中,该网络设备可以包括电子设备和终端等设备。
例如,参考图4,该漏洞检测装置可以包括调用单元301、获取单元302、查询单元303和确定单元304,如下:
(1)调用单元301;
调用单元301,用于当检测到待检测对象受到网络攻击时,调用漏洞检测函数,所述漏洞检测函数包括检测命令;
其中,调用单元301可以包括获取子单元3011、查询子单元3012和调用子单元3013,如图5所示,具体如下:
第一获取子单元3011,用于当检测到待检测对象受到网络攻击时,获取待检测对象的导入函数表;
查询子单元3012,用于基于导入函数表查询漏洞检测函数的存储地址;
调用子单元3013,用于根据存储地址调用所述漏洞检测函数。
例如,当检测到待检测对象受到网络共计时,获取子单元3012获取待检测对象的导入函数表,基于导入函数表,查询子单元3012查询漏洞检测函数的存储地址,调用子单元3013根据存储地址调用漏洞检测函数。
(2)获取单元302;
获取单元302,用于通过漏洞检测函数,获取所述待检测对象当前的线程信息。
其中,获取单元可以包括第一执行子单元3021、第二执行子单元3022、搜索子单元3023和读取子单元3024,如图6所示,具体如下:
第一执行子单元3021,用于在执行漏洞检测函数的跳转指令时,根据跳转指令将当前指针跳转至目标位置;
第二执行子单元3022,用于以所述目标位置为起始位置执行检测代码,以获取待检测对象当前的线程地址;
搜索子单元3023,用于基于线程地址,搜索待检测对象当前的线程;
读取子单元3024,用于当搜索到待检测对象当前的线程时,读取待检测对象当前的线程信息。
例如,第一执行子单元3021在执行漏洞检测函数的跳转指令时,根据跳转指令将当前指针跳转至目标位置,第二执行子单元3022以所述目标位置为起始位置执行检测代码,以获取待检测对象当前的线程地址,搜索子单元3023基于线程地址,搜索待检测对象当前的线程,当搜索到待检测对象当前的线程时,读取子单元3024读取待检测对象当前的线程信息。
在一实施例中,获取单元302还可以包括第三执行子单元3025、搜索子单元3023和读取子单元3024,如图7所示,具体如下:
第三执行子单元3025,用于以漏洞检测函数的头部为起始位置执行检测代码,以获取待检测对象当前的线程地址。
搜索子单元3023,用于基于线程地址,搜索待检测对象当前的线程;
读取子单元3024,用于当搜索到待检测对象当前的线程时,读取待检测对象当前的线程信息。
例如,第三执行子单元3025以漏洞检测函数的头部为起始位置执行检测代码,以获取待检测对象当前的线程地址,搜索子单元3023基于线程地址,搜索待检测对象当前的线程,当搜索到待检测对象当前的线程时,读取子单元3024读取待检测对象当前的线程信息。
(3)查询单元303;
查询单元303,用于在线程信息中查询待检测对象当前的线程栈指针值。
例如,查询单元303,具体用于根据获取到的当前的线程信息,在当前的线程信息中筛选出堆栈信息,在堆栈信息中查询栈指针值,将查询到的栈指针值进行存储。
(4)确定单元304,
确定单元304,用于当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
其中,确定单元304可以包括确定子单元3041、停止子单元3042和采集子单元3043,如图8所示,具体如下:
确定子单元3041,用于当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞;
停止子单元3042,用于停止待检测对象的服务;
采集子单元3043,用于采集通过该漏洞攻击待检测对象的攻击信息。
例如,当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞,确定子单元3041确定待检测对象存在漏洞,停止子单元3042停止待检测对象的服务,采集子单元3043采集通过该漏洞攻击待检测对象的攻击信息。
在一实施例中,确定单元304还可以包括第二获取子单元3044和提取子单元3045,如图9所示,具体如下:
第二获取子单元3044,用于在线程信息中获取线程环境块,该线程环境控制块存储有预设栈指针值范围;
提取子单元3045,用于在线程环境块中提取预设栈指针值范围。
例如,第二获取子单元3044在线程信息中获取线程环境块,该线程环境控制块存储有预设栈指针值范围,提取子单元3045在线程环境块中提取预设栈指针值范围。
在一实施例中,参考图10,该漏洞检测单元还可以包括得到单元305,如下:
得到单元305,用于得到漏洞检测函数。
其中,得到单元305可以包括第三获取子单元3051、修改子单元3052和插入子单元3053,如图11所示,具体如下:
第三获取子单元3052,用于获取待检测对象的内存函数;
修改子单元3052,用于将内存函数头部的指令修改为跳转指令,该跳转指令携带目标位置;
插入子单元3053,用于在内存函数的目标位置插入检测代码,得到漏洞检测函数。
例如,第三获取子单元3052获取待检测对象的内存函数,修改子单元3052将内存函数头部的指令修改为跳转指令,该跳转指令携带目标位置,插入子单元3053在内存函数的目标位置插入检测代码,得到漏洞检测函数。
在一实施例中,得到单元305还可以包括创建子单元3054、存储子单元3055和添加子单元3056,如图12所示,具体如下:
创建子单元3054,用于获取检测代码,并根据检测代码创建漏洞检测函数;
存储子单元3055,用于以内存函数的格式对漏洞检测函数进行存储;
添加子单元3056,在待检测对象的导入函数表中添加漏洞检测函数的存储地址。
例如,创建子单元3054获取检测代码,并根据检测代码创建漏洞检测函数,存储子单元3055以内存函数的格式对漏洞检测函数进行存储,添加子单元3056在待检测对象的导入函数表中添加漏洞检测函数的存储地址。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不作赘述。
由以上可知,本实施例的漏洞检测装置由调用单元301当检测到待检测对象受到网络攻击时,调用漏洞检测函数,然后,获取单元302通过漏洞检测函数,获取待检测对象当前的线程信息,然后,查询单元303在线程信息中查询待检测对象当前的线程栈指针值,确定单元304当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。其中,在调用单元301当检测到待检测对象受到网络攻击时,调用漏洞检测函数之前,还可以由得到单元305得到漏洞检测函数。由于该方案可以在受到网络攻击时就可以对漏洞进行实时检测,而无需等待到出现异常信息,所以,相对于现在只能在出现异常信息时才会对漏洞进行检测的方案而言,可以更加及时、有效的阻止漏洞的攻击,大大增强了对漏洞检测的实时性,以及提高应用程序的安全性。
本发明实施例还提供一种网络设备,如图13所示,其示出了本发明实施例所涉及的服务器的结构示意图,具体来讲:
该网络设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图13中示出的网络设备结构并不构成对网络设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该网络设备的控制中心,利用各种接口和线路连接整个网络设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行网络设备的各种功能和处理数据,从而对网络设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据网络设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
网络设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该网络设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,网络设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,网络设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
当检测到待检测对象受到网络攻击时,调用漏洞检测函数,通过漏洞检测函数,获取待检测对象当前的线程信息,在线程信息中查询待检测对象当前的线程栈指针值,当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
例如,具体可以为当检测到待检测对象受到网络攻击时,获取待检测对象的导入函数表,根据网络攻击类型,确定的漏洞检测函数类型和名称,从导入函数表中的API函数信息中获取对应的函数信息,通过获取到的漏洞检测函数的地址,通过该地址在计算机系统中查询到该漏洞检测函数,根据调用指令对该漏洞检测函数进行调用。调用漏洞检测函数后,开始执行漏洞检测函数的指令或代码。在执行漏洞检测函数的指令或代码时,读取漏洞检测函数的头部指令,由于漏洞检测函数的头部指令已经被修改为跳转指令,则执行跳转指令,跳转到漏洞检测函数中的目标位置,由于该目标位置处已插入检测代码,此时,以目标位置为起始位置开始执行插入的检测代码。根据执行的检测代码,以获取待检测对象当前的线程地址,根据获取到的线程地址,在系统或应用程序的进程中搜索到待检测对象当前的线程。当搜索到待检测对象当前的线程时,利用执行的检测代码中的读取指令,读取待检测对象当前的线程信息。根据获取到的当前的线程信息,在当前的线程信息中筛选出堆栈信息,在堆栈信息中查询栈指针值,将查询到的栈指针值进行存储。将获取到线程栈指针值与预设栈指针值范围进行对比,待检测对象的线程栈指针值在预设栈指针值范围之外,则确定待检测对象存在漏洞,当确定待检测对象存在漏洞的同时,停止待检测对象的服务,采集通过该漏洞进行攻击的攻击信息。
或者,具体可以为当检测到待检测对象受到网络攻击时,获取待检测对象的导入函数表,根据网络攻击类型,确定的漏洞检测函数类型和名称,从导入函数表中的API函数信息中获取对应的函数信息,通过获取到的漏洞检测函数的地址,通过该地址在计算机系统中查询到该漏洞检测函数,根据调用指令对该漏洞检测函数进行调用。调用漏洞检测函数后,开始执行漏洞检测函数的指令或代码。以漏洞检测函数的头部为起始位置执行检测代码,根据执行的检测代码,以获取待检测对象当前的线程地址,根据获取到的线程地址,在系统或应用程序的进程中搜索到待检测对象当前的线程。当搜索到待检测对象当前的线程时,利用执行的检测代码中的读取指令,读取待检测对象当前的线程信息。根据获取到的当前的线程信息,在当前的线程信息中筛选出堆栈信息,在堆栈信息中查询栈指针值,将查询到的栈指针值进行存储。将获取到线程栈指针值与预设栈指针值范围进行对比,待检测对象的线程栈指针值在预设栈指针值范围之外,则确定待检测对象存在漏洞,当确定待检测对象存在漏洞的同时,停止待检测对象的服务,采集通过该漏洞进行攻击的攻击信息。
以上各个操作的具体实施可参见前面的实施例,在此不做赘述。
由以上可知,本实施例的电子设备在当检测到待检测对象受到网络攻击时,调用漏洞检测函数,通过漏洞检测函数,获取待检测对象当前的线程信息,在线程信息中查询待检测对象当前的线程栈指针值,当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。由于该方案可以在受到网络攻击时就可以对漏洞进行实时检测,而无需等待到出现异常信息,所以,相对于现在只能在出现异常信息时才会对漏洞进行检测的方案而言,可以更加及时、有效的阻止漏洞的攻击,大大增强了对漏洞检测的实时性,以及提高应用程序的安全性。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关硬件来完成,该指令可以存储与一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种漏洞检测方法的步骤。例如,该指令可以执行如下步骤:
当检测到待检测对象受到网络攻击时,调用漏洞检测函数,通过漏洞检测函数,获取待检测对象当前的线程信息,在线程信息中查询待检测对象当前的线程栈指针值,当线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
例如,具体可以为当检测到待检测对象受到网络攻击时,获取待检测对象的导入函数表,根据网络攻击类型,确定的漏洞检测函数类型和名称,从导入函数表中的API函数信息中获取对应的函数信息,通过获取到的漏洞检测函数的地址,通过该地址在计算机系统中查询到该漏洞检测函数,根据调用指令对该漏洞检测函数进行调用。调用漏洞检测函数后,开始执行漏洞检测函数的指令或代码。在执行漏洞检测函数的指令或代码时,读取漏洞检测函数的头部指令,由于漏洞检测函数的头部指令已经被修改为跳转指令,则执行跳转指令,跳转到漏洞检测函数中的目标位置,由于该目标位置处已插入检测代码,此时,以目标位置为起始位置开始执行插入的检测代码。根据执行的检测代码,以获取待检测对象当前的线程地址,根据获取到的线程地址,在系统或应用程序的进程中搜索到待检测对象当前的线程。当搜索到待检测对象当前的线程时,利用执行的检测代码中的读取指令,读取待检测对象当前的线程信息。根据获取到的当前的线程信息,在当前的线程信息中筛选出堆栈信息,在堆栈信息中查询栈指针值,将查询到的栈指针值进行存储。将获取到线程栈指针值与预设栈指针值范围进行对比,待检测对象的线程栈指针值在预设栈指针值范围之外,则确定待检测对象存在漏洞,当确定待检测对象存在漏洞的同时,停止待检测对象的服务,采集通过该漏洞进行攻击的攻击信息。
或者,具体可以为当检测到待检测对象受到网络攻击时,获取待检测对象的导入函数表,根据网络攻击类型,确定的漏洞检测函数类型和名称,从导入函数表中的API函数信息中获取对应的函数信息,通过获取到的漏洞检测函数的地址,通过该地址在计算机系统中查询到该漏洞检测函数,根据调用指令对该漏洞检测函数进行调用。调用漏洞检测函数后,开始执行漏洞检测函数的指令或代码。以漏洞检测函数的头部为起始位置执行检测代码,根据执行的检测代码,以获取待检测对象当前的线程地址,根据获取到的线程地址,在系统或应用程序的进程中搜索到待检测对象当前的线程。当搜索到待检测对象当前的线程时,利用执行的检测代码中的读取指令,读取待检测对象当前的线程信息。根据获取到的当前的线程信息,在当前的线程信息中筛选出堆栈信息,在堆栈信息中查询栈指针值,将查询到的栈指针值进行存储。将获取到线程栈指针值与预设栈指针值范围进行对比,待检测对象的线程栈指针值在预设栈指针值范围之外,则确定待检测对象存在漏洞,当确定待检测对象存在漏洞的同时,停止待检测对象的服务,采集通过该漏洞进行攻击的攻击信息。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一种漏洞检测方法中的步骤,因此,可以实现本发明实施例所提供的任一种漏洞检测方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本发明实施例所提供的一种漏洞检测方法、装置和存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种漏洞检测方法,其特征在于,包括:
当检测到待检测对象受到网络攻击时,调用漏洞检测函数;
通过所述漏洞检测函数,获取所述待检测对象当前的线程信息;
在所述线程信息中查询所述待检测对象当前的线程栈指针值;
当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
2.根据权利要求1所述的漏洞检测方法,其特征在于,所述当检测到待检测对象受到网络攻击时,调用漏洞检测函数,包括:
当检测到待检测对象受到网络攻击时,获取所述待检测对象的导入函数表;
基于所述导入函数表查询漏洞检测函数的存储地址;
根据所述存储地址调用所述漏洞检测函数。
3.根据权利要求2所述的漏洞检测方法,其特征在于,所述当检测到待检测对象受到网络攻击时,调用漏洞检测函数之前,还包括:
获取待检测对象的内存函数;
将所述内存函数头部的指令修改为跳转指令,所述跳转指令携带目标位置;
在所述内存函数的目标位置插入检测代码,得到所述漏洞检测函数。
4.根据权利要求3所述的漏洞检测方法,其特征在于,所述通过所述漏洞检测函数,获取所述待检测对象当前的线程信息,包括:
在执行所述漏洞检测函数的跳转指令时,根据所述跳转指令将当前指针跳转至所述目标位置;
以所述目标位置为起始位置执行所述检测代码,以获取所述待检测对象当前的线程地址;
基于所述线程地址,搜索所述待检测对象当前的线程;
当搜索到所述待检测对象当前的线程时,读取所述待检测对象当前的线程信息。
5.根据权利要求2所述的漏洞检测方法,其特征在于,所述当检测到待检测对象受到网络攻击时,调用漏洞检测函数之前,还包括:
获取检测代码,并根据所述检测代码创建漏洞检测函数;
以内存函数的格式对所述漏洞检测函数进行存储;
在所述待检测对象的导入函数表中添加所述漏洞检测函数的存储地址。
6.根据权利要求5所述的漏洞检测方法,其特征在于,所述通过所述漏洞检测函数,获取所述待检测对象当前的线程信息,包括:
以所述漏洞检测函数的头部为起始位置执行所述检测代码,以获取所述待检测对象当前的线程地址;
基于所述线程地址,搜索所述待检测对象当前的线程;
当搜索到所述待检测对象当前的线程时,读取所述待检测对象当前的线程信息。
7.根据权利要求1至6任一项所述的漏洞检测方法,其特征在于,所述当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞,包括:
当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞;
停止所述待检测对象的服务;
采集通过所述漏洞攻击所述待检测对象的攻击信息。
8.根据权利要求1至6任一项所述的漏洞检测方法,其特征在于,当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞之前,还包括
在所述线程信息中获取线程环境块,所述线程环境控制块存储有预设栈指针值范围;
在所述线程环境块中提取所述预设栈指针值范围。
9.一种漏洞检测装置,其特征在于,包括:
调用单元,用于当检测到待检测对象受到网络攻击时,调用漏洞检测函数,所述漏洞检测函数包括检测命令;
获取单元,用于通过所述漏洞检测函数,获取所述待检测对象当前的线程信息;
查询单元,用于在所述当前的线程信息中查询所述待检测对象当前的线程栈指针值;
确定单元,用于当所述线程栈指针值位于预设栈指针值范围之外时,确定待检测对象存在漏洞。
10.一种存储介质,其特征在于,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至8任一项所述的漏洞检测方法中的步骤。
CN201910753298.6A 2019-08-15 2019-08-15 一种漏洞检测方法、装置和存储介质 Pending CN111191243A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910753298.6A CN111191243A (zh) 2019-08-15 2019-08-15 一种漏洞检测方法、装置和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910753298.6A CN111191243A (zh) 2019-08-15 2019-08-15 一种漏洞检测方法、装置和存储介质

Publications (1)

Publication Number Publication Date
CN111191243A true CN111191243A (zh) 2020-05-22

Family

ID=70707172

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910753298.6A Pending CN111191243A (zh) 2019-08-15 2019-08-15 一种漏洞检测方法、装置和存储介质

Country Status (1)

Country Link
CN (1) CN111191243A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112422553A (zh) * 2020-11-17 2021-02-26 杭州安恒信息技术股份有限公司 一种检测VBScript漏洞利用的方法、装置及设备
CN112685744A (zh) * 2020-12-28 2021-04-20 安芯网盾(北京)科技有限公司 一种利用栈相关寄存器检测软件漏洞的方法及装置
CN112817626A (zh) * 2021-02-26 2021-05-18 哈尔滨安天科技集团股份有限公司 一种操作系统的漏洞修复方法和装置
CN115033892A (zh) * 2022-08-10 2022-09-09 北京安普诺信息技术有限公司 一种组件漏洞分析方法、装置、电子设备及存储介质
WO2023275665A1 (en) * 2021-06-30 2023-01-05 International Business Machines Corporation Managing application security vulnerabilities

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102651060A (zh) * 2012-03-31 2012-08-29 北京奇虎科技有限公司 一种漏洞检测的方法和系统
CN103559439A (zh) * 2013-11-19 2014-02-05 浪潮(北京)电子信息产业有限公司 一种缓冲区溢出检测方法及系统
CN104217163A (zh) * 2014-09-10 2014-12-17 珠海市君天电子科技有限公司 一种检测结构化异常处理攻击的方法及装置
CN105117332A (zh) * 2015-08-19 2015-12-02 电子科技大学 一种栈溢出位置的检测方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102651060A (zh) * 2012-03-31 2012-08-29 北京奇虎科技有限公司 一种漏洞检测的方法和系统
CN103559439A (zh) * 2013-11-19 2014-02-05 浪潮(北京)电子信息产业有限公司 一种缓冲区溢出检测方法及系统
CN104217163A (zh) * 2014-09-10 2014-12-17 珠海市君天电子科技有限公司 一种检测结构化异常处理攻击的方法及装置
CN105117332A (zh) * 2015-08-19 2015-12-02 电子科技大学 一种栈溢出位置的检测方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112422553A (zh) * 2020-11-17 2021-02-26 杭州安恒信息技术股份有限公司 一种检测VBScript漏洞利用的方法、装置及设备
CN112685744A (zh) * 2020-12-28 2021-04-20 安芯网盾(北京)科技有限公司 一种利用栈相关寄存器检测软件漏洞的方法及装置
CN112685744B (zh) * 2020-12-28 2022-05-17 安芯网盾(北京)科技有限公司 一种利用栈相关寄存器检测软件漏洞的方法及装置
CN112817626A (zh) * 2021-02-26 2021-05-18 哈尔滨安天科技集团股份有限公司 一种操作系统的漏洞修复方法和装置
WO2023275665A1 (en) * 2021-06-30 2023-01-05 International Business Machines Corporation Managing application security vulnerabilities
US11874932B2 (en) 2021-06-30 2024-01-16 International Business Machines Corporation Managing application security vulnerabilities
CN115033892A (zh) * 2022-08-10 2022-09-09 北京安普诺信息技术有限公司 一种组件漏洞分析方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN111191243A (zh) 一种漏洞检测方法、装置和存储介质
CN104766011B (zh) 基于主机特征的沙箱检测告警方法和系统
US8955124B2 (en) Apparatus, system and method for detecting malicious code
JP5094928B2 (ja) 偽装仮想マシン情報を利用したインテリジェントボット対応方法及び装置
CN110225029B (zh) 注入攻击检测方法、装置、服务器及存储介质
CN109586282B (zh) 一种电网未知威胁检测系统及方法
CN109918907B (zh) Linux平台进程内存恶意代码取证方法、控制器及介质
CN102043915B (zh) 一种非可执行文件中包含恶意代码的检测方法及其装置
CN107688743B (zh) 一种恶意程序的检测分析方法及系统
US9239922B1 (en) Document exploit detection using baseline comparison
EP3350741B1 (en) Detecting software attacks on processes in computing devices
CN103780450B (zh) 浏览器访问网址的检测方法和系统
CN103218561B (zh) 一种保护浏览器的防篡改方法和装置
CN110059477A (zh) 一种攻击检测方法及装置
CN106682493B (zh) 一种防止进程被恶意结束的方法、装置及电子设备
CN110135162A (zh) Webshell后门识别方法、装置、设备及存储介质
CN116340943A (zh) 应用程序保护方法、装置、设备、存储介质和程序产品
CN107103243B (zh) 漏洞的检测方法及装置
US10275595B2 (en) System and method for characterizing malware
CN113312620B (zh) 一种程序安全检测方法及装置、处理器芯片、服务器
CN109472135B (zh) 一种检测进程注入的方法、装置及存储介质
CN107885489A (zh) 一种快速检测实名登记数据指标的方法和系统
EP3535681B1 (en) System and method for detecting and for alerting of exploits in computerized systems
CN116488872A (zh) JavaWeb应用的攻击行为的识别和防御方法及其装置
CN115643044A (zh) 数据处理方法、装置、服务器及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination