使用BinDiff分析补丁文件

简介

本片文章主要是出自吾师邱老师,是其在教我们漏洞相关知识时写的,写的十分详细。今天做一回搬运工,大部分内容为整合邱老师的内容。

0x00 工具与环境

分析环境为 Win10+IDA7.0+BinDiff5.0

注:IDA7.4 必须搭配 BinDiff6.0,IDA7.0/7.2 必须搭配 BinDiff5.0

下载地址:

BinDiff:https://www.zynamics.com/software.html

笔者这里环境时IDA7.0,所以这里下载BinDiff5.0.msi,如图:

image-20200328224245925

(注:点击上图中的bindiff5.msi没反应时,可右键新建标签页打开链接,进行下载。)

安装BinDiff时,在选择==IDA目录时==,要将其路径设置到自己IDA所在的根目录。如图:

image-20200328225535417

其他的选项一路Next就可。若安装成功,可在IDA左上角File选项中,可看到BinDiff选项,如图:

image-20200328225910819

0x01 补丁分析实践

本次比较的漏洞补丁版本为KB4551762,上一个版本为KB4540673,漏洞编号为CVE-2020-0796,影响的操作系统为==Win10 1903/1909==,受影响文件:客户端 mrxsmb.sys ,服务端 srv2.sys 。

漏洞的介绍:

2020年3月11日,某国外安全公司发布了一个近期微软安全补丁包所涉及漏洞的综述,其中谈到了一个威胁等级被标记为Critical的SMB服务远程代码执行漏洞(CVE-2020-0796),攻击者可以利用此漏洞远程无需系统账户验证,通过发送构造特殊的恶意数据导致在目标系统上执行恶意代码,从而获取机器的完全控制权。此漏洞主要影响支持SMBV3.1.1的设备,理论上存在蠕虫化的可能性。

备份文件

查看 CVE 资料可知漏洞影响版本主要是 Win10 1903/1909 。根据前述补丁编号,下载好相应的文件,对受影响的文件进行分析。

以下是 x64 版本受影响的 MD5 列表:

文件 打补丁前 MD5 打补丁后 MD5
mrxsmb.sys A6F9BBFB31A1F17844B77FD642EC83A5 E242713AD12625A58C07F053C3696981
srv2.sys F508EC2BFC244442D76091CB03BAE110 F037DE85645D30A21CD79CB1F8BB706A

下载对应的PDB文件

因为微软会提供符号文件帮助分析,所以需要下载打补丁前后的 pdb 文件,方法:

1.在 WinDbg 目录下打开命令窗口;

2.执行命令,下载PDB文件:

1
symchk -v <MoudleFilePath> 

3.下载成功后,将下载的文件命名成和原始文件同名的文件,这里是 mrxsmb.pdb,并将该文件复制到待分析的 mrxsmb.sys 同级目录。

使用 BinDiff 进行比较

将打补丁前后的文件的 pdb 下载并改名后复制到待分析文件同级目录后,用 IDA 分析待分析文件,并生成 idb(或 i64)文件。将新、旧版本的文件 idb 都分析生成好。如图:

image-20200330222657608

然后打开其中一个idb文件,并从 File 选项中选择 BinDiff,如图:

image-20200330223845728

注:不能有中文路径,包括用户名也不能为中文。

然后再从 IDA 打开 Matched Functions 窗口,点一下左上角的 Similarity,让相似度最低的排在前面,如图:

image-20200330224114523

随便选一个函数,右键 ->View grow graphs,BinDiff 便会打开一个比较窗口,如图:

image-20200330224501815

按 ctrl+鼠标滚轮可进行放大与缩小。

寻找漏洞函数

后面就是分析了,仔细对比补丁做的修改,有条件的话尝试调试,最终分析出漏洞原理