使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析
2019-11-05 11:05:50 Author: www.4hou.com(查看原文) 阅读量:152 收藏

0x01 样本对比

· 存在漏洞的WhatsApp应用程序

· 版本2.19.133

· 763ab8444e085bd26336408e72ca4de3a36034d53c3e033f8eb39d8d90997707

· 使用 9daaa009e08ac55168aeacdc34dd9c1d7a8f8a49048de949ddaf8a61997b324f  libwhatsapp.so

· https://www.apkmirror.com/apk/whatsapp-inc/whatsapp/whatsapp-2-19-133-release/whatsapp-messenger-2-19-133-android-apk-download/

· 打补丁的的WhatsApp应用程序

· 版本2.19.134

· 找不到有以下内容的APK: ee09262fa8b535b5592960ca5ab41e194f632419f8a80ef2e41d36efdbe13f88

· 使用 28dc66c34e92810ad3f0cb2f5b636773fb4d5fc5134f77b4ee986d9e1a6b4f80  com.whatsapp_2.19.134-452790_minAPI15(armeabi-v7a)(nodpi)_apkmirror.com.apk

· 使用 d054ff7bce7777a94dc8b72cb5bd8a2ab3b188bcb81fcf8aafcf5720b85036c4  libwhatsapp.so

· https://www.apkmirror.com/apk/whatsapp-inc/whatsapp/whatsapp-2-19-134-release/whatsapp-messenger-2-19-134-2-android-apk-download/

1571729516356.png

加载库的项目布局

对于那些尚未阅读@maddiestone漏洞信息的人,我简单描述一下,她主要是在说两个漏洞点:

 Size check #1

· 2.19.133:0x51D30= FUN_00061e34(在Ghidra中)

· 2.19.134:0x51E34=FUN_00061d30

 Size check #2

· 2.19.133:0x52F00=FUN_00062f00

· 2.19.134:0x52D0C=FUN_00062d0c

0x02  漏洞分析

1571729638385.png

Ghidra检测到某些无法识别的函数,因此无法反汇编,我禁用了Non-Returning Functions – Discovered分析器:

1571729724049.png

Non-Returning Functions – Discovered 分析器已禁用

我以前在此分析器处于活动状态的情况下运行了分析,这导致源程序和目标程序具有不同数量的不返回函数。Ghidra的版本跟踪前提条件清单将检查这些内容并发出警告。因此,请始终运行前提条件检查表!!!

由于Ghidra在返回函数后会停止工作,因此该问题特别明显。但是它只能在以下程序中检测到无法识别的函数:

1571729972271.png

0x03 版本跟踪session

1571814923787.png

在向导wizard中,可以运行一些前提条件检查。这些可以确保已经分析了足够多的二进制文件,并且还执行了一些健全性检查,例如,比较无法识别函数的数量和报告差异。应该始终运行它们并修复所有错误并查看所有警告。

1571815005567.png

在这种情况下,出现了一个警告,因为分析期间库代码有不同数量的错误:

1571815042638.png

如果希望得到原始的结果,建议尽可能多地修正警告。

0x04 运行关联器

在新的版本跟踪会话中,需要添加运行关联器。这些关联器会比较源程序和目标程序并查找匹配项,例如,Exact Function Bytes Match关联器在具有完全相同的字节模式的函数之间查找匹配项。

Ghidra的自动版本跟踪命令按照假定的顺序运行包含的关联器,一直接受匹配,但将错误匹配保持在最低限度。

1571815069523.png

自动版本跟踪

运行自动版本跟踪命令后,在匹配“大小检查”#1的同时,它没有被自动接受:1571815090009.png

匹配尺寸检查#1函数

大小检查#2甚至根本不匹配:1571815106796.png

匹配大小检查#2函数

但是,我决定运行功能参考匹配关联器,即使至少根据手册,组合功能和数据参考匹配关联器应该已经包括该关联器:1571815128658.png

添加函数参考匹配相关器

在通过函数引用匹配相关器匹配此大小检查#2之后:1571815145291.png

匹配大小检查#2函数

然后,我手动接受了大小检查#1和#2函数。

0x5 差异比较

Ghidra不提供图形差异视图。

函数比较窗口中的反编译视图也不会突出显示所做的更改。这两个“编译视图”只需滚动其行即可同步(通过其行号!)。

因此,唯一包含比较更改的方法是通过列表视图:1571815197899.png

列出查看大小检查#1函数的差异1571815214057.png

列出查看大小检查#2函数的差异

很快就会发现,通过列表视图比较补丁不如图形差异视图清晰。

0x06 Ghetto-tech图形视图比较

作为一种解决方法,我在函数之间更改了基本块的颜色,以提供Ghetto-tech图形视图:

1571815354644.png

大小检查#1源函数的Ghetto-tech图形视图

1571815371907.png

大小检查#1目标函数的Ghetto-tech图形视图

1571815392148.png

大小检查#2源函数的Ghetto-tech图形视图

1571815411640.png

大小检查#2目标函数的Ghetto-tech图形视图

如果您想进一步了解CVE-2019-3568补丁以及如何利用此漏洞,请参阅Maddie的资料

0x07 反编译问题

最后,可以用Ghidra比较存在漏洞的两个函数。但是,如果不知道存在漏洞的函数,将很难找到它们,因为Ghidra似乎存在ARM反汇编问题,导致实际上几乎相同的函数反编译完全不同。例如:1571818019183.png

由于只有一个程序反汇编在该b.w分支之后,因此函数变化很大。对于基本没什么区别的函数,它会产生不同的反汇编代码。

0x08 CVE-2015-8126

我之前写过一篇有关CVE-2015-8126补丁差异的文章。

可以通过运行PatchDiffCorrelator项目的一个来实现漏洞利用(视频](https://www.youtube.com/watch?v=8BH7ttwz5tg))。


文章来源: https://www.4hou.com/vulnerable/21141.html
如有侵权请联系:admin#unsafe.sh