频道栏目
读书频道 > 安全 > Rootkit:系统灰色地带的潜伏者(原书第2版)
3.3.8 案例研究:隐藏TSR
2013-10-15 09:33:27     我来说两句
收藏   我要投稿
全书共分四部分。第一部分(第1~6章),全新阐释rootkit 本质、rootkit与反取证关系、安全领域态势,以及反取证技术的策略、应对建议和攻击优势。之后,从硬件、软件(系统)、行业工具和内核空间方面介绍root  立即去当当网订购

前面的TSR程序存在的问题是,任何人运行mem.exe命令后都可以看到TSR程序已经加载到内存中。

 

我们需要寻找一种方法来隐藏TSR程序以便使mem.exe无法查看它,这比你想象的要容易很多。DOS把内存分成块,每块的第一节都是一个被称为内存控制块的数据结构(Memory Control Block,MCB;也称作内存控制记录)。一旦我们得到第一个MCB,我们就可以利用其大小(size)域来计算下一个MCB的位置,并遍历MCB链直到我们到达链的末尾(即类型域(type)为“Z”的MCB)。

唯一棘手的问题是如何找到第一个MCB。为此,我们需要利用一个“未公开”的DOS系统调用(即INT 0x21,功能号为0x52),然而,坦诚地讲,仅有的没记录这个特征的人只有微软的员工。如果你仔细研究如FreeDOS或RxDOS之类的DOS克隆项目,你会发现有关这个功能的大量信息。

0x52 ISR返回一个指向指针的指针。具体来讲,它返回一个在ES:BX寄存器对中被称为“文件表列表”(List of File Tables)的数据结构的逻辑地址。第一个MCB的地址是位于ES: [BX-4]的双字(就在文件表列表起始位置的前面),该地址是以有效地址在前、MCB的段选择器在后的方式存储(即IP:CS格式,而不是CS:IP格式)。


 

这条规则的实现是相当直接的,作为实验,你可以(给定第一个MCB的地址)使用调试命令来转储内存并且手工跟踪MCB链。MCB的地址总是驻留在段的起始位置(节边界对齐),因此偏移地址总是为0,我们可以直接向段地址增加值来找到下一个MCB。

 

如果我们发现想要隐藏的那个MCB,就简单更新其前驱的大小,以便在下一次遍历MCB链时跳过要隐藏的MCB。


 

我们编写的程序遍历MCB链,并且隐藏名字由两个$标志开头的所有程序(例如$$myTSR.com)。

 

为了测试我们的程序,我加载了两个名字分别为$$myTSR1.com和$$myTSR2.com的TSR,然后启用调试开关来运行mem.exe以验证这两个程序被加载了。

 

接下来,执行HideTSR程序,然后再次运行mem.exe,可观察到TSR已经被难以辨认的条目替换了(图中显示为空)。

 

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.3.7 案例研究:用TSR记录击键
下一篇:3.3.9 案例研究:为TREE.COM命令打补丁
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站