当前位置: 首页 >新闻中心

新闻中心
软件漏洞分析的八大技巧汇总(6)
2014-03-28

技巧六:通过虚拟机快照来固定堆地址

最早听到这个方法,是instruder在QQ群里面提到的。由于在分析漏洞时,尤其是堆漏洞时,每个重新加载运行时,分配的堆地址都是固定,无论是分析还是写文档,都不太利用于我们分析和描述。因此我们可以先将程序调试已经完成堆分配的某个地址,然后将其保存为虚拟机快照,等我们需要再重新开始调试时,可通过恢复先前保存的快照来重新调试,那么此时的堆地址跟之前分析的地址都是固定的。

技巧七:监控堆分配释放动作来分析UAF、double free漏洞

以之前分配libpng某个double free漏洞的分析为例,主要是通过对释放函数free进行监控并输出记录来分析的。程序崩溃时的栈回溯如下:

软件漏洞分析技巧

重新用windbg加载,通过监控堆块的释放过程,可以发现它在对其中某堆块进行了双重释放,先下断:

bu 3440D279 ".if(1){.echo EnterVulnFunc;gc}"
bu 6e264b6c ".if(1){.echo Free heap block; dd esp l4;gc}"

输出结果:

EnterVulnFunc
Free heap block
0011bc5c  3441e2a2 138f0020 3b906313 10027b64
Free heap block
0011bc5c  3441dc6c 138f0020 3b906313 10027b64
(1508.e84): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=138f0018 ebx=138f0020 ecx=6e287a7e edx=10028a70 esi=008a0000 edi=00000000
eip=77691f88 esp=0011bbe8 ebp=0011bbf8 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010246
ntdll!RtlFreeHeap+0x3a:
77691f88 80780705        cmp     byte ptr [eax+7],5         ds:0023:138f001f=??

可以看到它对同一个堆块进行多次释放。在IE漏洞分析中最常见的还是UAF,如果想快速定造成UAF的IE对象,就需要对对象的分配的释放进行释放,这个可通过调试器脚本来实现,或者像之前h4ckmp同学基于Windbg接口写的EXE工具,可以快速分析出导致UAF漏洞的对象,如下图所示。

软件漏洞分析技巧

技巧八:基于污点追踪的分析方法

污点追踪理论挺好的,但成品往往不容乐观。污点追踪犹如“七伤拳”一般,“先伤己,再伤人”,开发污点追踪工具,不仅费时费力,而且开发完成后,运行比较大的工具往往需要运行很长时间,比如IE、Adobe等软件,有时甚至需要整整一天的时间,这种一般是在调试分析不方便的时候才使用的,主要针对文件格式漏洞。另外,你也可利用pin等动态插桩框架开发出动态分析工具,针对特定函数挂钩,比如堆分配与释放函数,也可以用它来实现快速分析。

软件漏洞分析技巧