首页
社区
课程
招聘
[原创]分析BOOTKIT并绕过Xuetr检测
发表于: 2012-11-19 15:31 18495

[原创]分析BOOTKIT并绕过Xuetr检测

2012-11-19 15:31
18495

作者: Obusr [via obusr.org]

0. 前篇
工具列表:
Windbg

IDA

Xuetr
MD5: A5F6BA4DE459CCE6B00E8A6036A9F60E
SHA1: C01AE0288FF98FA2D2AF1361BC1E887FEAB76D05
CRC32: A1DFF4F1

1. BOOTKIT从分析到编写小试
目前研究BOOTKIT的人越来越多了,限于BIOS硬件各种限制,其MBR类的BOOTKIT依旧是目前的一个大趋势。在听完wowocock老师(麦洛克菲)课程上逆向分析鬼影三的全过程后,决心自己也来凑个数,编写一个小的BOOTKIT,虽然其过程是艰辛的,但结果却是非常值得的,从中学习了不少关于系统更底层和启动方面的知识。为避免代码其被利用来干坏事 ^.^,这个代码就暂时不上传了,如果有兴趣网上鬼影三代码遍地是。回归正题,下面是一个关于BOOTKIT的大概执行流程图:

根据流程可以知道,其实BOOTKIT就是在系统启动之前拿到执行权,然后一步一步通过HOOK或其他方式下发控制权,最终在操作系统执行后门程序,掌握整个过程后其实编写它也就是那么回事了。只要一层一层下发控制权即可,这个BOOKIT到这里就算是有个雏形了。在这里分享一下其中在代码编写过程中遇到的一些细节问题:
注意堆栈平衡
编译后注意时候跟之前编写的代码一致(例如66h指令前缀经常会来干扰你)
搜索特征的时候要注意唯一性和通用性
除MBR部分代码,其余尽量在汇编中少用硬编码
写到这里,是多少美好的一件事,不过这只是一个起始点!

2. 逆向Xuetr MBR检测模块
在linxer老师的神器Xuetr之下,直接提示未知MBR(~.~很明显MBR有问题),随即针对Xuetr的逆向之路开始了,开vm、od各种调试程序失败,虽然在调试器中Xuetr都可以跑起来,由于Xuetr的反调试功能导致其全部都失效了!百度google各种搜索引擎找Xuetr的逆向资料,几乎没有,只是有人提过Xuetr用了一个保护标记来检测是否被调试。好吧,由于Xuetr没有加壳,直接入口开始分析。内核常规反调试中大概猜测反调试可能在以下几个位置:
DriverEntry直接处理设置,只有一次执行机会,可能性不大
在IRP_MJ_CREATE中处理,与内核交互必然要先打开设备
在IRP handler中,真正代码执行前处理
在每一个功能函数前处理
通过IDA静态分析Xuetr的sys文件可以知道在IRP_MJ_DEVICE_CONTROL中最开始位置被处理了,具体反调试手法没有分析,得到这个函数返回值为1表示被调试状态,直接完成这个IRP。否则继续走后面的流程!但是这样我们还是需要一步一步分析MBR检测代码在哪里?

然后开始用另外一个方式来调试,vm+windbg开始,发现这个时候Xuetr能够成功运行而且功能正常,这个时候就简单了。检测MBR的时候如下图:

这个时候大家大概都有思路了,在MessageBoxW下一个断点即可,随即动手开始操作。在USER32!MessageBoxW入口地址查看esp,拿到返回地址。发现返回到MFC42u.dll中,执行返回到MFC42u.dll,然后通过ebp继续拿到返回地址,验证了一下这个返回地址已经是Xuetr.exe的地址空间了。如果觉得麻烦更简单的可以直接查看堆栈,找到Xuetr的地址空间,基本上就一二个是Xuetr的,稍微一看就可以定位MBR检测函数,在分析的时候发现Xuetr在申请了一块内存区然后调用一个函数后面就直接开始判断前4个dword值进行提示是否是MBR异常,那么关键函数必然在这里!不过函数很深,这里我直接在初始化内存为0后下了一个写入断点,直接执行!这个时候就断点在内核中了,必然Xuetr判断代码是内核层处理了。在下图最后一行位置是堆栈地址:

通过查看这个时候的堆栈就知道是Xuetr的应用程序通过DeviceIoControl下发下来的,开始分析检测代码!下图就是MBR检测函数头:

