首页
社区
课程
招聘
[求助]Intel VT虚拟机如何实现内存写保护和防篡改GDT/IDT?(不启用EPT的情况)
发表于: 2009-8-1 18:22 13150

[求助]Intel VT虚拟机如何实现内存写保护和防篡改GDT/IDT?(不启用EPT的情况)

2009-8-1 18:22
13150
最近偷窥http://rootkit.com/newsread.php?newsid=758的虚拟机框架写了个VT虚拟机
希望能进行WINDOWS内核保护,当然是不开启EPT扩展页表的情况下,太复杂

目前可以实现禁止修改CR0寄存器的WP位,以及阻止修改SYSENTER相关MSR实现SYSENTER HOOK (其实就是改了CR0 host/guest mask和设置一下CR0 read shadow,MSR是必然会引起VM EXIT的)。

但众所周知,绕过内存写保护还有一种常规方法是创建MDL,这种方式不会产生VM EXIT,难道用HOOK做,但HOOK在RING0总有办法绕过,大不了自己实现API。

HyperSight这款软件(http://northsecuritylabs.com/testing.aspx下载 号称世界上第一款VIPS)号称是实现了如下的功能:(引用自官方白皮书http://northsecuritylabs.com/downloads/whitepaper-html/)

Hypersight Rootkit Detector monitors and intercepts the following actions classified as being potentially dangerous:
Hypersight监视和拦截以下的危险行为,大概是这个意思吧 我鸟语不行
·         Attempts to modify page table. This activity is typical for ‘shadow walker’ rootkits that hide themselves in the computer memory.
尝试篡改页表,这一行为时典型的'shadow walker' rootkits在内存中隐藏自己的方式
·         Attempts to modify read-only kernel modules. Most rootkits exhibit this behavior.
尝试修改只读的内核模块,大多数rootkits有这种行为
·         Attempts to modify GDT and IDT. Typical for ‘shadow walker’ and other rootkits.
尝试修改GDT/IDT,'shadow walker'和其他rootkits的典型特征

然后又说内存写保护的东西

Rootkits are performing the following activities to circumvent memory write-protection:
rootkits用一下的方式绕过内存写保护
·         Resetting write-protection bit (CR0.WP)
重置CR0的WP位
·         Mapping memory sections with write privileges (calls to MmMapLockedPages, MmMapLockedPagesSpecifyCache)
以写权限映射内存
·         Accessing physical system memory via \Device\PhysicalDrive object
访问物理内存对象
Hypersight Rootkit Detector kernel intercepts all attempts to circumvent memory write-protection
Hypersight Rootkit Detector 内核拦截一些尝试绕过内存写保护的行为。

我测试了一下,在Intel VT的CPU下,根本没实现内存写保护,而且他初始化VMCS的时候跟我赋的值是基本一样的(同样没有开启EPT扩展页表)。

08年的Black Hat上日本人Murakami发表议题:基于硬件虚拟化的主机防御系统(反正就这意思),PPT可以到Black Hat官网下载

里面的VIPS是基于一个www.SecureVM.org的BitVisor得日本开源虚拟机的,貌似该虚拟机并没有使用EPT,而是使用软件虚拟机使用的影子页表进行的内存虚拟化,文中叫SPT,作者的内存写保护是通过设置SPT的W/R位实现的,GUEST OS无法修改影子页表。但我总不能去用影子页表,那复杂,而且性能开销很大。其实是我不会。

去年的XCON徐昊也说了类似的东西,可以我没钱参加,也没拿到任何相关资料 悲哀

Intel手册3B卷翻了N遍(我E文不行只能走马观花),也没找到能够实现内存写保护的机制,除了启用EPT,至于修改IDT/GDT似乎也不会产生VM EXIT。实在是黔驴技穷啊!

还有一个奇怪的事情:开启虚拟化后,GUEST OS的程序修改CR0.WP位即使失败也能成功修改SSDT而不蓝屏,可能是我没处理#GP异常(General Protection 应该是这个异常把)。
大牛帮帮忙啊!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
2
修改SSDT本来就没有必要修改CR0
2009-8-1 19:09
0
雪    币: 124
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zok
3
但是我再一台电脑上测试 怎么也不做 直接改SSDT会BSOD啊
提示什么 write read-only memorg
大牛们冒个泡啊
2009-8-1 20:16
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
内存大小报名?系统版本号报名,cpu型号报名~
2009-8-1 21:23
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
5
MDL改Access法?
2009-8-1 21:23
0
雪    币: 124
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zok
6
版本 XPSP3  /内存2G /CPU AMD 5000+ 蓝了
2009-8-1 21:34
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
7
看了一下,至少在WINDOWS XP的内核中,KiServiceTable是位于.text段的,这个段中,image_scn_mem_write是disable的,因此,应该是不允许读写的。若直接写入SSDT,会引发蓝屏.

但当系统内存较大,开启了大页面分页的时候,由于一个大页面中可能包含了数据和代码,此时若同数据段接近的只读页面,就是不被保护的可写页面,如果SSDT所在页面遇到这样的情况。就可以不修改CR0直接写入SSDT,具体这个可以看注册表中的Memory manage,你也可以通过修改注册表强制enable页面保护。
2009-8-1 23:18
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这个帖子要顶起
2009-8-3 01:15
0
雪    币: 124
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zok
9
自己无耻的顶一下 希望大牛们看到帮个忙
2009-8-5 20:26
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
10
LZ一上来就研究VT里面最复杂的部分。。只能膜拜了

另外说一下,支持VT的CPU有版本号的区别,版本不一样,支持的内容也不一样
高版本的可以有GDT/IDT操作引发 vm exit,而低版本的没有这个功能

所以研究这个东西,要在特定的CPU上再研究。
另外,虚拟机不支持VT,所以,还需要两台机器
2009-8-5 21:52
0
雪    币: 124
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zok
11
谢谢海大哥的指点, 我是基础不牢地动山摇,回去好好翻翻INTEL手册
关于"高版本的可以有GDT/IDT操作引发 vm exit",能否说具体点,手册里似乎没提

另外海大哥对于AMD的虚拟化SVM一定也很有研究吧,能不能再指点一二,有点想转战AMD了(我电脑是AMD的,搞INTEL只能去同学的机器上BSOD)
2009-8-5 22:20
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
12
VOL3 20.6.2 Processor-Based VM-Execution Controls

这里面有介绍
2009-8-5 22:26
0
雪    币: 124
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zok
13
哦 再问两个比较菜的问题 针对MDL绕过内存写保护的方法 能否通过HOOK的方式来防御?如果HOOK得话 HOOK哪个API比较好?是像Hyper-sight说的MmMapLockedPages, MmMapLockedPagesSpecifyCache还是MmCreateMdl等其他位置?虽然HOOK总是可以恢复的也可以自己实现相关API,但我现在只要能防住大多数情况就行了
另外IDA貌似不支持AMD-V的指令(VMRUN/VMLOAD/VMxxx...) 有没有办法写个脚本插件什么的让IDA识别出来 不会用IDA 我想看看Hyper-sight怎么实现的AMD-V 虚拟机
2009-8-5 22:35
0
游客
登录 | 注册 方可回帖
返回
//