mj0011内核地地研究所——基于某callstack地anti-rootkithook检测思路

mj0011内核地地研究所——基于某callstack地anti-rootkithook检测思路

ID:28698762

大小:32.00 KB

页数:4页

时间:2018-12-13

mj0011内核地地研究所——基于某callstack地anti-rootkithook检测思路_第1页
mj0011内核地地研究所——基于某callstack地anti-rootkithook检测思路_第2页
mj0011内核地地研究所——基于某callstack地anti-rootkithook检测思路_第3页
mj0011内核地地研究所——基于某callstack地anti-rootkithook检测思路_第4页
资源描述:

《mj0011内核地地研究所——基于某callstack地anti-rootkithook检测思路》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案基于CallStack的Anti-RootkitHOOK检测思路:MJ00112007-11-2th_decoder@126.comAnti-Rootkit目前扫描Hook的方法主要有以下几种:1.对抗inline-hook,IAT/EATHookAnti-Rootkit使用读取磁盘上系统文件并将之进行map重定位后,同内存中的代码进行对比的方法来检测inlinehook(或EAT/IATHOOK,后同),类似的工具例如RootkitUnhooker,gmer,Icesword等等为了对抗Anti-Rootkit的inlineHook扫描,Roo

2、tkit们使用一些方法来进行自己HOOK的隐藏例如ShadowWalker的方法,HOOKInt0Eh缺页中断来隐藏内存中被HOOK的代码或者是例如流氓软件CNNIC中文上网,HOOKFSD的IRP_MJ_READ,当读取到ntfs.sys等文件时,修改数据,将错误的结果返回回去,导致Anti-rootkit工具误认为内存中的代码是正确的多种方式都可以让这种传统的INLINEHOOK检测方法失效2.ObjectHookObjectHook一般更隐藏,更难检测为大家所熟知的Objecthook例如有修改driverobject中的MajorFunctiondis

3、patch表或者是hookKeyObject(KCB)中的一些callbackroutine/GetCellRoutine(zzzzevazzzz放出过相关代码)又或者是hookObject中一些其他的通用链中的代码指针来进行自我隐藏/保护功能(例如tombkeeper的一些文章提到的细节)目前的办法一般是扫描这些OBJECT的结构,找到对应指针,利用特征搜索、模块范围对比等方法,检测他们是否被HOOK类似的工具例如rootkitunhooker,gmer(rootkitunhooker中检测的objecthook较多)但这些工具都只能检测他们已知的objec

4、thook精彩文档实用标准文案一旦Rootkiter利用未知的objecthook进行隐藏,或者是转换平台,数据结构发生变化,就很难检测到objecthook,传统的Objecthook检测方式也很容易被rootkiter饶过,详见我的<<绕过现代Anti-Rookit工具的内核模块扫描>>一文这里提出一种新的hook检测方式:即利用CallStack进行HOOK检测让我们来看一种典型的rootkit的HOOK方式:例如hook \FileSystem\Ntfs的IRP_MJ_DIRECTORY_CONTROL来进行文件隐藏,rootkit.com有上相关

5、的代码它们的代码通常是这样的NTSTATUSHookFsd(LPCWSTRDrvName){//....获得ntfs的driverobject//保存原始的dispatch地址g_OldNtfsDriCtl=drvobj->MajorFunction[IRP_MJ_DIRECTORY_CONTROL];//用自己的dispatch地址替换原始地址drvobj->MajorFunction[IRP_MJ_DIRECTORY_CONTROL]=MyNtfsDriCtl;//,,,,,}NTSTATUS  MyNtfsDriCtl(PDEVICE_OBJECTdev

6、obj,PIRPpIrp){NTSTATUSstat;//一些初始化处理.....__asm{精彩文档实用标准文案pushpIrppushdevobjcallg_OldNtfsDriCtlmovstat,eax}//首先调用原始函数,以便得到结果//下面进行处理,hackCompletionRoutine,或者是直接修改UserBuffer的数据//...}上面就是一个hookfsd来隐藏文件的ROOTKIT的大概结构让我们来看看,在MyNtfsDriCtl中callg_OldNtfsDriCtl时,发生了什么?它会跳转到原始的g_OldNtfsDriCtl中

7、,并且保存返回地址,这个返回地址在哪儿?rootkit的代码体内!那么就简单了,我们简单地Hook原始dispatch中的更深层的地方,例如,Ntfs的DriectoryControl快结束时会callKeLeaveCriticalRegion或者IofCompleteRequest我们HOOK这个地方,然后,当这个调用触发时,我们检查esp,并向上回溯堆栈,找到callstack,我们发现了什么?哈哈!rootkit的返回地址!再简单的使用ZwQuerySystemInformation,就可以知道这个地址位于哪个模块中,ROOTKIT定位成功!(如果抹去了

8、模块,可以定位这块内存为unknowi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。