[发明专利]一种Windows隐蔽性恶意软件检测方法有效
申请号: | 200710304083.3 | 申请日: | 2007-12-25 |
公开(公告)号: | CN101183418A | 公开(公告)日: | 2008-05-21 |
发明(设计)人: | 周扬荣;韩心慧;张行功;陆腾飞;邹维 | 申请(专利权)人: | 北京大学 |
主分类号: | G06F21/22 | 分类号: | G06F21/22 |
代理公司: | 北京君尚知识产权代理事务所 | 代理人: | 余长江 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 windows 隐蔽 恶意 软件 检测 方法 | ||
技术领域
本发明属于计算机系统安全领域,涉及一种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)通过在系统内存不变的内存地址0ffdff034h位置查询数据结构PKDDEBUGGER_DATA64,从其数据结构中得到系统未导出变量MmNonPagedPoolStart,即为内核对象存储区域的起始地址。
所述步骤(3)每一类内核对象头都位于系统内核对象类型管理目录下。
所述步骤(3)利用内核对象打开操作函数ObOpenObjectByName()和内核对象引用操作函数ObReferenceObjectByHandle()方法建立某一类内核对象头标志。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710304083.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:红外线温度计及其探测头结构
- 下一篇:陶瓷纤维板的烘干工艺