Vista RC vs. pagefile攻击
来源:互联网 发布:ibm软件测试招聘 编辑:程序博客网 时间:2024/06/06 07:39
这几篇都是之前看过的波兰女黑客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不分配的内核栈;
- 给内核任何部分打补丁。
- Vista RC vs. pagefile攻击
- PageFile
- pagefile vs mappedfile & mm vs cc & IRP_PAGING_IO vs IRP_NOCACHE
- Windows Vista SP1 RC简体中文版
- Vista vs Ubuntu
- vs 2008 rc language change
- 用VS的rc.exe编译Redasm的*.rc文件
- Windows Vista SP2 RC正式向普通用户发布
- pagefile.sys
- pagefile.sys
- Google输入法重大漏洞 可导致Vista被攻击
- Vista发现内核安全漏洞 可遭到拒绝服务攻击
- rc
- RC
- RC
- .rc
- 虚拟内存文件pagefile.sys!
- PageFile Swap File
- 并发this.getName()和Thread.currentThread().getName()区别
- EOJ1488 COIN COLLECTOR 贪心
- PAT_自测4_Have Fun with Numbers
- 开始啦
- 公钥密码学
- Vista RC vs. pagefile攻击
- Error:Execution failed for task ':app:compileDebugJavaWithJavac'.解决方案
- python中时间相加问题
- socket.io node.js mysql
- 教你怎么制作高大上的三维热力图
- 初始化
- Python3爬虫实战——QQ空间自动点赞程序(上)
- (Leetcode)利用preorder-inorder/postorder-inorder构建二叉树
- Android的AsyncTask