执行下图call之后标志已经被设置,可以判断这个call也就是关键函数

继续进入这个函数,发现尾部根据另外一个call返回结果来设置的标记

再次进入深入这个函数,发现终于找到了Xuetr针对mbr的处理代码

通过不断分析,发现Xuetr以一个安全的MBR为标准提取特征码,然后对比当前硬盘的MBR是否具有这些特征,如果具有则返回一个安全的提示,反之则提示未知。分析Xuetr到这里的过程就结束了,当然其中也使用了一些很曲折的方式,这里就不一一列举了!

3. 修正BOOTKIT并绕过检测
既然知道了Xuetr如何检测的,那么绕过就不再是问题,既然是特征提取,那么最简单的方案在BOOTKIT中都加入这些特征,但是那样我们就面临一个扇区大小问题了。所以我们需要稍微改善一下BOOTKIT的加载!如图:

通过在原始MBR中插入少量机器码让其加载BOOTKIT MBR即可绕过Xuetr的检测机制。只需要通过一个简单的int 13就可以实现了,大概代码如下:

编译后最终测试效果如下图:


4. 感谢
麦洛克菲一些同学和wowocock、布强、linxer老师!

5. 参考
http://user.qzone.qq.com/37803144/blog/1337577635#!app=2&via=QZ.HashRefresh&pos=1337577635


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 6
支持
分享
最新回复 (23)
雪    币: 65
活跃值: (457)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
沙发 沙发 ,二话不说 咱支持一个
2012-11-19 15:36
0
雪    币: 3096
活跃值: (1592)
能力值: ( LV2,RANK:20 )
在线值:
发帖
回帖
粉丝
3
赞并支持一个!麦洛克菲的一个很喜欢专研和动手的年轻小伙子
2012-11-19 15:45
0
雪    币: 65
活跃值: (457)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
靠,丫的居然选这个头像,别人以为我们搞基肿么办
2012-11-19 15:52
0
雪    币: 239
活跃值: (133)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
不发代码没意思。。。连关键代码都没有。。。想学的学不到。。干坏事也要有能力干才行。。。我怀疑那些干坏事的人的水准要比我们大多数人高。。也许根本瞧不上这样的代码。。当然想我这菜B水准的想干坏事也没那能力啊。。
2012-11-19 15:58
0
雪    币: 112
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
果断支持一个
2012-11-19 16:10
0
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主下面是泄露了别人的qq号吗?
2012-11-19 16:36
0
雪    币: 219
活跃值: (793)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
8
mark mark
2012-11-19 16:48
0
雪    币: 242
活跃值: (1664)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
9
写的不错,学习一下
2012-11-19 20:37
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
10
2. 逆向Xuetr MBR检测模块

这里面很多关键、有意思的地方都没分析到,不够精华啊!
2012-11-19 20:43
0
雪    币: 220
活跃值: (731)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不知道那个STONEBOOTKIT,能在500G硬盘上运行吗?
2012-11-19 20:50
0
雪    币: 47
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
现在反调试的手法非常多了,没有太过专注于这一块。。。。Xuetr的反调试使用了很多方法,并不是单一手法,有兴趣的朋友也可以深入分析下Xuetr这部分
2012-11-19 22:39
0
雪    币: 186
活跃值: (136)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好强大  学习一下原理  对底层东西完全不懂
2012-11-20 00:13
0
雪    币: 97697
活跃值: (200854)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
14
Thanks for share.
上传的附件:
2012-11-20 03:03
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
不错。来看看,mark一下。
2012-11-20 03:41
0
雪    币: 123
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
占位学习~~~~~
2012-11-20 08:39
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
17
这个我要围观下。。
2012-11-20 08:48
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
bootkit相关的,肯定得支持一个`
2012-11-20 09:30
0
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
19
顶,留个记号.
2012-11-20 17:42
0
雪    币: 564
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
BootKit逆向分析、 可惜图片模糊,LZ要是能写成文档再详细讲一些调试逆向分析细节多好,好让像偶一样的新后人能学习哈
2012-11-22 01:51
0
雪    币: 73
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
高清无码。。。强势学习
2012-11-22 11:20
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
马~克~!!
2012-11-23 15:01
0
雪    币: 51
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
看喽哦。。
2012-11-25 23:58
0
雪    币: 216
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
不错,不错。。
2012-11-27 10:12
0
游客
登录 | 注册 方可回帖
返回
//