◆binwalk
◆firmwalker
◆IDA
◆FirmAE
binwalk用于固件解包获取文件系统。常用解包命令为:
binwalk -Me wr740nv1_en_3_12_4_up.bin
firmwalker用于查看文件系统中的敏感信息。扫描命令为:
./firmwalker.sh '/home/iot/Desktop/WR740/_wr740nv1_en_3_12_4_up.bin.extracted/squashfs-root'
由上面的信息可知:
◆路由器Web相关URL的格式为:/web/userRpm/xxxxx.htm,这可能是web服务相关的命令规范。
◆含有passwd和pwd相关的文件中,可以看到嵌入式web服务httpd,部分htm文件以及其他配置文件。
查看启动项中是否存在后门服务,如telnet服务。嵌入式Linux常用启动项文件位于:etc/rc.d文件夹中。
启动项中未见异常行为,httpd文件在firmwalker扫描的敏感信息和启动项中都有涉,因此需要用IDA分析一下该文件。
由file信息可知用IDA32分析,根据firmwalker扫出的敏感信息可知httpd文件中含passwd、password、root、admin、upgrade等字符串。
通过IDA中字符串搜索发现疑似后门的敏感字符。
通过查看该字符串的引用发现如下代码:
根据伪代码可知其的功能是:判断命令是否为exit,若不是则验证用户名和密码,验证的用户名:osteam 密码:5up。
通过write(pty,cmd,strlen(cmd))来模拟执行命令。(知识扩充:伪终端(pseudo terminal也称为 pty)是指伪终端 master 和伪终端 slave 这一对字符设备。其中的 slave 对应 /dev/pts/ 目录下的一个文件,而 master 则在内存中标识为一个文件描述符(fd)。伪终端由终端模拟器提供,终端模拟器是一个运行在用户态的应用程序。)
通过查看引用找到了DebugResultRpmHtm函数的调用位置。根据此处的伪代码可推断出函数httpRpmConfAdd的功能是绑定URL和执行的函数。由函数名httpDebugInit可推断出这是一个调试后门。
使用FirmAE来对固件进行模拟以验证上述内容。
FirmAE是一款完全自动化的固件模拟和漏洞分析的工具,其固件模拟成功率与Firmadyne工具相比大大提升,且与Qemu相比仅一条命令就可实现固件模拟,简单方便。FirmAE的工作模式分为5种:
◆-c 检查是否能模拟
◆-a 漏洞分析
◆-r 固件模拟的运行
◆-d 用户级的调试
◆-b 内核级的调试
sudo ./run.sh -c <brand> <firmware>
sudo ./run.sh -a <brand> <firmware>
sudo ./run.sh -r <brand> <firmware>
sudo ./run.sh -d <brand> <firmware>
sudo ./run.sh -b <brand> <firmware>
!<firmware>是固件路径,<brand>是固件的牌子,这个可以随意写。
!在对固件模拟前,尽量先-c进行检查。在检查之后,运行和调试时的模拟速度也会变快。
使用FirmAE模拟固件命令如下:
!执行init.sh初始环境
sudo ./init.sh
!检查是否能模拟
sudo ./run.sh -c tp-link '/home/iot/Desktop/WR740/wr740nv1_en_3_12_4_up.bin'
!开始固件模拟
sudo ./run.sh -r tp-link '/home/iot/Desktop/WR740/wr740nv1_en_3_12_4_up.bin'
通过浏览器访问URL:http://192.168.1.1出现上图信息,说明模拟成功。开始运行固件模拟并验证后门漏洞。
固件开始运行,此时访问URL要求输入账号密码。
根据提示输入默认的账号密码admin。并访问URL:http://192.168.1.1/userRpmNatDebugRpm26525557/linux_cmdline.html出现以下界面:
尝试直接输入命令执行:
根据返回结果可知是需要输入账号密码的。输入固件分析时找到的用户名:osteam和密码:5up并执行命令。
由上可知命令被执行并返回。并且在右侧还预设了一些命令,点击按钮即可执行,这个后门很优雅。
熟悉工具的使用和有一些分析常识很重要,通过信息收集到的敏感信息可以快速定位漏洞可能出现的位置并针对性分析,是一个由粗到细的过程。这是复现的第一个路由器漏洞,希望自己能坚持下去,用心复现,仔细记录。“靡不有初,鲜克有终!”