CN104217163B - 一种检测结构化异常处理攻击的方法及装置 - Google Patents
一种检测结构化异常处理攻击的方法及装置 Download PDFInfo
- Publication number
- CN104217163B CN104217163B CN201410459683.7A CN201410459683A CN104217163B CN 104217163 B CN104217163 B CN 104217163B CN 201410459683 A CN201410459683 A CN 201410459683A CN 104217163 B CN104217163 B CN 104217163B
- Authority
- CN
- China
- Prior art keywords
- seh
- application program
- monitored
- thread
- monitoring
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明的实施例公开一种检测结构化异常处理攻击的方法及装置。该方法包括:分别在每一待监测的应用程序的进程中注入预先设置的SEH监测处理包;运行注入的SEH监测处理包,以在待监测的应用程序的进程中加载SEH监测处理包中的VEH监测程序;获取待监测的应用程序的进程中的每一线程,并在每一线程的SEH结构链表的链尾,填充SEH监测处理包中预先设置的标记信息;在VEH监测程序获取到待监测的应用程序的进程中发生异常的线程后,提取发生异常的线程的SEH结构链表的链尾信息;若提取的链尾信息与标记信息不匹配,确定发生异常的线程对应的应用程序发生SEH攻击。应用本发明,可以有效检测SEH攻击、提升操作系统安全性。
Description
技术领域
本发明涉及网络安全技术,尤其涉及一种检测结构化异常处理(SEH,StructuredException Handler)攻击的方法及装置。
背景技术
随着计算机网络技术的广泛应用,互联网逐渐成为恶意应用程序攻击用户计算机的主要途径,恶意应用程序通过将应用程序文件伪装成其他类型文件,并引诱用户点击和下载,在恶意应用程序被下载到用户计算机并成功运行后,攻击者就可以利用安装的恶意应用程序,针对操作系统以及应用程序软件的漏洞实施攻击,例如,破坏用户计算机、窃取用户隐私信息等。其中,漏洞是指操作系统或应用程序软件在逻辑设计上的缺陷或在编写时产生的错误。这些缺陷或错误往往可以被攻击者利用,并植入木马等恶意应用程序,从而侵害、控制甚至破坏用户计算机软硬件系统,或者窃取用户隐私信息,给用户的网络安全带来极大隐患。
其中,通过缓冲区溢出的方式对操作系统漏洞实施攻击,是近年来操作系统遭受恶意应用程序攻击的主要方式。缓冲区是操作系统在应用程序运行期间,为该应用程序分配的用于存放局部变量及函数参数的一段连续的存储空间。当应用程序向预分配的固定大小(容量)的缓冲区中进行数据填充时,如果填充的数据超过缓冲区容量,在操作系统不对缓冲区中填充的数据进行边界检测的情况下,将发生缓冲区溢出现象,溢出的数据将向与缓冲区相邻的高地址继续写入,形成缓冲区溢出现象。
由于操作系统存在缺乏边界安全检查的机制,从而为攻击者入侵提供了可乘之机,攻击者可以利用缓冲区溢出现象,通过构造用于填充缓冲区的填充数据,从而使得溢出的数据覆盖到该应用程序的关键位置,例如,函数指针、函数的返回地址或是栈指针等,实现对该应用程序执行流程的控制,并进而可以将该应用程序引导到预先存放的恶意代码处执行,从而达到破坏操作系统甚至获得操作系统控制权限。以获得操作系统控制权限为例,通过缓冲区溢出,可以获取根(root)权限或管理员权限,并利用获得的根权限或管理员权限,实现窃取用户隐私信息的目的。
目前,针对缓冲区溢出,业界虽然提出了许多检测和防护策略,但一方面,由于不断有新的操作系统漏洞被攻击者发掘和利用,另一方面,已有的防护策略不断被层出不穷的攻击方式所攻破。因而,缓冲区溢出攻击仍面临较为严峻的形势,针对缓冲区溢出攻击的研究是网络安全领域的一个热点研究。
SEH攻击是一种新的缓冲区溢出攻击方式,攻击者通过利用堆栈溢出漏洞或者其他漏洞构造攻击数据,并使用构造的攻击数据覆盖运行应用程序的线程的SEH结构链表上的一个或多个节点中的数据,从而控制SEH结构链表中用于控制应用程序执行流程的指令指针寄存器(EIP,Instruction Pointer),给操作系统以及应用程序运行带来极大的安全威胁。
以Windows操作系统为例,SEH攻击一直是微软面临的最大安全问题。虽然微软在不断完善SEH攻击的防护策略,例如,在Windows XP SP2之后,针对SEH攻击,微软引入SafeSEH防护策略。但由于该SafeSEH防护策略,需要编译器在编译可执行(PE,PortableExecute)文件时进行特殊支持,例如,需要.net的编译器编译的映像文件支持才能发挥防护作用,而Windows XP SP2之前的很多库文件及操作系统文件都是由不支持SafeSEH的编译器编译的。因此,在漏洞攻击中,攻击者可以利用早期(Windows XP SP2之前)不支持SafeSEH编译器的模块进行攻击,从而绕过设置的SafeSEH防护策略。
针对SEH攻击,在Vista以上的版本中,微软还引入结构化异常处理覆盖保护(SEHOP,Structured Exception Handler Overwrite Protection)防护策略,该SEHOP防护策略具有比SafeSEH防护策略更严格的防护机制。通过对应用程序运行使用的线程的SEH结构进行安全检测,以检测该应用程序是否受到了SEH攻击。但该SEHOP防护策略需要用户手动开启SEHOP防护开关,也同样需要编译器的支持,且不支持Vista以下的版本,使得Vista以下版本的操作系统不能有效进行SEH攻击检测,因而,与SafeSEH防护策略相类似,防护SEH攻击的应用范围较为有限,不能满足早期版本的操作系统对SEH攻击的检测和防护;进一步地,由于层出不穷的漏洞攻击,尤其是在微软停止XP服务后,已有的SafeSEH防护策略以及SEHOP防护策略可能被其他的攻击方式所攻破,使得许多基于Windows操作系统的用户将面临更为严重的安全问题。
发明内容
有鉴于此,本发明实施例提供一种检测结构化异常处理攻击的方法及装置,能够扩展应用范围,有效检测SEH攻击、提升操作系统以及应用程序安全性。
为达到上述目的,本发明的实施例采用如下技术方案:
一方面,本发明实施例提供一种检测结构化异常处理攻击的方法,该方法包括:
分别在每一待监测的应用程序的进程中注入预先设置的SEH监测处理包;
运行注入的SEH监测处理包,以在所述待监测的应用程序的进程中加载所述SEH监测处理包中的VEH监测程序;
获取待监测的应用程序的进程中的每一线程,并在所述每一线程的SEH结构链表的链尾,填充所述SEH监测处理包中预先设置的标记信息;
在所述VEH监测程序获取到所述待监测的应用程序的进程中发生异常的线程后,提取所述发生异常的线程的SEH结构链表的链尾信息;
如果提取的链尾信息与所述标记信息不匹配,确定所述发生异常的线程对应的应用程序发生SEH攻击。
本发明实施例提供的检测结构化异常处理攻击的方法,通过在进程中注入SEH监测处理包,用以加载VEH监测程序,以及,在每一线程的SEH结构链表的链尾,填充标记信息,在监测到发生异常的线程后,获取异常线程对应的SEH结构链表的链尾信息,与标记信息进行比较以确定是否发生SEH攻击。这样,通过注入程序的方法注入SEH监测处理包,并利用注入的SEH监测处理包直接进行异常线程监测和处理,可以不依赖于编译器,并能有效检测SEH攻击,可以解决早期Windows系统或早期PE文件的安全性防护技术问题,扩展了安全检测的应用范围,有效提升了操作系统以及应用程序安全性。
另一方面,本发明实施例提供一种检测结构化异常处理攻击的装置,包括:注入模块、加载模块、标记信息填充模块、异常监测模块以及SEH攻击确定模块,其中,
注入模块,用于分别在每一待监测的应用程序的进程中注入预先设置的SEH监测处理包;
加载模块,用于运行注入的SEH监测处理包,以在所述待监测的应用程序的进程中加载所述SEH监测处理包中的VEH监测程序;
标记信息填充模块,用于获取待监测的应用程序的进程中的每一线程,并在所述每一线程的SEH结构链表的链尾,填充所述SEH监测处理包中预先设置的标记信息;
异常监测模块,用于在所述VEH监测程序获取到所述待监测的应用程序的进程中发生异常的线程后,提取所述发生异常的线程的SEH结构链表的链尾信息;
SEH攻击确定模块,如果提取的链尾信息与所述标记信息不匹配,确定所述发生异常的线程对应的应用程序发生SEH攻击。
本发明实施例提供的检测结构化异常处理攻击的装置,通过注入模块在进程中注入SEH监测处理包,加载模块加载VEH监测程序,标记信息填充模块在每一线程的SEH结构链表的链尾,填充标记信息,异常监测模块在监测到发生异常的线程后,获取异常线程对应的SEH结构链表的链尾信息,SEH攻击确定模块将链尾信息与标记信息进行比较以确定是否发生SEH攻击。这样,通过注入程序的方法注入SEH监测处理包,并利用注入的SEH监测处理包直接进行异常线程监测和处理,可以不依赖于编译器,并可以解决早期Windows系统或早期PE文件的安全性防护技术问题,有效提升了操作系统以及应用程序安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例检测结构化异常处理攻击的方法流程示意图;
图2为本发明实施例检测结构化异常处理攻击的方法具体流程示意图;
图3为本发明实施例检测结构化异常处理攻击的装置结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例检测结构化异常处理攻击的方法流程示意图。参见图1,该方法包括:
步骤101,分别在每一待监测的应用程序的进程中注入预先设置的SEH监测处理包;
本步骤中,在应用程序的进程中注入SEH监测处理包,是为了使注入的SEH监测处理包能够监测并处理所述待监测的应用程序的进程在后续应用中发生的异常。其中,SEH监测处理包为根据本发明实施例检测结构化异常处理攻击的方法编写的程序代码段,关于依据本发明实施例方法编写程序代码段为公知技术,在此略去详述。
由于不同的用户,对操作系统进行操作的权限可能不同。例如,以Windows操作系统为例,Windows操作系统将用户分为不同的权限组,并为每个权限组赋予相应的操作权限。其中,权限组可以包括:管理员权限组、高权限用户组、普通用户组以及匿名权限组等。其中,管理员权限组对应的操作权限为管理员权限,高权限用户组对应的操作权限为高权限,普通用户组对应的操作权限为普通权限等。
本发明实施例中,考虑到不同的操作权限虽然将用户对操作系统的操作限制在相应的操作权限内,但由于各操作权限之间并不相互独立,都依赖于同样的指令完成权限操作。因而,可以利用提升权限(Adjust Token Privilege),例如,钩子(Hook)的方法提升用户访问的操作权限,其中,提升权限是指程序员或相关技术人员利用各种操作系统漏洞,突破操作系统指派的操作权限级别,将自己当前的操作权限提高一个或多个级别,从而使用户获取更多对操作系统进行操作的权限,例如,通过提升权限的方法,可以使用户获取原先未曾拥有的对系统文件的删、增、加载、改等权限。
这样,通过提升权限的方法将本发明实施例的SEH监测处理包注入到运行的待监测应用程序的进程中,使得注入的SEH监测处理包能够对应用程序进程进行监测并拥有对进程进行处理的权限,由于拥有操作系统的高级权限,从而在后续应用中,本发明实施例提出的检测结构化异常处理攻击的方法可以不依赖于操作系统及模块版本,也无需编译器的支持,可以对早期Windows系统或者早期PE文件进行有效防护;进一步地,由于通过注入(提升权限)的方式,实现的是主动防御,可以实现对进程的有效监控,并能在后续确定进程中某一线程异常时,能够实时对异常线程进行处理,从而降低操作系统遭受攻击的风险。
步骤102,运行注入的SEH监测处理包,以在所述待监测的应用程序的进程中加载所述SEH监测处理包中的VEH监测程序;
本步骤中,在进程中注入SEH监测处理包,就可以依据注入的SEH监测处理包对进程进行高级权限的操作。
步骤103,获取待监测的应用程序的进程中的每一线程,并在每一线程的SEH结构链表的链尾,填充所述SEH监测处理包中预先设置的标记信息;
本步骤中,一运行的应用程序对应一进程,一进程可以对应一个或多个线程。
本发明实施例中,步骤103由运行的SEH监测处理包触发执行。步骤102中,加载VEH监测程序与步骤103并没有先后顺序之分。步骤102中的加载VEH监测程序可以在步骤103之后执行,也可以与步骤103同时执行。
步骤104,在所述VEH监测程序获取到所述待监测的应用程序的进程中发生异常的线程后,提取所述发生异常的线程的SEH结构链表的链尾信息;
步骤105,如果提取的链尾信息与所述标记信息不匹配,确定所述发生异常的线程对应的应用程序发生SEH攻击。
本步骤中,如果链尾信息与标记信息不相同,表明运行的应用程序发生了堆栈溢出,即遭受SEH攻击。
在确定发生SEH攻击后,需要对发生SEH攻击的应用程序进行处理,以有效降低用户的安全性风险。因而,本发明实施例中,该方法还可以进一步包括:
步骤106,按照预先设置的SEH攻击处理策略,对发生SEH攻击的线程对应的应用程序进行处理。
本步骤可以具体包括:
发送消息提醒,以提醒用户进行处理;和/或,
对发生SEH攻击的线程对应的应用程序进行安全扫描,并对扫描结果为不安全的应用程序进行隔离;和/或,
卸载所述发生SEH攻击的线程对应的应用程序,以避免该应用程序运行时带来的潜在风险;和/或,
为所述发生SEH攻击的线程对应的应用程序设置访问权限,例如,设置禁止网络访问权限或有限访问权限。
图2为本发明实施例检测结构化异常处理攻击的方法具体流程示意图。参见图2,该方法包括:
步骤201,在待监测的应用程序的进程中注入预先设置的SEH监测处理包;
本步骤中,作为可选实施例,SEH监测处理包包括主程序以及监测及分析防护模块,其中,监测及分析防护模块包括前述的VEH监测程序、填充标记信息以及确定发生异常对应的相关程序代码段。当然,实际应用中,也可以将填充标记信息以及确定发生异常对应的相关程序代码段集成在VEH监测程序中,并由主程序负责将监测及分析防护模块注入到待监测的应用程序的进程中,即需要保护的进程中。例如,QQ应用程序进程、微信进程、IE进程、Office进程、应用程序安装进程等。具体地,可以预先在未运行的每一待监测的应用程序中注入一SEH监测处理包,并设置在待监测的应用程序启动时,同步启动注入的SEH监测处理包。
本发明实施例中,每一待监测的应用程序中注入有一SEH监测处理包。
作为可选实施例,在待监测的应用程序的进程中注入预先设置的SEH监测处理包包括:
A11,在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块,以在所述待监测的应用程序中增加所述注入的监测及分析防护模块;
本步骤中,可以通过调用WindowManager的addview方法在所述待监测的应用程序中增加本发明实施例的监测及分析防护模块。这样,通过在待监测的应用程序中添加监测及分析防护模块,从而可以在后续流程中,在应用程序对应进程中的各线程执行相应的操作时,可以按照注入的监测及分析防护模块监测线程并对线程操作进行处理。关于调用WindowManager的addview方法,属于公知技术,在此略去详述。
作为可选实施例,在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块包括:
将监测及分析防护模块的内存变量对应的代码写入动态链接库(DLL,DynamicLink Library)中,利用操作系统中的windows钩子(Hook)技术,将写入动态链接库中的内存变量代码映射到所述待监测的应用程序中。
作为另一可选实施例,在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块也可以包括:
将监测及分析防护模块的内存变量对应的代码写入动态链接库中,利用操作系统中的远程注入(CreatRemoteThread)以及动态加载(LoadLibrary),将写入动态链接库中的内存变量代码映射到所述待监测的应用程序中。
所应说明的是,本发明实施例中,所述的注入是指将预先编写的模块或应用程序,通过远程注入或其他方案,映射进其它进程的地址空间,使得用户可以拥有操作其他进程的高级权限。本发明实施例中的注入仅是示例性的,本领域普通技术人员可以采用其他的技术来完成注入流程,例如,在操作系统启动后调用SetWindowsHookEx接口向Windows操作系统注册本发明实施例的SEH监测处理包,用于监测和处理应用程序的进程操作事例,本发明实施例不再一一例举。
A12,监测到所述待监测的应用程序启动并配置进程,在配置的进程中启动注入在所述待监测的应用程序中的所述监测及分析防护模块。
本步骤中,应用程序在启动的过程中,操作系统为该应用程序分配进程,在进程启动后,触发加载所述待监测的应用程序中注入的所述监测及分析防护模块。
作为可选实施例,在注入预先设置的SEH监测处理包之前,该方法进一步包括:
调用Windows操作系统的SetWindowsHookEx接口,设置用于监测和处理进程操作的SEH监测处理包。
本步骤中,SEH监测处理包是Windows操作系统中用于监测和处理进程操作的钩子程序。通过设置SEH监测处理包,每当进程中的任一线程发生异常后,SEH监测处理包可以捕获该异常的线程并可以进行相应处理,即SEH监测处理包优先得到该线程的控制权。这样,SEH监测处理包可以无需通过编译器进行编译,能够直接检测发生异常的线程是否受到了SEH攻击。
作为另一可选实施例,在注入预先设置的SEH监测处理包之前,还可以预先获取用于对应用程序进行注入的操作权限,因而,该方法可以进一步包括:
获取操作系统的根(Root)权限。
本步骤中,通过预先获取操作系统的Root权限,从而可以实现提升权限。其中,Root是Linux操作系统、Windows操作系统和Unix操作系统中的超级管理员用户账户,如果获得Root权限,表示已经获取操作系统的最高权限。这样,可以对操作系统中的任何文件(包括操作系统文件)执行增、删、改、查等操作,从而可以实现SEH监测处理包的注入。
步骤202,触发运行已注入的SEH监测处理包,以使SEH监测处理包在待监测的应用程序的进程中加载VEH监测程序;
本步骤中,在待监测的应用程序的进程中注入SEH监测处理包后,SEH监测处理包获得了对待监测的应用程序的进程的Root权限,从而可以通过运行SEH监测处理包,按照SEH监测处理包中预先设置的策略,对待监测的应用程序执行增、删、改、查等操作。
作为可选实施例,由于一个进程包含有一个或多个线程,因而,可以在待监测的应用程序对应进程的每一线程中加载一VEH监测程序。
本发明实施例中,对于线程,由于易发生堆栈溢出攻击。具体来说,由于在堆栈空间中进行数据拷贝时,未进行数据长度检查,因而,可通过拷贝超过堆栈空间大小的数据来覆盖堆栈空间中的正常数据,如函数指针、SEH处理函数、函数返回地址等,从而控制EIP。这样,通过在每一线程中配置VEH监测程序,可以实时对线程进行监测,并对异常的线程进行实时处理。
当然,实际应用中,也可以只在每一进程中加载一VEH监测程序,该VEH监测程序用于对该进程中的所有线程是否异常进行监测。这样,当线程初始化时,通过向线程的堆栈中注入(加载)VEH监测程序,从而对线程进行有效监测。
本发明实施例中,在SEH监测处理包运行后,SEH监测处理包在待监测的应用程序的进程中加载用于对线程异常进行监测的VEH监测程序并启动SEH监测处理包中其他相应功能,即SEH监测处理包在所述待监测的应用程序的进程中驻留用于监测线程的VEH监测程序,使得VEH监测程序注册在所述待监测的应用程序的进程中,以用于监测应用程序的进程中的异常。
本发明实施例中,向量异常处理(VEH,Vectored Exception Handling)可以通过使用Win32API函数AddVectoredExceptionHandler进行注册,并设置Win32API函数AddVectoredExceptionHandler的参数为指向EXCEPTION_POINTERS结构的指针。
实际应用中,可以是在注入SEH监测处理包后,自动启动注入的SEH监测处理包,也可以是在注入SEH监测处理包后,向用户显示提示信息,在用户根据提示信息选取启动后,启动注入的SEH监测处理包。如果用户选取不启动,则表明用户不执行SEH攻击检测。
步骤203,SEH监测处理包枚举待监测的应用程序的进程中的每一线程,并获取枚举的每一线程的SEH结构链表;
本步骤中,待监测的应用程序可以为一个或多个,多个待监测的应用程序可以同时运行。每一应用程序对应一进程,每一进程对应一个或多个线程。在创建线程后,SEH监测处理包枚举当前进程中包含的所有线程,并获取每一线程的SEH结构链表。
SEH结构链表保存在线程堆栈的EXCEPTION_REGISTRATION结构体中,结构体包括两个元素。其中,第一个元素为指向下一EXCEPTION_REGISTRATION结构体的指针(prev),第二个元素为指向异常处理程序的指针(handler)。这样,使得基于堆栈的SEH结构相互连接,形成一个SEH结构链表。
作为可选实施例,在后续应用中,该方法还可以进一步包括:
SEH监测处理包监测到有新线程创建,为新创建的线程加载VEH监测程序,并获取新创建的线程的SEH结构链表,执行步骤204。
本步骤中,可以通过SEH监测处理包中的DLL_THREAD_ATTACH函数来监测是否有新线程创建。
步骤204,在每一线程的SEH结构链表的链尾,填充所述SEH监测处理包中预先设置的标记信息;
本步骤中,作为可选实施例,标记信息可以为一检测标记函数,检测标记函数可以为预先设置的SEHEnd()函数,该SEHEnd()函数仅仅用于填充在SEH结构链表的链尾以作标记,可以不包含任何具体内容,以便在后续线程发生异常时进行比对。当然,实际应用中,标记信息也可以是预先设置的可用于标记的其他信息,例如,字符串、数字等。
所应说明的是,本发明实施例中,在SEH结构链表的链尾填充标记信息只是示例性说明,实际应用中,也可以在SEH结构链表中控制EIP的数据后,例如,在函数指针、SEH处理函数、函数返回地址之后的SEH结构链表空间中,填充标记信息。即可以在SEH结构链表中预先指定的位置处填充标记信息。
步骤205,VEH监测程序监测进程中的线程,确定线程发生异常,获取发生异常的线程的SEH结构链表;
本步骤中,关于确定线程是否发生异常为公知技术,在此略去详述。
步骤206,遍历所述发生异常的线程的SEH结构链表,提取SEH结构链表的链尾信息;
本步骤中,通过从SEH结构链表的链首进行遍历,提取异常线程的SEH结构链表的链尾信息。
步骤207,判断提取的链尾信息是否与所述标记信息相同,如果是,执行步骤211,不作处理,否则,执行步骤208;
步骤208,确定发生SEH攻击;
本步骤中,当提取的链尾信息与预先设置的标记信息(检测标记函数)不相同,表明该线程的SEH结构链表中预先设置的链尾信息被其他数据所覆盖,发生了缓冲区溢出(堆栈溢出),而该缓冲区溢出可能是由于攻击者利用漏洞进行SEH攻击导致的。也就是说,通过遍历该线程SEH结构链表,查看链尾(节点)的处理函数是否为SEHEnd(),如果不是,则说明线程的堆栈发生了溢出破坏,需要发出警告提示以进行相应处理。
步骤209,按照预先设置的SEH攻击处理策略,对发生SEH攻击的线程对应的应用程序进行处理;
本步骤中,在确定发生SEH攻击后,可以向用户发送消息提醒,并根据用户返回的结果进行处理;也可以自动卸载该发生SEH攻击的线程对应的应用程序,以避免该应用程序运行时带来的潜在风险;还可以为该发生SEH攻击的线程对应的应用程序设置访问权限,例如,设置禁止网络访问权限或有限访问权限等。这样,无论攻击者利用应用程序进程中任一线程进行SEH攻击,都可以被有效检测并进行相应处理,以保障操作系统以及应用程序的安全性。
步骤211,不作处理。
本步骤中,如果链尾信息与预先设置的标记信息相同,表明该SEH结构链表未发生堆栈溢出,运行的应用程序未遭受SEH攻击,可以继续运行。
由上述可见,本发明实施例提供专门针对SEH攻击的检测方法,通过在待监测的应用程序的进程中注入SEH监测处理包,以在待监测的应用程序的进程中加载VEH监测程序,以及,在每一线程的SEH结构链表的链尾,填充标记信息,并在监测到发生异常的线程后,获取异常线程对应的SEH结构链表的链尾信息,与标记信息进行比较以确定是否发生SEH攻击。通过注入程序的方法注入SEH监测处理包,并利用注入的SEH监测处理包直接进行异常线程监测和处理,可以不依赖于编译器,无需编译器的支持,也不依赖操作系统版本、模块版本或软件版本,并能有效的防护SEH攻击,有效解决了早期Windows系统,或者早期PE文件的安全性防护技术问题,极大地扩展了安全检测的应用范围,有效提升了操作系统以及应用程序安全性。进一步地,还可以兼容现有Windows操作系统的安全机制,如DEP等技术,可大大提升用户电脑的安全保障性,极大地增加了漏洞攻击的难度,从而可大大降低漏洞攻击的成功率。而且,还可以针对进程内所有模块进行SHE防护,不依赖操作系统开关,可支持所有已知及未知模块的SHE攻击防护
图3为本发明实施例检测结构化异常处理攻击的装置结构示意图。参见图3,该装置包括:注入模块301、加载模块302、标记信息填充模块303、异常监测模块304以及SEH攻击确定测模块305,其中,
注入模块301,用于分别在每一待监测的应用程序的进程中注入预先设置的SEH监测处理包;
本发明实施例中,可以通过提升权限的方法将SEH监测处理包注入到运行的待监测应用程序的进程中,使得注入的SEH监测处理包能够对应用程序进程进行监测并拥有对进程进行处理的权限。
作为可选实施例,注入模块301包括:注入单元以及启动单元(图中未示出),其中,
注入单元,用于在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块,以在所述待监测的应用程序中增加所述注入的监测及分析防护模块;
本发明实施例中,作为一可选实施例,在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块包括:
将监测及分析防护模块的内存变量对应的代码写入动态链接库(DLL,DynamicLink Library)中,利用操作系统中的windows钩子(Hook)技术,将写入动态链接库中的内存变量代码映射到所述待监测的应用程序中。
作为另一可选实施例,在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块也可以包括:
将监测及分析防护模块的内存变量对应的代码写入动态链接库中,利用操作系统中的远程注入(CreatRemoteThread)以及动态加载(LoadLibrary),将写入动态链接库中的内存变量代码映射到所述待监测的应用程序中。
启动单元,用于在监测到所述待监测的应用程序启动并配置进程后,在配置的进程中启动注入在所述待监测的应用程序中的所述监测及分析防护模块。
加载模块302,用于运行注入的SEH监测处理包,以在所述待监测的应用程序的进程中加载所述SEH监测处理包中的VEH监测程序;
本发明实施例中,加载模块302进一步用于为所述待监测的应用程序的进程中的每一线程加载所述SEH监测处理包中的VEH监测程序。
标记信息填充模块303,用于获取待监测的应用程序的进程中的每一线程,并在所述每一线程的SEH结构链表的链尾,填充所述SEH监测处理包中预先设置的标记信息;
本发明实施例中,待监测的应用程序可以根据实际需要变化,例如,当用户启动新的应用程序,则该新启动的应用程序成为待监测的应用程序之一。需要为新启动的应用程序的线程加载VEH监测程序,并获取该线程的SEH结构链表,在该线程的SEH结构链表的链尾,填充所述SEH监测处理包中预先设置的标记信息。
本发明实施例中,标记信息为SEHEnd()函数。
异常监测模块304,用于在所述VEH监测程序获取到所述待监测的应用程序的进程中发生异常的线程后,提取所述发生异常的线程的SEH结构链表的链尾信息;
本发明实施例中,在进程或线程中加载VEH监测程序后,该VEH监测程序对线程进行监测,以获取发生异常的线程。
SEH攻击确定测模块305,如果提取的链尾信息与所述标记信息不匹配,确定所述发生异常的线程对应的应用程序发生SEH攻击。
本发明实施例中,如果提取的链尾信息与所述标记信息相匹配,则不作处理。
作为一可选实施例,该装置还可以进一步包括:
处理包设置模块306,用于调用Windows操作系统的SetWindowsHookEx接口,设置用于监测和处理进程操作的SEH监测处理包。
作为另一可选实施例,该装置还可以进一步包括:
权限获取模块307,用于获取操作系统的根(Root)权限。
作为另一可选实施例,该装置还可以进一步包括:
SEH攻击处理模块308,用于按照预先设置的SEH攻击处理策略,对发生SEH攻击的线程对应的应用程序进行处理。
本发明实施例中,SEH攻击处理模块308可以包括如下单元中的任一单元或其任意组合:
SEH攻击提醒单元,用于发送消息提醒,以提醒用户进行处理;
扫描隔离单元,用于对发生SEH攻击的线程对应的应用程序进行安全扫描,并对扫描结果为不安全的应用程序进行隔离;
卸载单元,用于卸载所述发生SEH攻击的线程对应的应用程序,以避免该应用程序运行时带来的潜在风险;
权限设置单元,用于为所述发生SEH攻击的线程对应的应用程序设置访问权限,例如,设置禁止网络访问权限或有限访问权限。
举例来说,作为一可选实施例,SEH攻击处理模块308包括:扫描隔离单元、SEH攻击提醒单元、卸载单元以及权限设置单元(图中未示出),其中,
扫描隔离单元,用于对发生SEH攻击的线程对应的应用程序进行安全扫描,对扫描结果为不安全的应用程序进行隔离,并通知SEH攻击提醒单元;
SEH攻击提醒单元,用于接收通知,发送消息提醒,以提醒用户进行处理,如果接收到用户要求卸载的消息,通知卸载单元,如果接收到用户要求权限设置的消息,通知权限设置单元;
卸载单元,用于卸载所述发生SEH攻击的线程对应的应用程序;
权限设置单元,用于为所述发生SEH攻击的线程对应的应用程序设置访问权限,并使所述发生SEH攻击的线程对应的应用程序按照设置的访问权限运行。
本发明实施例中,设置访问权限可以是设置禁止网络访问权限或设置有限访问权限。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (15)
1.一种检测结构化异常处理攻击的方法,其特征在于,该方法包括:
分别在每一待监测的应用程序的进程中注入预先设置的SEH监测处理包;
运行注入的SEH监测处理包,以在所述待监测的应用程序的进程中加载所述SEH监测处理包中的VEH监测程序;
获取待监测的应用程序的进程中的每一线程,并在所述每一线程的SEH结构链表的链尾,填充所述SEH监测处理包中预先设置的标记信息;
在所述VEH监测程序获取到所述待监测的应用程序的进程中发生异常的线程后,提取所述发生异常的线程的SEH结构链表的链尾信息;
如果提取的链尾信息与所述标记信息不匹配,确定所述发生异常的线程对应的应用程序发生SEH攻击。
2.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
按照预先设置的SEH攻击处理策略,对发生SEH攻击的线程对应的应用程序进行处理。
3.根据权利要求2所述的方法,其特征在于,所述按照预先设置的SEH攻击处理策略,对发生SEH攻击的线程对应的应用程序进行处理包括:
发送消息提醒;和/或,
对发生SEH攻击的线程对应的应用程序进行安全扫描,并对扫描结果为不安全的应用程序进行隔离;和/或,
卸载所述发生SEH攻击的线程对应的应用程序;和/或,
为所述发生SEH攻击的线程对应的应用程序设置访问权限。
4.根据权利要求1所述的方法,其特征在于,在所述注入预先设置的SEH监测处理包之前,所述方法进一步包括:
调用Windows操作系统的SetWindowsHookEx接口,设置用于监测和处理进程操作的SEH监测处理包。
5.根据权利要求1所述的方法,其特征在于,在所述注入预先设置的SEH监测处理包之前,所述方法进一步包括:
获取操作系统的根权限。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述在每一待监测的应用程序的进程中注入预先设置的SEH监测处理包包括:
在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块,以在所述待监测的应用程序中增加所述注入的监测及分析防护模块;
监测到所述待监测的应用程序启动,以及,SEH监测处理包监测到操作系统为启动的应用程序配置进程后,在配置的进程中启动注入在所述待监测的应用程序中的所述监测及分析防护模块。
7.根据权利要求6所述的方法,其特征在于,所述在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块包括:
将监测及分析防护模块的内存变量对应的代码写入动态链接库中,利用操作系统中的windows钩子技术,将写入动态链接库中的内存变量代码映射到所述待监测的应用程序中。
8.根据权利要求6所述的方法,其特征在于,所述在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块包括:
将监测及分析防护模块的内存变量对应的代码写入动态链接库中,利用操作系统中的远程注入以及动态加载,将写入动态链接库中的内存变量代码映射到所述待监测的应用程序中。
9.根据权利要求1至5任一项所述的方法,其特征在于,所述进程中的每一线程对应一VEH监测程序。
10.根据权利要求1至5任一项所述的方法,其特征在于,所述标记信息为预先设置的SEHEnd()函数。
11.一种检测结构化异常处理攻击的装置,其特征在于,该装置包括:注入模块、加载模块、标记信息填充模块、异常监测模块以及SEH攻击确定模块,其中,
注入模块,用于分别在每一待监测的应用程序的进程中注入预先设置的SEH监测处理包;
加载模块,用于运行注入的SEH监测处理包,以在所述待监测的应用程序的进程中加载所述SEH监测处理包中的VEH监测程序;
标记信息填充模块,用于获取待监测的应用程序的进程中的每一线程,并在所述每一线程的SEH结构链表的链尾,填充所述SEH监测处理包中预先设置的标记信息;
异常监测模块,用于在所述VEH监测程序获取到所述待监测的应用程序的进程中发生异常的线程后,提取所述发生异常的线程的SEH结构链表的链尾信息;
SEH攻击确定模块,如果提取的链尾信息与所述标记信息不匹配,确定所述发生异常的线程对应的应用程序发生SEH攻击。
12.根据权利要求11所述的装置,其特征在于,所述注入模块包括:注入单元以及启动单元,其中,
注入单元,用于在待监测的应用程序中注入预先设置的SEH监测处理包中的监测及分析防护模块,以在所述待监测的应用程序中增加所述注入的监测及分析防护模块;
启动单元,用于在监测到所述待监测的应用程序启动,以及,SEH监测处理包监测到操作系统为启动的应用程序配置进程后,在配置的进程中启动注入在所述待监测的应用程序中的所述监测及分析防护模块。
13.根据权利要求11或12所述的装置,其特征在于,所述装置进一步包括:
处理包设置模块,用于调用Windows操作系统的SetWindowsHookEx接口,设置用于监测和处理进程操作的SEH监测处理包。
14.根据权利要求11或12所述的装置,其特征在于,所述装置进一步包括:
SEH攻击处理模块,用于按照预先设置的SEH攻击处理策略,对发生SEH攻击的线程对应的应用程序进行处理。
15.根据权利要求14所述的装置,其特征在于,所述SEH攻击处理模块包括:扫描隔离单元、SEH攻击提醒单元、卸载单元以及权限设置单元,其中,
扫描隔离单元,用于对发生SEH攻击的线程对应的应用程序进行安全扫描,对扫描结果为不安全的应用程序进行隔离,并通知SEH攻击提醒单元;
SEH攻击提醒单元,用于接收通知,发送消息提醒,以提醒用户进行处理,如果接收到用户要求卸载的消息,通知卸载单元,如果接收到用户要求权限设置的消息,通知权限设置单元;
卸载单元,用于卸载所述发生SEH攻击的线程对应的应用程序;
权限设置单元,用于为所述发生SEH攻击的线程对应的应用程序设置访问权限,并使所述发生SEH攻击的线程对应的应用程序按照设置的访问权限运行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410459683.7A CN104217163B (zh) | 2014-09-10 | 2014-09-10 | 一种检测结构化异常处理攻击的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410459683.7A CN104217163B (zh) | 2014-09-10 | 2014-09-10 | 一种检测结构化异常处理攻击的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104217163A CN104217163A (zh) | 2014-12-17 |
CN104217163B true CN104217163B (zh) | 2017-04-26 |
Family
ID=52098638
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410459683.7A Active CN104217163B (zh) | 2014-09-10 | 2014-09-10 | 一种检测结构化异常处理攻击的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104217163B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844061B (zh) * | 2015-12-03 | 2020-02-14 | 腾讯科技(深圳)有限公司 | 共享资源处理方法和装置 |
CN106991328B (zh) * | 2017-03-30 | 2019-11-29 | 兴华永恒(北京)科技有限责任公司 | 一种基于动态内存指纹异常分析的漏洞利用检测识别方法 |
CN110287051A (zh) * | 2019-06-21 | 2019-09-27 | 四川盛趣时代网络科技有限公司 | 基于windows异常处理机制的主动防护方法 |
CN111191243A (zh) * | 2019-08-15 | 2020-05-22 | 腾讯科技(深圳)有限公司 | 一种漏洞检测方法、装置和存储介质 |
CN111222103B (zh) * | 2019-12-31 | 2022-03-18 | 杭州安恒信息技术股份有限公司 | 基于向量化异常处理的软件保护方法 |
CN114115884B (zh) * | 2020-08-26 | 2024-06-25 | 腾讯科技(深圳)有限公司 | 一种编程服务的管理方法以及相关装置 |
CN113486335B (zh) * | 2021-05-27 | 2023-02-03 | 贵州电网有限责任公司 | 一种基于rasp零规则的jni恶意攻击检测方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101782954A (zh) * | 2009-01-20 | 2010-07-21 | 联想(北京)有限公司 | 一种计算机及异常进程的检测方法 |
CN101794243A (zh) * | 2010-03-18 | 2010-08-04 | 浪潮电子信息产业股份有限公司 | 一种利用操作系统结构化异常处理加固java应用程序的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8689215B2 (en) * | 2006-12-19 | 2014-04-01 | Intel Corporation | Structured exception handling for application-managed thread units |
CN101923508B (zh) * | 2009-06-12 | 2012-12-19 | 中兴通讯股份有限公司 | 一种嵌入式系统中的异常处理方法及装置 |
-
2014
- 2014-09-10 CN CN201410459683.7A patent/CN104217163B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101782954A (zh) * | 2009-01-20 | 2010-07-21 | 联想(北京)有限公司 | 一种计算机及异常进程的检测方法 |
CN101794243A (zh) * | 2010-03-18 | 2010-08-04 | 浪潮电子信息产业股份有限公司 | 一种利用操作系统结构化异常处理加固java应用程序的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104217163A (zh) | 2014-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104217163B (zh) | 一种检测结构化异常处理攻击的方法及装置 | |
CN104268471B (zh) | 一种检测面向返程的编程攻击的方法及装置 | |
CN110851241A (zh) | Docker容器环境的安全防护方法、装置及系统 | |
CN104462978B (zh) | 一种应用程序权限管理的方法和装置 | |
CN103842971B (zh) | 用于间接接口监视和垂线探测的系统和方法 | |
CN103679032B (zh) | 防御恶意软件的方法和装置 | |
CN104217157B (zh) | 一种漏洞防利用方法及系统 | |
CN106991328B (zh) | 一种基于动态内存指纹异常分析的漏洞利用检测识别方法 | |
WO2016004037A1 (en) | Trusted threat-aware microvisor | |
CN107066311A (zh) | 一种内核数据访问控制方法与系统 | |
CN106991324A (zh) | 一种基于内存保护类型监控的恶意代码跟踪识别方法 | |
CN104134036B (zh) | 一种获取Root权限的方法及装置 | |
CN101408917A (zh) | 应用程序行为合法性检测方法及系统 | |
CN104881610B (zh) | 一种针对虚函数表劫持攻击的防御方法 | |
CN107908958B (zh) | SELinux安全标识符防篡改检测方法及系统 | |
CN107229862A (zh) | 基于模拟栈和线程注入的一种rop攻击栈溢出防护方法 | |
CN104361281B (zh) | 一种安卓平台钓鱼攻击的解决方法 | |
CN105264540A (zh) | 数据处理设备中的软件库的安全保护 | |
CN105512548A (zh) | 基于隐藏可执行镜像并注入dll保护镜像代码的方法 | |
CN103559450A (zh) | 一种基于内核驱动钩子技术的电子标签数据保护方法 | |
CN113886835A (zh) | 容器逃逸的防护方法、装置、计算机设备和存储介质 | |
CN107944292A (zh) | 一种隐私数据保护方法及系统 | |
CN107256358A (zh) | 工业组态监控软件执行过程动态保护方法 | |
CN108334404A (zh) | 应用程序的运行方法和装置 | |
CN103970574B (zh) | office程序的运行方法及装置、计算机系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20190104 Address after: 519031 Room 105-53811, No. 6 Baohua Road, Hengqin New District, Zhuhai City, Guangdong Province Patentee after: Zhuhai Seal Interest Technology Co., Ltd. Address before: 519070, six level 601F, 10 main building, science and technology road, Tangjia Bay Town, Zhuhai, Guangdong. Patentee before: Zhuhai Juntian Electronic Technology Co.,Ltd. |
|
TR01 | Transfer of patent right |