这几篇都是之前看过的波兰女黑客Joanna Rutkowska(博客地址http://blog.invisiblethings.org/)的几篇博客的一点整理。翻译可能比较生硬,内容有出错或者不足的地方敬请指正。
本篇介绍Vista RC vs. pagefile攻击。
关于pagefile攻击
pagefile攻击利用了windows将内存交换到pagefile这一特性,找到pagefile中的指定内存,修改它,然后让windows不加验证地重新加载这块内存。需要注意的是,你无法直接访问pagefile,C:\pagefile.sys是锁定的,不能通过CreateFile打开。(取自http://www.stoned-vienna.com/pagefile-attack.html)
Vista RC1
Vista RC1签名验证能被攻击绕过,Vista需要所有的内核驱动都有数字签名,而恶意软件可以将代码载入内核。MS目前没有修复这个漏洞,最简单的解决办法是禁用内核模式内存分页。这会导致浪费大概80M的内存。另一个解决方案是,计算每个将要换出的页面的哈希值,在重新加载到内存之前检查其哈希值。
Vista RC2
RC2不受pagefile攻击,因为Vista RC2拦截了用户模式应用对raw硬盘扇区的写访问,即使它们以管理员权限执行。
pagegile攻击的几种可能的解决方案:
- 拦截用户模式对raw硬盘的访问;
- 加密pagefile(选择性地使用哈希来保证换出页面的完整性);
- 禁用内核模式分页(最坏情况牺牲约80M的内存)。
方法1禁用对raw硬盘扇区的写访问,这可能会导致不兼容问题,而且并不能解决问题。例如某公司想发布磁盘编辑器,他们必须为访问磁盘扇区的应用(磁盘编辑器)提供内核驱动,辅助的驱动也需要签名。但是攻击者可以借用签名的驱动执行pagefile攻击。
内核保护和内核补丁保护(Patch guard)
PG由64位Winxp和2003引入,促使软件开发者在产品中不使用未公开的(undocumented)钩子。
pagefile攻击将没有签名的代码加载进内核,所以绕过了Vista内核保护。而绕过内核补丁保护是不同的概念,比如Blue pill绕过的是内核补丁保护(PG),虽然它并没有显式地禁用或绕过PG,但它位于整个操作系统包括PG的上方。
所有类型II(类型定义见BH Federal演讲)的恶意软件都能绕过PG。因为PG设计时不是用来检测II类型恶意软件引起的变化的。deepdoor和backdoor不会被PG检测到,类型III(蓝色药丸)也不会。只需要将恶意软件设计成类型II或III,就可以绕过PG。
PG的主要任务是避免合法的程序表现得像rootkit,避免恶意软件不是它主要任务。但是通过保证合法的应用不引入像rootkit的伎俩,PG使得恶意软件检测工具更加健壮。
rootkit检测工具最大的问题,在于区分恶意软件引入的钩子和某些A/V产品如个人防火墙和Host IDS/IPS程序引入的钩子,A/V产品采用rootkit相似的钩子技术可能会影响系统稳定性,而且会干扰恶意软件检测工具。(可以采用其他的公开了的攻防实现)
补充
恶意软件分类
- type 0:不以任何未公开的方式或任何其他进程修改操作系统,non-intrusive。
- type I:修改不该修改的东西(内核代码、HASH存在TPM中的BIOS,MSR寄存器)。
- type II:修改可被用来修改的东西(designed to be modified)。
PG阻止的行为
- 修改系统服务表;
- 修改IDT;
- 修改GDT;
- 使用kernel不分配的内核栈;
- 给内核任何部分打补丁。