- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2009 年第10 期
前置知识:VC
关键词:编程、进程、句柄
更好的保护进程句柄
文/ coldzenleft
相信对于长期阅读《黑客防线》的读者来说,进程保护这个话题已经不陌生了,实现的
方法也是多种多样。Hook 的方法有挂钩内核底层函数,如SSDT 相关函数,Ob 系列相关函
数,以及插入APC 的KeInsertQueueApc(KiInsertQueueApc)等等;还有就是以DKOM (直接
内核对象操作)为手段的方法,如修改 PID ,修改进程线程或关键的标志位,抹去在
PspCidTable 上的相关数据等。
这些都是以往黑防介绍过的东西了,我也没有必要再复述。从主流使用的角度上看,
Hook 是大势所趋,而DKOM 因为稳定性等问题用得并不多。但就在Hook 方面,我们就做
的很好吗?非也!由于NewbieCoder 曾经介绍的LzOpenProcess 代码在网上的广为流传,而
且很多杀毒软件都没有把它的防御做好,使得程序可以在 Ring3 下通过 ZwDuplicateObject
获得所要结束进程的句柄,然后想尽方法将杀软干掉,所以到头来还是没有抵挡住病毒的入
线
侵。有的杀软监控一旦结束,哪怕只是结束一会儿,在此期间病毒趁机加载RootKit ,到头
来胜负就很难说了。
其实NewbieCoder 当时也说过,挂钩NtDuplicateObject 可以杜绝这个办法,所以我们
防 处
就来学习一下成熟软件在这个问题上的处理办法。我选择 Rku 来进行逆向分析,选择它或
许是因为在挂钩NtDuplicateObject 的代码上,它算相对容易逆向吧。
客 出
在此我先简单的说明下 Rku 的保护方法,我用的版本可能比较老,其挂钩了
NtOpenProcess 、NtOpenThread 、NtDuplicateObject 和一些Shadow SSDT 对自己进行保护。
挂钩NtOpenProcess 是为了防止别人打开进程获得句柄,挂钩NtDuplicateObject 可以防止别
黑 明
人从其他地方(主要是CSRSS )复制其句柄,挂钩NtOpenThread 可以防止被人从线程下手,
然后还有一些Shadow SSDT 以防止窗口方面的非法操作和恶意袭击。在这里特别说明的是,
注
Rku 把自己的线程句柄在CSRSS 中处理掉了(或许是关闭的,或许是抹掉的,反正CSRSS
中是没有它的线程句柄的),但是它却没有处理自己的进程句柄,如果真的处理掉就可以不
用 HOOK NtDuplicateObject 了,不过我估计这应该是出于稳定性方面的考虑。据说抹去
请
CSRSS 中的进程句柄会带来许多副作用,也难怪很少有程序这么做。
由于线程句柄和进程句柄都没有办法得到,窗口攻击也没有办法,所以Rku 从用户模
载
式下很难被杀掉。在看Rku 怎么实现NtDuplicateObject 的钩子前,先来看看NtDuplicateObject
是怎么用的。Native API 中的ZwDuplicateObject 的定义如下:
转
NTKERNELAPI
NTSTATUS
ZwDuplicateObject (
IN HANDLE SourceProcessHandle,
IN HANDLE SourceHandle,
IN HANDLE TargetPro
原创力文档


文档评论(0)