CN110674501A - 恶意驱动检测方法、装置、设备及介质 - Google Patents
恶意驱动检测方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN110674501A CN110674501A CN201910857591.7A CN201910857591A CN110674501A CN 110674501 A CN110674501 A CN 110674501A CN 201910857591 A CN201910857591 A CN 201910857591A CN 110674501 A CN110674501 A CN 110674501A
- Authority
- CN
- China
- Prior art keywords
- driving
- drive
- malicious
- object set
- driving object
- 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.)
- Granted
Links
Images
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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种恶意驱动检测方法,涉及网络安全技术领域,旨在多方面检测和提取恶意驱动,降低恶意驱动的误报率,该方法包含以下步骤:检测被Rootkit技术隐藏的驱动对象,建立驱动对象集合P1;遍历操作系统得到正常驱动对象,合并所述正常驱动对象建立所述驱动对象集合P2;采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3;对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行计算得到目标恶意驱动集合。本发明还公开了一种恶意驱动检测装置、电子设备和计算机存储介质。
Description
技术领域
本发明涉及网络安全技术领域,尤其涉及一种恶意驱动检测方法、装置、设备及介质。
背景技术
随着网络安全趋势对抗愈发激烈,恶意代码技术愈发成熟并难以查杀,对网络安全带来极大的危害。常见挖矿木马、勒索病毒、远控病毒都会附带恶意驱动用于自我保护、C&C窃取隐私数据和通信等,目前的恶意驱动大多采用了Rootkit技术,利用系统漏洞绕过安全机制,并在内核态下对操作系统进行攻击与对抗,实现隐蔽自身存在并驻留在内存对计算机发动持久性攻击,对计算机安全带来极大的威胁。
实现对恶意驱动的定位是清除恶意驱动的前提,当前已有的恶意驱动检测工具有三种。第一种工具为:通过未公开的API ObReferenceObjectByName函数或其他内核全局变量,对驱动对象DRIVER_OBJECT进行获取,然后通过全局双项链表遍历全局内核驱动对象。该恶意驱动检测工具在应用中存在的不足之处在于:当恶意驱动对全局双向链表进行摘链后,就无法通过遍历全局双向链表对驱动对象进行进一步地排查,并且恶意驱动有可能会截获(HOOK)ObReferenceObjectByName函数,并操纵该函数,使得获取的数据无效或不再精准。第二种工具为:通过内核数据结构KPCR获取内核全局变量ObpDirectoryObjectType对象的内核地址,该地址包含驱动对象的哈希表,该哈希表中每一项都是_OBJECT_DIRECTORY_ENTRY结构指针数组,通过_OBJECT_DIRECTORY_ENTRY.Object地址去寻找DRIVER_OBJECT的内核结构体。第二种工具利用枚举标志位Directory的结构进行恶意驱动遍历,仍无法遍历被摘链的哈希表,并且对ObpDirectoryObjectType对象的地址修改无效。第三种工具为:通过采用内存枚举遍历,将未导出的API MmNonPagedPoolStart等全局内存变量,以0x4bit递增去匹配数据,依赖Tag匹配标志去匹配驱动对象。为对抗第三种工具,恶意驱动利用DKOM技术将自身修改为双指针引用,使得解析OBJECT_TYPE结构数据时得到的数据是错误的,从而可能会把部分双指针引用的恶意驱动漏掉。
综上所述,目前还不存在精确有效的检测方法将恶意隐藏的恶意驱动进行标识。
发明内容
为了克服现有技术的不足,本发明的目的之一在于提供一种恶意驱动检测方法,能更深层次地遍历恶意驱动,有效避免相关数据结构被操控后出现恶意驱动无法被获取的情况。
本发明的目的之一采用以下技术方案实现:
一种恶意驱动检测方法,包括以下步骤:
检测SSDT中被截获的函数指针,通过所述函数指针去定位截获所述函数指针的第一驱动对象,然后通过主动截获所述SSDT中未被截获的函数指针去检测被Rootkit技术隐藏的第二驱动对象,合并所述第一驱动对象和第二驱动对象,得到驱动对象集合P1;
遍历操作系统得到正常驱动对象,合并所述正常驱动对象建立所述驱动对象集合P2;
采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3;
对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算得到目标恶意驱动集合;
其中,对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算包括:
将所述驱动对象集合P1与所述驱动对象集合P2取交集提取所述驱动对象集合P1中的正常驱动对象为集合X,将所述驱动对象集合P1减去所述集合X得到恶意驱动集合X1,将所述恶意驱动集合X1与所述驱动对象集合P3取并集得到集合X2,将所述集合X2减去所述驱动对象集合P2得到所述目标恶意驱动集合。
进一步地,检测SSDT中被截获的函数指针,其具体步骤包括:遍历ntoskrnl模块得到原始函数指针与SSDT中的函数指针进行比对,得到所述被截获的函数指针。
进一步地,通过主动截获所述SSDT中未被截获的函数指针去检测被Rootkit技术隐藏的第二驱动对象,其具体步骤包括:
通过栈回溯检测所述主动截获的函数指针,根据回溯地址解析所述主动截获的函数指针的内存数据,得到被Rootkit技术隐藏的第二驱动对象。
进一步地,遍历操作系统得到正常驱动对象,包括:
调用结构体KPCR获取PsLoadedModuleList得到操作系统中驱动对象的枚举;
循环遍历全局系统模块,调用枚举链表获取隐藏的驱动对象;
回调遍历句柄表,获取所述句柄表中的驱动对象。
进一步地,采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3,包括:
动态获取起始内存地址,从所述起始内存地址开始,对内存地址以相同字节递增遍历;
取遍历结果进行一级指针解引用并解析内存结构数据,判断所述内存结构数据是否与通用头内核结构体OBJECT_TYPE匹配,如果匹配成功,标记匹配成功的内存结构数据;
如果匹配失败,判断匹配失败的遍历结果的二级指针是否可用,若可用,进行二级指针解引用并解析二级指针指向的内存结构数据,然后继续判断所述二级指针指向的内存结构数据是否与通用头内核结构体OBJECT_TYPE匹配,如果匹配成功,标记匹配成功的内存结构数据;
根据所述标记匹配成功的内存结构数据建立所述驱动对象集合P3。
进一步地,对内存地址以4bit或8bit递增遍历。
进一步地,动态获取起始内存地址的步骤包括:
获取内核起始地址,开始线性遍历数据;
操作系统开机自检后,加载BIOS读取MBR,所述MBR加载操作系统的启动过程:操作系统启动进程system.exe、smss.exe以及csrss.exe,通过结构体PERROCESS获取smss.exe,定位所述起始内存地址。
本发明的目的之二在于提供一种恶意驱动检测装置,其能多方面检测和判定恶意驱动,具有误报性低和性能稳定的优点。
本发明的目的之二采用以下技术方案实现:
恶意驱动对象检测模块,用于检测SSDT中被截获的函数指针,通过所述函数指针去定位截获所述函数指针的第一驱动对象,然后通过主动截获所述SSDT中未被截获的函数指针去检测被Rootkit技术隐藏的第二驱动对象,合并所述第一驱动对象和第二驱动对象,得到驱动对象集合P1;
正常驱动对象检测模块,用于遍历操作系统得到正常驱动对象,合并所述正常驱动对象建立所述驱动对象集合P2;
内存驱动对象检测模块,用于采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3;
目标恶意驱动集合生成模块,用于对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算得到目标恶意驱动集合。
其中,对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算包括:
将所述驱动对象集合P1与所述驱动对象集合P2取交集提取所述驱动对象集合P1中的正常驱动对象为集合X,将所述驱动对象集合P1减去所述集合X得到恶意驱动集合X1,将所述恶意驱动集合X1与所述驱动对象集合P3取并集得到集合X2,将所述集合X2减去所述驱动对象集合P2得到所述目标恶意驱动集合。
本发明的目的之三在于提供执行发明目的之一的电子设备,其包括处理器、存储介质以及计算机程序,所述计算机程序存储于存储介质中,所述计算机程序被处理器执行时实现上述的恶意驱动检测方法。
本发明的目的之四在于提供存储发明目的之一的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的恶意驱动检测方法。
相比现有技术,本发明的有益效果在于:
本发明通过从多方面检测和定位驱动对象,能更深层次地遍历恶意驱动,有效避免相关数据结构被操控后出现恶意驱动无法被获取的情况,并对检测到的驱动对象进行筛选过滤,从而提取到更准确的恶意驱动对象提取结果,误报性低、性能稳定。
附图说明
图1是本发明恶意驱动检测方法的流程图;
图2是实施例1中建立驱动对象集合P1的流程图;
图3是实施例1中建立驱动对象集合P2的流程图;
图4是实施例1中目标恶意驱动集合的运算流程图;
图5是实施例2的恶意驱动检测装置的结构框图;
图6是实施例3的电子设备的结构框图。
具体实施方式
以下将结合附图,对本发明进行更为详细的描述,需要说明的是,以下参照附图对本发明进行的描述仅是示意性的,而非限制性的。各个不同实施例之间可以进行相互组合,以构成未在以下描述中示出的其他实施例。
实施例1
本实施例提供了一种恶意驱动检测方法,旨在通过从多方面提取驱动对象以进行恶意驱动筛选,能有效避免因相应数据结构被操控,使得传统双向链表无法遍历恶意驱动以及无法对全局变量地址进行精准筛选的缺陷,从SSDT、系统全局变量地址以及内存地址出发全面检测和定位驱动对象,对恶意隐藏的驱动对象也能进行提取,为后续恶意驱动的筛选过滤提供全面的数据基础,使得最终提取到的恶意驱动更加精确,有效避免漏报和误报的情况。
根据上述原理,对恶意驱动检测方法进行介绍,如图1所示,恶意驱动检测方法,具体包括以下步骤:
S1:检测SSDT中被截获的函数指针,通过所述函数指针去定位截获所述函数指针的第一驱动对象,然后通过主动截获所述SSDT中未被截获的函数指针去检测被Rootkit技术隐藏的第二驱动对象,合并所述第一驱动对象和第二驱动对象,得到驱动对象集合P1;
如图2所示,在步骤S1中,系统服务报表SSDT由多个Zw/Nt指针组成的数组,这些Zw/Nt指针指向相应的函数,即SSDT是若干个函数的指针(函数地址)组成的数组,SSDT中指针指向ntoskrnl.exe模块,利用Service table base遍历ntoskrnl.exe模块得到原始的函数指针,利用Service table base遍历内存中的SSDT得到当前系统的函数指针,将得到的原始的函数指针与当前系统的函数指针进行比对,将检测得到被HOOK(修改)的函数指针(被截获的函数指针(函数地址)),通过这些被HOOK的函数指针(函数地址)就能定位修改上述函数地址的不正常驱动对象,即得到上述第一驱动对象。
通过检测SSDT是无法得到被Rootkit技术隐藏的驱动对象,OBJECT hook会修改_DRIVER_OBJECT中的派遣函数表或针对KCB回调HOOK通用的内核对象,达到隐蔽自我保护等功能,因此采用主动截获(HOOK)所述SSDT中未被截获(修改)的函数指针,通过CallStack检测这些未被截获的函数指针,一旦隐藏的驱动对象在执行过程中被触发就会被检测到,然后利用栈回溯的方式,通过回溯地址去解析内存数据,即可被定位隐藏的非正常驱动对象,从而得到第二驱动对象。
利用第一驱动对象和第一驱动对象组成驱动对象集合P1,该驱动对象集合p1为有嫌疑的驱动内核对象,包含恶意驱动和正常驱动集合。通过步骤S1可以对使用Rootkit技术处理后的恶意驱动进行检测并提取。
其中,上述ntoskrnl.exe在其他实施例中也可为ntkrnlmp.exe,ntoskrnl.exe和ntkrnlmp.exe均为内核程序文件,且均用于调度系统,只是在不同计算机硬件下的名称有所不同。
S2:遍历操作系统得到正常驱动对象,合并所述正常驱动对象建立所述驱动对象集合P2;
通过步骤S2得到正常驱动对象作为对标集合,用于对非正常驱动集合中包含的正常驱动进行过滤,使得得到更准确的恶意驱动。
优选地,遍历操作系统得到正常驱动对象的步骤:包括调用结构体KPCR获取PsLoadedModuleList得到操作系统中驱动对象的枚举;
循环遍历全局系统模块,调用枚举链表获取隐藏的驱动对象;
回调遍历句柄表,获取所述句柄表中的驱动对象。
因相应的驱动加载到操作系统中均会有结构体去记录,因此上述提供三种方式,分别从内核结构、全局系统模块和句柄表三个方向分别通过遍历获取正常的驱动对象,组成驱动对象集合P2。
其中,如图3所示,KPCR为记录内存状态的结构体,并且所述KPCR结构体的KdVersionBlock成员结构指向DBGKD_GET_VERSION64结构,而DBGKD_GET_VERSION64结构又包含Windows操作系统加载的所有内核模块构成的链表的表头PsLoadedModuleList,因此本实施例通过KPCR.KdVersionBlock.DBGKD_GET_VERSION64获取PsLoadedModuleLis,从而实现对操作系统中的驱动对象的枚举,这些得到的驱动对象是未被隐藏的。
为了获取隐藏的驱动对象,遍历全局系统模块,DRIVER_OBJECT驱动对象的DriverSection保存着指向KLDR_DATA_TABLE_ENTRY结构体的指针,KLDR_DATA_TABLE_ENTRY结构体用于保存驱动对象的信息,通过循环遍历KLDR_DATA_TABLE_ENTRY结构体实现枚举出所有的驱动对象,然后获取DRIVER_OBJECT._DRIVER_OBJECT.NextDevice枚举链表,实现获取同一个驱动对象中隐藏的设备对象。
通过遍历操作系统中所有句柄对象获取进程引用的驱动对象,具体实现方式为:回调遍历句柄表Pspcidtable._HANDLE_TABLE.TableCode获取对象的地址,其中_HANDLE_TABLE是句柄表的信息的结构体,根据TableCode查找句柄表的层数,从而由HANDLE_TABLE_ENTRY.Object获取句柄表项,以抓取并转换成内核对象结构,从而得到驱动对象。
由上述三种方式得到驱动对象均为正常驱动对象,利用这些正常驱动对象组成驱动对象集合P2。
S3:采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3。
为解析内存结构数据,需要定位起始内存地址,定位起始内存地址步骤为:
获取内核起始地址,开始线性遍历数据;
操作系统开机自检后,加载BIOS读取MBR,所述MBR加载操作系统的启动过程:操作系统启动进程system.exe、smss.exe以及csrss.exe,通过结构体PERROCESS获取smss.exe,从而定位起始内存地址,后续的内存遍历以所述起始内存地址开始线性遍历数据。
从所述起始内存地址开始,以4bit或8bit递增遍历内存,并对遍历得到内存地址采用指针解引用解析内存结构数据,标记解析成功的对象,并以解析成功的对象建立驱动对象集合P3,该驱动对象集合P3包含正常驱动对象和恶意驱动对象。
以4bit或8bit递增遍历内存,即每4个字节或8个字节为一个地址,将遍历得到的地址转换成数据结构,根据操作系统不同选择以4bit或8bit递增遍历,32位操作系统选择4bit,64位操作系统选择8bit。
S4:对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算得到目标恶意驱动集合;
其中,对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算包括:
将所述驱动对象集合P1与所述驱动对象集合P2取交集提取所述驱动对象集合P1中的正常驱动对象为集合X,将所述驱动对象集合P1减去所述集合X得到恶意驱动集合X1,将所述恶意驱动集合X1与所述驱动对象集合P3取并集得到集合X2,将所述集合X2减去所述驱动对象集合P2得到所述目标恶意驱动集合。
在本实施例中,驱动对象集合P1是被Rootkit技术所隐藏的驱动集合,但是P1集合中包含了杀毒软件和内核工具等正常驱动对象,驱动对象集合P2是操作系统中正常的对象集合,如图4所示,将P1∩P2得到交集结果为P1中的正常驱动对象,记为集合X,P1-X=X1,X1为恶意驱动集合,将X1∪P3的并集结果进行去重得到的恶意驱动集合X2,将X2-P2,完成X2中正常驱动对象的过滤,得到目标恶意驱动集合记为Y。
通过上述计算能降低恶意驱动对象的误报率,检测提取恶意驱动的效果好。
优选地,采用双指针解引用解析内存结构数据的具体步骤为:
取遍历结果(地址)进行一级指针解引用并解析内存结构数据,判断所述内存结构数据是否与通用头内核结构体OBJECT_TYPE匹配,如果匹配成功,标记匹配成功的内存结构数据;
如果匹配失败,判断匹配失败的遍历结果的二级指针是否可用,若可用,进行二级指针解引用并解析二级指针指向的内存结构数据,然后继续判断所述二级指针指向的内存结构数据是否与通用头内核结构体OBJECT_TYPE匹配,如果匹配成功,标记匹配成功的内存结构数据;
将所述标记匹配成功的内存结构数据以建立所述驱动对象集合P3。
实施例2
本实施例公开了一种对应实施例1的恶意驱动检测方法对应的装置,请参照图5所示,包括:
恶意驱动对象检测模块510,用于检测SSDT中被截获的函数指针,通过所述函数指针去定位截获所述函数指针的第一驱动对象,然后通过主动截获所述SSDT中未被截获的函数指针去检测被Rootkit技术隐藏的第二驱动对象,合并所述第一驱动对象和第二驱动对象,得到驱动对象集合P1;
正常驱动对象检测模块520,用于遍历操作系统得到正常驱动对象,合并所述正常驱动对象建立所述驱动对象集合P2;
内存驱动对象检测模块530,用于采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3;
目标恶意驱动集合生成模块540,用于对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算得到目标恶意驱动集合。
其中,目标恶意驱动集合生成模块540对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算包括:
将所述驱动对象集合P1与所述驱动对象集合P2取交集提取所述驱动对象集合P1中的正常驱动对象为集合X,将所述驱动对象集合P1减去所述集合X得到恶意驱动集合X1,将所述恶意驱动集合X1与所述驱动对象集合P3取并集得到集合X2,将所述集合X2减去所述驱动对象集合P2得到所述目标恶意驱动集合。
实施例3
图6为本发明实施例3提供的一种电子设备的结构示意图,如图6所示,该电子设备包括处理器610、存储器620、输入装置630和输出装置640;计算机设备中处理器610的数量可以是一个或多个,图6中以一个处理器610为例;电子设备中的处理器610、存储器620、输入装置630和输出装置640可以通过总线或其他方式连接,图6中以通过总线连接为例。
存储器620作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的恶意驱动检测方法对应的程序指令/模块(例如,恶意驱动检测装置中的恶意驱动对象检测模块510、正常驱动对象检测模块520、内存驱动对象检测模块530和目标恶意驱动集合生成模块540)。处理器610通过运行存储在存储器620中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现实施例1的恶意驱动检测方法。
存储器620可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器620可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器620可进一步包括相对于处理器610远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置630可用于接收输入数据等。输出装置640用于输出处理结果,即输出检测到的目标恶意驱动对象。
实施例4
本发明实施例4还提供一种包含计算机可执行指令的存储介质,计算机处理器执行计算机可执行指令,执行时用于实现恶意驱动检测方法,该方法包括:
检测SSDT中被截获的函数指针,通过所述函数指针去定位截获所述函数指针的第一驱动对象,然后通过主动截获所述SSDT中未被截获的函数指针去检测被Rootkit技术隐藏的第二驱动对象,合并所述第一驱动对象和第二驱动对象,得到驱动对象集合P1;
遍历操作系统得到正常驱动对象,合并所述正常驱动对象建立所述驱动对象集合P2;
采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3;
对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算得到目标恶意驱动集合;
其中,对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算包括:
将所述驱动对象集合P1与所述驱动对象集合P2取交集提取所述驱动对象集合P1中的正常驱动对象为集合X,将所述驱动对象集合P1减去所述集合X得到恶意驱动集合X1,将所述恶意驱动集合X1与所述驱动对象集合P3取并集得到集合X2,将所述集合X2减去所述驱动对象集合P2得到所述目标恶意驱动集合。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的恶意驱动检测方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台电子设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述恶意驱动检测方法或装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。
Claims (10)
1.一种恶意驱动检测方法,其特征在于,包括以下步骤:
检测SSDT中被截获的函数指针,通过所述函数指针去定位截获所述函数指针的第一驱动对象,然后通过主动截获所述SSDT中未被截获的函数指针去检测被Rootkit技术隐藏的第二驱动对象,合并所述第一驱动对象和第二驱动对象,得到驱动对象集合P1;
遍历操作系统得到正常驱动对象,合并所述正常驱动对象建立所述驱动对象集合P2;
采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3;
对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算得到目标恶意驱动集合;
其中,对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算包括:
将所述驱动对象集合P1与所述驱动对象集合P2取交集提取所述驱动对象集合P1中的正常驱动对象为集合X,将所述驱动对象集合P1减去所述集合X得到恶意驱动集合X1,将所述恶意驱动集合X1与所述驱动对象集合P3取并集得到集合X2,将所述集合X2减去所述驱动对象集合P2得到所述目标恶意驱动集合。
2.如权利要求1所述的恶意驱动检测方法,其特征在于,检测SSDT中被截获的函数指针,其具体步骤包括:遍历ntoskrnl模块得到原始函数指针与SSDT中的函数指针进行比对,得到所述被截获的函数指针。
3.如权利要求1或2所述的恶意驱动检测方法,其特征在于,通过主动截获所述SSDT中未被截获的函数指针去检测被Rootkit技术隐藏的第二驱动对象,其具体步骤包括:
通过栈回溯检测所述主动截获的函数指针,根据回溯地址解析所述主动截获的函数指针的内存数据,得到被Rootkit技术隐藏的第二驱动对象。
4.如权利要求1所述的恶意驱动检测方法,其特征在于,遍历操作系统得到正常驱动对象,包括:
调用结构体KPCR获取PsLoadedModuleList得到操作系统中驱动对象的枚举;
循环遍历全局系统模块,调用枚举链表获取隐藏的驱动对象;
回调遍历句柄表,获取所述句柄表中的驱动对象。
5.如权利要求1所述的恶意驱动检测方法,其特征在于,采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3,包括:
动态获取起始内存地址,从所述起始内存地址开始,对内存地址以相同字节递增遍历;
取遍历结果进行一级指针解引用并解析内存结构数据,判断所述内存结构数据是否与通用头内核结构体OBJECT_TYPE匹配,如果匹配成功,标记匹配成功的内存结构数据;
如果匹配失败,判断匹配失败的遍历结果的二级指针是否可用,若可用,进行二级指针解引用并解析二级指针指向的内存结构数据,然后继续判断所述二级指针指向的内存结构数据是否与通用头内核结构体OBJECT_TYPE匹配,如果匹配成功,标记匹配成功的内存结构数据;
根据所述标记匹配成功的内存结构数据建立所述驱动对象集合P3。
6.如权利要求5所述的恶意驱动检测方法,其特征在于,对内存地址以4bit或8bit递增遍历。
7.如权利要求5所述的恶意驱动检测方法,其特征在于,动态获取起始内存地址的步骤包括:
获取内核起始地址,开始线性遍历数据;
操作系统开机自检后,加载BIOS读取MBR,所述MBR加载操作系统的启动过程:操作系统启动进程system.exe、smss.exe以及csrss.exe,通过结构体PERROCESS获取smss.exe,定位所述起始内存地址。
8.一种恶意驱动检测装置,其特征在于,包括:
恶意驱动对象检测模块,用于检测SSDT中被截获的函数指针,通过所述函数指针去定位截获所述函数指针的第一驱动对象,然后通过主动截获所述SSDT中未被截获的函数指针去检测被Rootkit技术隐藏的第二驱动对象,合并所述第一驱动对象和第二驱动对象,得到驱动对象集合P1;
正常驱动对象检测模块,用于遍历操作系统得到正常驱动对象,合并所述正常驱动对象建立所述驱动对象集合P2;
内存驱动对象检测模块,用于采用双指针解引用遍历并解析内存结构数据,得到驱动对象集合P3;
目标恶意驱动集合生成模块,用于对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算得到目标恶意驱动集合。
其中,对所述驱动对象集合P1、所述驱动对象集合P2和所述驱动对象集合P3进行逻辑运算包括:
将所述驱动对象集合P1与所述驱动对象集合P2取交集提取所述驱动对象集合P1中的正常驱动对象为集合X,将所述驱动对象集合P1减去所述集合X得到恶意驱动集合X1,将所述恶意驱动集合X1与所述驱动对象集合P3取并集得到集合X2,将所述集合X2减去所述驱动对象集合P2得到所述目标恶意驱动集合。
9.一种电子设备,其包括处理器、存储介质以及计算机程序,所述计算机程序存储于存储介质中,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述的恶意驱动检测方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述的恶意驱动检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910857591.7A CN110674501B (zh) | 2019-09-09 | 2019-09-09 | 恶意驱动检测方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910857591.7A CN110674501B (zh) | 2019-09-09 | 2019-09-09 | 恶意驱动检测方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110674501A true CN110674501A (zh) | 2020-01-10 |
CN110674501B CN110674501B (zh) | 2021-11-09 |
Family
ID=69077880
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910857591.7A Expired - Fee Related CN110674501B (zh) | 2019-09-09 | 2019-09-09 | 恶意驱动检测方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110674501B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115599645A (zh) * | 2022-10-13 | 2023-01-13 | 安芯网盾(北京)科技有限公司(Cn) | 一种linux驱动模块稳定性测试方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101183418A (zh) * | 2007-12-25 | 2008-05-21 | 北京大学 | 一种Windows隐蔽性恶意软件检测方法 |
CN103065094A (zh) * | 2011-12-28 | 2013-04-24 | 卡巴斯基实验室封闭式股份公司 | 用于检测目标为计算机引导过程的恶意软件的系统和方法 |
US20150020202A1 (en) * | 2013-07-15 | 2015-01-15 | Webroot Inc. | System and method for bypassing a malware infected driver |
CN105956461A (zh) * | 2016-05-03 | 2016-09-21 | 北京金山安全软件有限公司 | 一种拦截驱动加载的方法及终端 |
-
2019
- 2019-09-09 CN CN201910857591.7A patent/CN110674501B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101183418A (zh) * | 2007-12-25 | 2008-05-21 | 北京大学 | 一种Windows隐蔽性恶意软件检测方法 |
CN103065094A (zh) * | 2011-12-28 | 2013-04-24 | 卡巴斯基实验室封闭式股份公司 | 用于检测目标为计算机引导过程的恶意软件的系统和方法 |
US20150020202A1 (en) * | 2013-07-15 | 2015-01-15 | Webroot Inc. | System and method for bypassing a malware infected driver |
CN105956461A (zh) * | 2016-05-03 | 2016-09-21 | 北京金山安全软件有限公司 | 一种拦截驱动加载的方法及终端 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115599645A (zh) * | 2022-10-13 | 2023-01-13 | 安芯网盾(北京)科技有限公司(Cn) | 一种linux驱动模块稳定性测试方法及装置 |
CN115599645B (zh) * | 2022-10-13 | 2023-05-02 | 安芯网盾(北京)科技有限公司 | 一种linux驱动模块稳定性测试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110674501B (zh) | 2021-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9876812B1 (en) | Automatic malware signature extraction from runtime information | |
US9679136B2 (en) | Method and system for discrete stateful behavioral analysis | |
WO2018141279A1 (en) | Processor trace-based enforcement of control flow integrity of computer system | |
US10055585B2 (en) | Hardware and software execution profiling | |
US8627478B2 (en) | Method and apparatus for inspecting non-portable executable files | |
CN102622543B (zh) | 一种动态检测恶意网页脚本的方法和装置 | |
US8955124B2 (en) | Apparatus, system and method for detecting malicious code | |
US9135443B2 (en) | Identifying malicious threads | |
US9977897B2 (en) | System and method for detecting stack pivot programming exploit | |
CN109918907B (zh) | Linux平台进程内存恶意代码取证方法、控制器及介质 | |
US20150278522A1 (en) | Methods of detection of software exploitation | |
JP2009129451A (ja) | 悪性コードによって挿入されたダイナミックリンクライブラリ検出装置及び方法 | |
US8256000B1 (en) | Method and system for identifying icons | |
US20160196427A1 (en) | System and Method for Detecting Branch Oriented Programming Anomalies | |
CN108959936B (zh) | 一种基于路径分析的缓冲区溢出漏洞自动利用方法 | |
CN113158197A (zh) | 一种基于主动iast的sql注入漏洞检测方法、系统 | |
CN111428239B (zh) | 一种恶意挖矿软件的检测方法 | |
US20220201016A1 (en) | Detecting malicious threats via autostart execution point analysis | |
CN113569240B (zh) | 恶意软件的检测方法、装置及设备 | |
CN110674501B (zh) | 恶意驱动检测方法、装置、设备及介质 | |
CN105791250A (zh) | 应用程序检测方法及装置 | |
CN112287340B (zh) | 用于终端攻击的取证溯源方法、装置、计算机设备 | |
CN115481397B (zh) | 基于内存结构逆向分析的代码注入攻击取证检测方法与系统 | |
CN110543759A (zh) | 恶意文件检测方法、装置、计算机设备和存储介质 | |
CN111753298A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20211109 |
|
CF01 | Termination of patent right due to non-payment of annual fee |