CN100504904C - 一种Windows隐蔽性恶意软件检测方法 - Google Patents
一种Windows隐蔽性恶意软件检测方法 Download PDFInfo
- Publication number
- CN100504904C CN100504904C CNB2007103040833A CN200710304083A CN100504904C CN 100504904 C CN100504904 C CN 100504904C CN B2007103040833 A CNB2007103040833 A CN B2007103040833A CN 200710304083 A CN200710304083 A CN 200710304083A CN 100504904 C CN100504904 C CN 100504904C
- Authority
- CN
- China
- Prior art keywords
- windows
- kernel objects
- kernel
- malevolence
- concealed
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种Windows隐蔽性恶意软件检测方法,其步骤包括:(1)调试Windows内核系统,获得所有内核对象的数据结构;(2)确定内核对象在系统的内存区域;(3)创建每一类内核对象头标志;(4)搜索步骤(2)中的内存区域,得到与对象头标志匹配内核对象的起始地址;(5)记录起始地址,根据步骤(1)获得的内核对象结构,读出内核对象体数据信息;(6)调用Windows API,获取系统的内核对象数据信息;(7)比较步骤(5)和(6)得到的信息,如果存在步骤(6)中没有的数据,判定该WINDOWS系统包含隐蔽性恶意软件。本发明适用于Windows各个版本,准确度高,方法稳定可靠。
Description
技术领域
本发明属于计算机系统安全领域,涉及一种Windows隐蔽性恶意软件检测方法,用于检测系统中存在的隐蔽性恶意软件(即Rootkit)。
背景技术
所谓Rootkit就是指特洛依木马后门工具,它通过修改现有的操作系统软件使攻击者获得访问权限,并隐藏在计算机中。Rootkit起源于Unix的Root帐号攻击,它与普通的特洛依木马的区别是前者执行在操作系统执行层而普通的特洛依木马执行在应用层。Rootkit目前按照运行等级分为用户态和内核态两大类,其宗旨是隐藏在系统中,获得特定权限,窃取各种秘密数据,而且通过各种隐藏手段不被发现,对系统安全和数据安全具有很大的危害性。
Rootkit目前为了不让系统用户发现自己,一般会隐藏自己的进程、驱动等。目前Rootkit的隐藏手段分为:
1.Hook系统查询函数:目前Hook技术主要分为应用态IAT表Hook、API Inline Hook、DLL注入,内核态SSDT Hook、IDT Hook等,这些Hook技术的共同特征就是拦截正常的API,过滤其中与自己有关的数据信息,达到隐藏自己而不被发现的目的。
2.DKOM(Direct Kernel Object Manipulate):直接内核对象操纵。所谓DKOM就是将内核对象从一个管理它的双向链表中删除掉(但是,内核对象本身无法删除,依然存在于内存之中),以此逃避枚举检测的目的。
要避开Rootkit的隐藏技术,检测其隐藏行为,必须满足两个条件:
1.不能再使用Windows API,因为它已经不再可靠
2.不能再遍历内核对象双向链表,因为此时的双向链表可能已经被采用DKOM技术的Rootkit修改。
目前,用户都只能通过微软自身提供的进程查看器(taskmgr.exe)或者第三方的进程查看软件(如procview)进行系统的安全检查,而第三方软件也只是调用微软的API进行系统信息的查看,通用的杀毒软件没有查看进程的选项。因此,目前通用的对进程等系统信息的查看方法,无法满足前面提到的两个必要条件,因此都无法捕捉到Rootkit的隐藏。
尽管API可能被Hook了,双向链表被断开了,但是,其内核对象本身依然存在于系统之中,并没有消失。因此,如果通过一种特殊的办法找到这些内核对象,弄清该内核对象的结构,并根据此结构读出其中的数据信息,那么Rootkit的隐藏办法也就失去了作用,从而达到成功检测的目的。
发明内容
本发明克服了上述现有技术的不足,提供了一种绕开Windows自身API查询函数库,而利用Windows内核对象搜索检测出系统中的恶意隐藏软件的方法。
本发明的方法包括以下步骤:
(1)调试Windows内核系统,获得所有内核对象的数据结构;
(2)确定内核对象在系统内存区的存储区域;
(3)创建每一类内核对象头的标志;
(4)用内核对象头标志搜索步骤(2)中的内存区域,得到与内核对象头标志匹配内核对象的起始地址;
(5)记录内核对象的起始地址,并根据所述步骤(1)获得的内核对象结构,读出其中内核对象体数据信息;
(6)调用Windows API,获取系统的内核对象数据信息;
(7)比较所述步骤(5)和所述步骤(6)得到的信息,如果存在步骤(6)中没有的数据,判定该WINDOWS系统包含隐蔽性恶意软件。
所述步骤(1)调试Windows不同版本下的内核系统,获得所述所有内核对象的数据结构。
所述步骤(1)中Windows系统通过Windbg软件结合Windows的内核符号表,利用结构查看命令获得内核对象的数据结构。
所述步骤(1)中得到的内核对象数据结构包括对象头、对象体及对象体内数据成员的偏移信息。
所述步骤(2)通过在系统内存不变的内存地址OffdffO34h位置查询数据结构PKDDEBUGGER_DATA64,从其数据结构中得到系统未导出变量MmNonPagedPoolStart,为内核对象存储区域的起始地址。
所述步骤(3)每一类内核对象头都位于系统内核对象类型管理目录下。
所述步骤(3)利用内核对象打开操作函数ObOpenObjectByName()和内核对象引用操作函数ObReferenceObjectByHandle()方法建立某一类内核对象头标志。
所述步骤(4)搜索时按照4字节对齐方式进行处理,从内核对象的存储起始地址起每次搜索递增4个字节。
所述步骤(5)通过定义内核对象的起始位置i、内核对象的数据成员的类型type、内核对象内数据的偏移offset,将i类型转换为(type)(i+offset)读出对象体中的数据信息。
所述步骤(6)调用Windows进程枚举库函数EnumProcesses()查看进程列表信息,调用Windows驱动枚举库函数EnumDeviceDrivers()查看驱动列表信息。
与现有技术相比,本发明的有益效果在于通过对内核对象的搜索实现了对系统中非常隐蔽的Rootkit的检测,提高了系统的安全性。
附图说明
图1:Windows内核对象结构
图2:内核对象的组织形式
图3:内核对象搜索示意图
图4:基于内核对象的Rootkit检测方法框图
图5:一类内核对象搜索检测Rootkit方法流程图
具体实施方式
下面参照本发明的附图,详细描述本发明。如图4为基于内核对象的Rootkit检测方法框图,图5为一类内核对象搜索检测Rootkit方法流程图,以一类内核对象搜索为例,说明基于内核对象搜索的Rootkit检测方法。为了实现通过内核对象检测Rootkit等恶意隐藏软件,可采取如下步骤:
1、调试Windows内核系统,获得进程、驱动等不同内核对象在不同版本下的结构。图1为Windows内核对象结构。如图1所示,在Windows系统中,无论是进程和线程,还是驱动等都是以内核对象形式存在的。内核对象实际上是一个结构体数据结构,共分为对象头和对象体两部分。对象头包含了内核对象的分类信息,以此区分进程、线程或驱动等内核对象。对象体中的数据成员与该对象的具体分类有关,比如是进程的内核对象就包含了进程的ID,父进程ID,映像名称等等。
本发明中Windows系统是通过Windbg(一种可用于内核调试的工具)软件结合Windows的内核符号表(可在微软官方网站下载),利用结构查看命令获得各种内核对象的结构定义。
下面是调试得出的进程内核对象在Windows2000下的部分结构定义:
typedef struct_EPROCESS
{
……
/*088*/LARGE_INTEGER CreateTime;
/*090*/LARGE_INTEGER ExitTime;
/*09C*/DWORD UniqueProcessId;
/*14C*/DWORD ParentId;
/*1FC*/BYTE ImageFileName[16];
……
}
EPROCESS,
*PEPROCESS,
**PPEPROCESS;
得到对象体中的信息包括进程ID、父进程ID、映像名称,其中进程ID的偏移为0X9C,父进程ID的偏移为0x14c,映像名称偏移:0x1fc。内核结构对象在各个版本中,可能会有细小差别,所以,必须每个版本都要调试。
2、确定内核对象在系统内存区的存储位置。
该存储位置一般处于[MmNonPagedPoolStart,0x90000000]范围内。其中全局变量MmNonPagedPoolStart是Windows未导出系统变量,它定义了系统内核对象的存储起始位置,需要通过Windows调试数据结构PKDDEBUGGER_DATA64获得。而Windows调试数据结构PKDDEBUGGER_DATA64一般位于OffdffO34h位置,且在系统中的位置是固定不变的。
_asm
{
mov eax,OffdffO34h;
mov eax,[eax];
mov pKdVersionBlock,eax;
}
pListBlock = (LIST_ENTRY64
*)pKdVersionBlock->DebuggerDataList;
上面代码即可获得PKDDEBUGGER_DATA64结构。
3、生成要搜索的每一类内核对象头的对象头标志。
在Windows系统中每一类内核对象头都位于系统内核对象类型管理目录“\\ObjectTypes\\”下,对于某类内核对象A,其内核对象的对象头为:“\\ObjectTypes\\A”。可以打开该目录,利用内核对象打开操作函数ObOpenObjectByName()和内核对象引用操作函数ObReferenceObjectByHandle()方法建立该类内核对象头标志。
4、如图3所示,利用进程、驱动等内核对象的对象头标志,遍历第2步所获得的内存区域,将该区域内逐一与内核对象头标志进行匹配,发现匹配上了的,就是要找的目标内核对象。
for(i=MmNonpagedPoolStart;i<=0x90000000;i+=4)
{
If((POBJECT_TYPE)i==结构对象头标志)
内核对象找到(i为起始地址);
}
其中,内核对象的存储起始地址我们按照4字节对齐方式进行处理,所以,在这个位置,我们每次搜索递增4个字节。
5、找到了目标内核对象后,记录该目标内核对象的起始地址,并根据第1步获得的内核对象结构定义,解析读出其中内核对象体数据信息。将此数据信息放入一个链表之中。获取方式如下:
定义i为内核对象的起始位置,type为内核对象的数据成员的类型,offset为内核对象内数据成员的偏移,则将i类型转换为(type)(i+offset)即为我们要获取的数据信息。
6、调用Windows API获得系统关于进程,驱动等的查询数据。图2为内核对象的组织形式。如图2所示,各类内核对象以双向链表的形式存在于系统内存之中。WindowsAPI函数在查询时通过遍历此表,逐一枚举各类系统信息,如进程、驱动等。用于系统数据信息查看的API,进程是由Windows进程枚举库函数EnumProcesses(),驱动是由Windows驱动枚举库函数EnumDeviceDrivers()。
7、将通过内核对象搜索的方法获得的数据即第5步中查询获得的数据与第6步中获得的数据进行比较,如果发现存在第6步中没有的数据,该数据即为隐藏的Rootkit中的数据,判定该WINDOWS系统包含隐蔽性恶意软件
设数组l[n]为第5步中的数据集合,数组h[m]为第6步数据的集合,其中n和m分别为两个数组的元素个数。Find()为查找函数,如果未找到返回FALSE,否则为TRUE。
for(i=0;i<n;i++)
{
If(!Find(l[i],h[m]))
L[i]为Rootkit隐藏数据;
}
如上所述,本发明通过基于内核对象搜索的Windows Rootkit检测方法,检测系统中存在的隐蔽性恶意软件,准确快速高效。本发明适用于检测目前已知的著名Rootkit以及一些采用了各种复杂隐藏技术的未知Rootkit,具适用于Windows各个版本,具有很好的实用性,准确度高,方法稳定可靠。
本发明要求保护的范围以权利要求书界定的范围为准。
Claims (10)
1、一种Windows隐蔽性恶意软件检测方法,其步骤包括:
1)调试Windows内核系统,获得所有内核对象的数据结构;
2)确定内核对象在系统内存区的存储区域;
3)创建每一类内核对象头标志;
4)搜索步骤2)中的存储区域,得到与内核对象头标志相匹配的内核对象的起始地址;
5)记录内核对象的起始地址,并根据所述步骤1)获得的内核对象的数据结构,读出其中内核对象体数据信息;
6)调用Windows API,获取系统的内核对象体数据信息;
7)比较所述步骤5)和所述步骤6)得到的信息,如果存在步骤6)中没有的数据,判定该Windows系统包含隐蔽性恶意软件。
2、如权利要求1所述的Windows隐蔽性恶意软件检测方法,其特征在于所述步骤1)调试Windows不同版本下的内核系统,获得所述所有内核对象的数据结构。
3、如权利要求1所述的Windows隐蔽性恶意软件检测方法,其特征在于所述步骤1)中Windows系统通过内核调试工具Windbg软件结合Windows的内核符号表,利用结构查看命令获得内核对象的数据结构。
4、如权利要求2或3所述的Windows隐蔽性恶意软件检测方法,其特征在于所述内核对象的数据结构包括对象头、对象体及对象体内数据成员的偏移信息。
5、如权利要求1所述的Windows隐蔽性恶意软件检测方法,其特征在于所述步骤2)在系统内存不变的内存地址Offdff034h位置查询Windows调试数据结构PKDDEBUGGER_DATA64,从该数据结构中得到系统未导出变量,即为内核对象存储区域的起始地址。
6、如权利要求1所述的Windows隐蔽性恶意软件检测方法,其特征在于所述步骤3)每一类内核对象头都位于系统内核对象类型管理目录下。
7、如权利要求1所述的Windows隐蔽性恶意软件检测方法,其特征在于所述步骤3)用内核对象打开操作函数和内核对象引用操作函数方法建立每一类内核对象头标志。
8、如权利要求1所述的Windows隐蔽性恶意软件检测方法,其特征在于所述步骤4)搜索时按照4字节对齐方式进行处理,从内核对象的存储起始地址起每次搜索递增4个字节。
9、如权利要求1所述的Windows隐蔽性恶意软件检测方法,其特征在于所述步骤5)通过定义内核对象的起始位置i、内核对象的数据成员的类型type、内核对象内该数据成员的偏移offset,从内存地址i+offset处,按照type类型结构读出内核对象体中的该数据成员的数据信息。
10、如权利要求1所述的Windows隐蔽性恶意软件检测方法,其特征在于所述步骤6)调用Windows进程枚举库函数查看进程列表信息,调用Windows驱动枚举库函数查看驱动列表信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007103040833A CN100504904C (zh) | 2007-12-25 | 2007-12-25 | 一种Windows隐蔽性恶意软件检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007103040833A CN100504904C (zh) | 2007-12-25 | 2007-12-25 | 一种Windows隐蔽性恶意软件检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101183418A CN101183418A (zh) | 2008-05-21 |
CN100504904C true CN100504904C (zh) | 2009-06-24 |
Family
ID=39448688
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007103040833A Expired - Fee Related CN100504904C (zh) | 2007-12-25 | 2007-12-25 | 一种Windows隐蔽性恶意软件检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100504904C (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0513375D0 (en) | 2005-06-30 | 2005-08-03 | Retento Ltd | Computer security |
CN101304409B (zh) * | 2008-06-28 | 2011-04-13 | 成都市华为赛门铁克科技有限公司 | 恶意代码检测方法及系统 |
CN101571901B (zh) * | 2009-06-04 | 2011-03-16 | 北京东方微点信息技术有限责任公司 | 定位服务操作者的方法和装置 |
CN102034050A (zh) * | 2011-01-25 | 2011-04-27 | 四川大学 | 基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法 |
US10574630B2 (en) * | 2011-02-15 | 2020-02-25 | Webroot Inc. | Methods and apparatus for malware threat research |
CN102156834B (zh) * | 2011-04-18 | 2013-04-24 | 北京思创银联科技股份有限公司 | 实现进程防杀的方法 |
CN102737193A (zh) * | 2011-09-23 | 2012-10-17 | 新奥特(北京)视频技术有限公司 | 一种数据安全防控中的设备屏蔽方法及装置 |
CN102737175A (zh) * | 2011-09-23 | 2012-10-17 | 新奥特(北京)视频技术有限公司 | 一种数据安全防控中的设备接入方法、用户设备及装置 |
CN102737197A (zh) * | 2011-09-23 | 2012-10-17 | 新奥特(北京)视频技术有限公司 | 一种用于数据设备的屏蔽方法和装置 |
CN102945343B (zh) * | 2012-09-25 | 2017-05-17 | 北京奇虎科技有限公司 | 一种用于枚举系统进程的方法及装置 |
CN104077304B (zh) * | 2013-03-28 | 2017-12-19 | 百度国际科技(深圳)有限公司 | 文件识别系统和方法 |
CN103679027A (zh) * | 2013-12-05 | 2014-03-26 | 北京奇虎科技有限公司 | 内核级恶意软件查杀的方法和装置 |
RU2586576C1 (ru) * | 2014-12-05 | 2016-06-10 | Закрытое акционерное общество "Лаборатория Касперского" | Способ выполнения обращения к процедурам загрузочного драйвера |
CN104361141A (zh) * | 2014-12-11 | 2015-02-18 | 北京邮电大学 | 软件标识库的建立方法 |
CN110674501B (zh) * | 2019-09-09 | 2021-11-09 | 光通天下网络科技股份有限公司 | 恶意驱动检测方法、装置、设备及介质 |
CN110765159B (zh) * | 2019-11-01 | 2022-08-12 | 上海达梦数据库有限公司 | 对象解析方法、装置、存储介质及设备 |
CN111639340B (zh) * | 2020-05-28 | 2023-11-03 | 北京金山云网络技术有限公司 | 恶意应用程序检测方法、装置、电子设备及可读存储介质 |
CN114707149B (zh) * | 2022-03-18 | 2023-04-25 | 安芯网盾(北京)科技有限公司 | 一种傀儡进程检测方法、装置、电子设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101042719A (zh) * | 2006-03-21 | 2007-09-26 | 联想(北京)有限公司 | 一种查杀rootkit的系统及方法 |
CN101046836A (zh) * | 2006-03-29 | 2007-10-03 | 联想(北京)有限公司 | 一种清除rootkit的系统及方法 |
-
2007
- 2007-12-25 CN CNB2007103040833A patent/CN100504904C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101042719A (zh) * | 2006-03-21 | 2007-09-26 | 联想(北京)有限公司 | 一种查杀rootkit的系统及方法 |
CN101046836A (zh) * | 2006-03-29 | 2007-10-03 | 联想(北京)有限公司 | 一种清除rootkit的系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101183418A (zh) | 2008-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100504904C (zh) | 一种Windows隐蔽性恶意软件检测方法 | |
Huang et al. | Performance evaluation on permission-based detection for android malware | |
CN100481101C (zh) | 计算机安全启动的方法 | |
US10387627B2 (en) | Systems and methods for analyzing software | |
CN105956468B (zh) | 一种基于文件访问动态监控的Android恶意应用检测方法及系统 | |
CN101782954B (zh) | 一种异常进程的检测装置及方法 | |
CN107688743B (zh) | 一种恶意程序的检测分析方法及系统 | |
CN101799855B (zh) | 一种基于ActiveX组件模拟的网页木马检测方法 | |
CN102768717A (zh) | 恶意文件检测的方法及装置 | |
US20140189866A1 (en) | Identification of obfuscated computer items using visual algorithms | |
WO2008071620A1 (en) | Heuristic malware detection | |
CN101382984A (zh) | 一种扫描检测广义未知病毒的方法 | |
CN103679013A (zh) | 系统恶意程序检测方法及装置 | |
KR100968126B1 (ko) | 웹쉘 탐지 시스템 및 웹쉘 탐지 방법 | |
CN103777971A (zh) | 电子装置、更新固件的方法与电脑可读取记录媒体 | |
CN1971555A (zh) | 检测和过滤网络搜索引擎返回结果中包含的指向恶意网页的链接的方法 | |
CN103632088A (zh) | 一种木马检测方法及装置 | |
CN107450964A (zh) | 一种用于发现虚拟机自省系统中是否存在漏洞的方法 | |
CN108898012B (zh) | 检测非法程序的方法和装置 | |
CN103810428A (zh) | 一种宏病毒检测方法及装置 | |
CN101620658A (zh) | 一种Windows操作系统下钩子的检测方法 | |
CN115688106A (zh) | 一种Java agent无文件注入内存马的检测方法及装置 | |
WO2022237120A1 (zh) | 游戏应用的抓帧防御方法及装置、存储介质、计算机设备 | |
CN101620659A (zh) | 一种Windows操作系统下钩子的检测方法 | |
CN110321674A (zh) | 一种基于脚本程序的反调试方法、智能终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090624 Termination date: 20181225 |
|
CF01 | Termination of patent right due to non-payment of annual fee |