本文内容是基于《物联网渗透测试》-美·亚伦古兹曼的学习总结
固件提取
在硬件厂商网站内直接下载
固件更新时,利用中间人攻击,转发代理流量
通过物理连接,直接从设备转储固件。固件存储为bin文件指令:
$ flashrom -p ft2232_spi:type=232H -r spidump.bin
利用搜索引擎搜集固件,还可以利用 Google Hacking数据库搜索固件或设备
MITM转发代理流量流程
接下来,我们简要介绍了如何使用Kali Linux、SSLstrip、 Ettercap和Wireshark搭建MITM测试环境,以在设备更新期间捕获设备 流量
启用IP转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
配置iptables,将目的端口80的流量重定向至SSLstrip监听的端口10000。
iptables -t nat -p tcp -A PREROUTING --dport 80 -j REDIRECT --to-port 10000
启动SSLstrips:
sslstrip -a
启动Ettercap GUI:
ettercap -G
- 在
primary interface
选择要监听的设备,这里选择网卡eth0
- 启动Wireshark程序,对
eth0
进行抓包
- 根据实际需求过滤关注的报文
固件文件分析
一般直接使用
binwalk -eM file.bin
即可分解文件
D-Link 923B固件文件系统获取
固件压缩包下载链接,版本号为DWR-932_fw_revB_2_02_eu_en_20150709。安全研究员Gianni Carabelli和Pierre Kim已经在这款固件中挖掘出了漏洞,这里我们只是用于练习
首先是从固件中提取文件系统,内有加密过的zip压缩包,可以使用fcrackzip
进行密码爆破,这里省略爆破过程,直接输入密码 beUT9Z
接下来可以使用针对yaffs2格式 的工具解压文件系统来提取2K-mdm-image-mdm9625.yaffs2文件,也可以直接通过Binwalk来完成提取工作。
这里我采用的是unyaffs,下载链接 Google Code Archive - Long-term storage for Google Code Project Hosting.
下载可执行程序后,使用./unyaffs file.yaffs2
指令即可
手动信息挖掘
然后我们需要在这个文件目录中查找有用的信息,如下
1 | find . -name "*.conf" |
在inadyn-mt.conf
文件中存储了路由器的no-IP配置信息,包括用于访问网站 no-ip的用户名和口令
查看shadow文件
查看passwd文件
利用Firmwalker搜索敏感信息
安装firmwalker
1 | npm i -g eslint |
使用方式
1 | ./firmwalker.sh {floder path} |
Firmwalker脚本能够识别出多种敏感信息,包括二进制文件、 证书、IP地址、私钥等,同时将输出结果都保存在firmwalker.txt文 件之中
查看启动项
1 | cd /etc/init.d |
这里可以查看 start_appmgr脚本,一般来说mgr就是主控程序的意思
可以看到该脚本在开机时会以服务的形式运行/bin/appmgr
程序,同时该脚本还会开启telnet服务
appmgr分析
用IDA PRO打开/bin/appmg
程序进行逆向分析,可以发现有一个线程会持续监听 0.0.0.0:39889(UDP)(这个IP和端口还是没有确定出来),并等待传入控制命令,如果某个用户向目标路由器发送了一个 HELODBG
字符串,那么路由器将会执行 /sbin/telnetd -l /bin/sh
,并允许这名用户在未经身份验证的情况下以 root 用户的身份登录路由器。
这里的-11877转换二进制后,末尾两字节为port,前面都是0,末尾字节为\xD1\x9B注意小段存储方式,则port号为9BD1即39889
搜索 mod_sysadm_config_passwd 函数,可以得到admin默认密码
路由器的管理员账号。设备的管理员账号默认为“admin”,而密码同样也是“admin”。
搜索 wifi_get_default_wps_pin 函数
默认配置下,该路由器 WPS 系统的 PIN 码永远都是 28296607
因为这个 PIN 码是硬编码在 /bin/appmgr
程序中
fotad 分析
路由器与 FOTA 服务器进行通信时的凭证数据硬编码在 /sbin/fotad
代码中,我们用 IDA 进行分析
搜索 sub_CAAC
函数,可以发现被 base64 过的凭证
用户/密码如下
1 | cWRwYzpxZHBj qdpc:qdpc |
UPnP安全问题
UPnP 允许用户动态添加防火墙规则。因为这种做法会带来一定的安全风险,因此设备通常都会对这种操作进行限制,以避免不受信任的客户端添加不安全的防火墙规则。
UPnP 的不安全性早在2006年就已经是众所周知的事情了。而该路由器中 UPnP 程序的安全等级仍然非常的低,处于局域网内的攻击者可以随意修改路由器的端口转发规则。
文件 /var/miniupnpd.conf
是由 /bin/appmgr
程序生成的:
搜索 sub_2AE0C 函数
该程序会生成 /var/miniupnpd.conf
:
1 | ext_ifname=rmnet0 |
基于固件仿真的动态分析
准备工作
安装FAT(Firmware-Analysis-Toolkit),执行以下命令即可,但需注意环境需同时具有python2和python3
1 | git clone https://github.com/attify/firmware-analysis-toolkit |
Kali和Ubuntu安装都出现了一些问题人麻了
Kali则是报找不到Package ‘lsb-core’ has no installation candidate