首页
社区
课程
招聘
[原创]Flare-on5 12题 suspicious_floppy writeup
发表于: 2018-10-8 22:21 5198

[原创]Flare-on5 12题 suspicious_floppy writeup

2018-10-8 22:21
5198

题目给出一个镜像文件



观察镜像中的文件判断为DOS系统盘


使用DOSBox挂载镜像文件,编辑dosbox.conf

运行DOSBox,尝试输入密码,回显密码是否正确



解压镜像文件可以发现DOS启动后运行AUTOEXEC.BAT,然后执行infohelp.exe

对infohelp.exe进行逆向分析,可以发现程序是由Watcom编译的16位程序

16位程序直接无法使用F5插件,掏出王爽老师的书籍温习16位x86汇编,分析时要注意区分CS、DS、ES段



知道了infohelp.exe使用的编译器,制作Watcom标准库的FLIRT signature的签名,IDA自动标记了Watcom的库函数,大大简化了逆向工作量

(参考68bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3S2Y4P5e0b7I4x3#2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1k6V1k6i4c8S2K9h3I4K6i4K6u0r3y4e0l9$3x3e0t1J5z5e0k6Q4x3U0V1`.



infohelp.exe程序由sub_10000作为入口,主要流程可以按如下表示:

在infohelp.exe中并没有检查密码,而是在输入密码后,直接输出了message.dat的文件内容

此外我们还注意到了程序并没有回显Welcome to FLARE spy...的信息,这和DOSBox运行的情况不符

为了验证这个情况,把镜像中的文件解压挂载到用户盘,启动DOSBox自带的DOS系统运行infohelp.exe

解压镜像到DOSBox\floppy,编辑dosbox.conf并再次运行DOSBox


实验现象和预期的一样,程序在输入密码后直接输出了Message


将镜像文件和原版的DOS系统镜像进行比对


可以发现镜像文件的头部,MBR有一段已经被修改了

使用VM+IDA5.5对这个MBR进行调试(16位程序,下面的内存地址按段:偏移表示)

(参考70dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3j5h3I4%4j5i4W2K6K9$3W2F1k6#2)9J5c8Y4m8Q4x3V1j5^5y4e0p5I4x3U0R3H3i4K6u0W2K9s2c8E0L8q4)9J5z5b7`.`.


MBR一开始将镜像中的tmp.dat拷贝0x6000字节到0:0x800并跳转到该区域执行

在执行这段shellcode时,MBR继续加载tmp.dat的一部分数据到数据内存中,然后修改了0:0x4c的数据,然后跳转到解码出的微软原版MBR继续运行

其中0:0x4c地址是int 13h中断服务函数的地址,运行后13h中断服务地址被改为0x97400012



这是一种Bootkit,Bootkit通过感染磁盘主引导记录(MBR)方式,在启动时对系统服务进行hook,由于预先于操作系统、应用程序加载所以很难被查杀

对hook后的中断服务13h继续跟进

伪造的int 13h函数会先记录int 13h所有的参数并调用原版系统服务,原版系统服务执行完后,根据系统服务的参数进入不同的handler

以0x9740:0x105为例,当中断服务13h的参数cx == 0x2111 && dh == 1 && al == 1时,会调用0x9740:0x17e的handler,根据镜像中的信息该镜像的线性地址LBA  = 0x200 * [(磁盘柱面 * 36) + (磁头 * 18) + (扇区号 – 1)],此时LBA正好对应message.dat

也就是说当读取message.dat会调用0x9740:0x17e地址的函数



其他的handler和这个例子类似,其中和密码相关的一个就是在打开message.dat文件时会被hook执行tmp.dat中的函数,另一个就是写key.dat时会将写入的内容复制到指定的内存区域



也就是说通过Infohelp.exe作为触发器,infohelp.ex在输入密码后将密码写入key.dat,此时输入的密码会被复制到指定的内存位置,下一步在打开message.dat时,被hook到真正的密码验证程序

恢复0x9740:0x17e这个handler,大致流程如下



查阅wiki资料,这是One-instruction set computer (OISC)中的subleq的模拟器

只支持一种指令的处理器却可以执行任意的逻辑,可以降低芯片成本,同时给逆向增加难度

(参考: 306K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2L8W2)9J5k6i4N6A6K9$3W2H3k6h3c8A6j5g2)9J5k6h3!0J5k6#2)9J5c8Y4N6A6K9$3W2Q4x3V1k6a6L8X3g2Q4y4h3k6A6L8Y4y4@1M7Y4g2U0N6r3W2G2L8W2)9#2k6Y4y4W2N6q4)9#2k6X3y4G2L8i4m8#2N6r3g2J5i4K6t1&6

在python中重构了subleq的simulator,并执行dump的subleq程序

参考Flare-on4的11题,也是解subleq密码,读了网上去年的WP,一般使用到了进行侧信道攻击,通过不同密码输入的CPU Titk、程序指针图等手段来测试密码

但是我按去年的方法进行尝试,除了发现密码中输入了’@’会大大增加CPU Tick外并没有总结明显的规律

然后进行数据流分析,追踪密码的流向,对读写密码的敏感位置进行标记,也没有明显发现



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

最后于 2018-10-9 11:53 被chenzhuoru编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (3)
雪    币: 58782
活跃值: (21915)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
建议将镜像文件 *.img上传到论坛上一份。
2018-10-9 09:35
0
雪    币: 133
活跃值: (94)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
kanxue 建议将镜像文件 *.img上传到论坛上一份。
updated
2018-10-9 11:53
0
雪    币: 58782
活跃值: (21915)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
chenzhuoru updated
感谢分享!
2018-10-9 16:16
0
游客
登录 | 注册 方可回帖
返回