使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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/

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

加载库的项目布局

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

 Size check #1

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

· 2.19.1340x51E34=FUN_00061d30

 Size check #2

· 2.19.133:0x52F00=FUN_00062f00

· 2.19.134:0x52D0C=FUN_00062d0c

0x02  漏洞分析

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

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

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

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

0x03 版本跟踪session

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

0x04 运行关联器

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

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

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

自动版本跟踪

运行自动版本跟踪命令后,在匹配“大小检查”#1的同时,xise它没有被自动接受:使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

匹配尺寸检查#1函数

大小检查#2甚至根本不匹配:使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

匹配大小检查#2函数

但是,我决定运行功能参考匹配关联器,即使至少根据手册,组合功能和数据参考匹配关联器应该已经包括该关联器:使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

添加函数参考匹配相关器

在通过函数引用匹配相关器匹配此大小检查#2之后:使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

匹配大小检查#2函数

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

0x5 差异比较

Ghidra不提供图形差异视图。

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

因此,唯一包含比较更改的方法是通过列表视图:使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

列出查看大小检查#1函数的差异使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

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

0x06 Ghetto-tech图形视图比较

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

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析使用Ghidra对WhatsApp VOIP Stack 溢出漏洞的补丁对比分析

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

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

0x07 反编译问题

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

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

0x08 CVE-2015-8126

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

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