背景
2022年6月23日,Exodus Intelligence公开了一个影响TP-Link制造的WR940N V5和WR941ND V6路由器的漏洞。这个漏洞被标记为“未初始化指针漏洞”,但由于手头只有WR940N V6型号,我决定先分析WR940N V5的固件,然后再看V6型号。但是在分析过程中,我注意到了一些空白点。
发现漏洞
有多种方式可以发现这个漏洞,且没有哪一种方式是错误的,因为最终结果都是一样的。我将展示两种使用非常原始技术发现这个漏洞的方法。
原始技术 #1
Exodus Intelligence的通报详细说明了该漏洞在“处理UPnP/SOAP SUBSCRIBE请求”时被触发,这一点在UPnP设备架构2.0 PDF中有详细描述。通报中列出的HTTP方法SUBSCRIBE与UPnP的GENA(通用事件通知架构)部分相关,负责处理事件通知,外部设备可以对其进行订阅(SUBSCRIBE)和取消订阅(UNSUBSCRIBE)。
在提取的固件中进行简单的grep
搜索,查找“SUBSCRIBE”会返回三个二进制文件:
$ grep -r "SUBSCRIBE" .
Binary file ./sbin/hostapd matches
Binary file ./lib/libwpa_common.so matches
Binary file ./usr/bin/httpd matches
在进入bindiff之前,决定先比较这些二进制文件的哈希值,以查看是否可以立即排除某些二进制文件。尽管使用的哈希方法(MD5)被称为“不安全”,但在本发布时,尚无已知的路由器厂商在其生成的二进制文件中使用MD5哈希碰撞。
未打补丁的固件(v.211111):
ef7abcd4f5a2289c24a50c9fa9fda8a1 ./sbin/hostapd
45725cdfe9ad7d8323c50167908acc23 ./lib/libwpa_common.so
4dac0ec14e36001092cc2560f297a715 ./usr/bin/httpd
已打补丁的固件(v.220610):
8aa55621c7277b7cc998ecc80fd9d6a4 ./sbin/hostapd
45725cdfe9ad7d8323c50167908acc23 ./lib/libwpa_common.so
4feb70561feb0391404ee29712b0144e ./usr/bin/httpd
哈希二进制文件并进行比较可能是浪费时间,但在这种情况下,它帮助排除了文件./lib/libwpa_common.so
,因为两个MD5哈希值相同。这只剩下两个文件./sbin/hostapd
和./usr/bin/httpd
。接下来,我们需要使用Bindiff来找出哪个二进制文件包含漏洞。
代码解析:
-
grep
命令:grep -r "SUBSCRIBE" .
是一个递归搜索命令,用来在当前目录及其子目录中查找包含“SUBSCRIBE”字样的文件。在这段代码中,返回了三个二进制文件,分别是./sbin/hostapd
、./lib/libwpa_common.so
和./usr/bin/httpd
。 -
哈希比较:
为了缩小调查范围,作者对提取的二进制文件进行了MD5哈希比较。哈希值是一种通过算法生成的文件的唯一标识符,通常用于验证文件是否被修改。通过对未打补丁和打补丁后的固件进行哈希值比较,发现./lib/libwpa_common.so
的MD5哈希值在两个固件版本中相同,因此排除了该文件,认为它与漏洞无关。 -
Bindiff:
使用Bindiff
(一个二进制差异分析工具)来进一步对比./sbin/hostapd
和./usr/bin/httpd
这两个文件,找出哪个文件包含漏洞。Bindiff
通常用于比较两个二进制文件的差异,帮助研究人员确定新旧版本的代码或功能差异,从而定位漏洞。
原始技术 #2
让我们回到之前的假设,假设通报中删除了关于UPnP / GENA的参考信息。这种假设的情况在漏洞通报中经常发生。例如,CVE-2014-4126包含以下信息:“Microsoft Internet Explorer 10和11允许远程攻击者通过精心构造的网站执行任意代码或导致拒绝服务(内存损坏),即“Internet Explorer内存损坏漏洞”。
由于漏洞存在于某个服务中,因此一个不错的策略是首先列出提取的固件中的可执行文件。通过使用find
命令,我们可以查看固件中有多少个文件被标记为可执行文件。
$ find . -executable -type f | wc -l
170
哇!一开始看似固件镜像中有很多可执行文件,但如果在binwalk提取固件时发生了某些事情呢?通过查看find
命令的手册页,发现可以使用-exec
动作对每个找到的文件执行附加任务。通过利用file
命令,可以打印出每个文件名旁边的文件类型信息。查看前几个条目后,显然返回的某些文件不是ELF文件。
$ find . -executable -type f -exec file '{}' \;
./etc/ath/wsc_config.txt: ASCII text
./etc/ath/default/default_wsc_cfg.txt: ASCII text
[removed]
./web/login/input-box1.png: PNG image data, 250 x 32, 8-bit/color RGBA, non-interlaced
[removed]
./web/help/WanSlaacCfgHelpRpm.htm: HTML document, ASCII text, with very long lines, with CRLF line terminators
为了减少文件的数量,find
的输出被管道传递给grep
,搜索输出中的“ELF 32-bit”。
$ find . -executable -type f -exec file '{}' \; | grep "ELF 32-bit" -c
72
可执行文件(包括库)的列表减少了58%。接下来的步骤是创建一个小的bash命令来哈希文件并进行比较。这可能是一个延伸的操作,但它可能有助于进一步减少文件列表。
为了生成列表,以下命令在每个提取的squashfs
目录中执行。
$ find . -executable -type f -exec file '{}' \; | grep "ELF 32-bit" | cut -d ":" -f 1 | while read -r string; do md5sum $string; done
50a9bc41ebc4db4bcdf526b64e8b9ae2 ./bin/busybox
0781d8cd42137165f4b38eb67b41e07c ./sbin/wifitool
e5d4b3d6d5ce16592b23c82a7872b97e ./sbin/iwpriv
dd22c3d54c059547fabc4ce7d9c92adf ./sbin/iwlist
9a71298edacef371a920509249373d06 ./sbin/iptables-multi
17dbb88ae25c0323984e754aa0628ed8 ./sbin/tc
4a9af1c3a57b36ef4e31542c9a1228aa ./sbin/iwconfig
02dbb91d7fd6401158aea9021de72cf5 ./sbin/wpa_supplicant
ef7abcd4f5a2289c24a50c9fa9fda8a1 ./sbin/hostapd
c1efb3e78c002b7a82d2d28739bfcb1d ./sbin/wlanconfig
e1aef559e8ccf27b79b83e05f577bd59 ./lib/ld-uClibc-0.9.30.so
45725cdfe9ad7d8323c50167908acc23 ./lib/libwpa_common.so
7c34616b9c965c7dd4f8e1b1f2d18d6f ./lib/libip6tc.so.0.0.0
3d5625439ce9cd389bd3b7ebcc3eb6e1 ./lib/libxtables.so.2.1.0
368cd21ea41bcece3ecd41335fcbba97 ./lib/libwolfssl.so.14.0.0
452a4826c92c8a51284af5007d9a6db8 ./lib/libiptc.so.0.0.0
b3a33a68a1ef0cfa2a5bd6878d2e3310 ./lib/libwpa_ctrl.so
[...等]
运行diff
命令对比两个文件的差异:
$ diff unpatched_executables_md5.txt patched_executables_md5.txt
< 9060164431357066c3607ebc476761c6 ./bin/busybox
---
> 50a9bc41ebc4db4bcdf526b64e8b9ae2 ./bin/busybox
9c9
< 8aa55621c7277b7cc998ecc80fd9d6a4 ./sbin/hostapd
---
> ef7abcd4f5a2289c24a50c9fa9fda8a1 ./sbin/hostapd
60c60
< 4feb70561feb0391404ee29712b0144e ./usr/bin/httpd
---
> 4dac0ec14e36001092cc2560f297a715 ./usr/bin/httpd
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)