FirmAE 是一个全自动框架,用于执行固件模拟和漏洞分析。FirmAE 通过五种仲裁技术显著提高了模拟成功率(从 Firmadyne 的 16.28% 提升至 79.36%)。我们在来自前八大厂商的 1,124 个无线路由器和 IP 摄像头固件镜像上测试了 FirmAE。
我们还开发了一款用于 0-day 漏洞发现的动态分析工具,该工具基于目标固件的文件系统和内核日志推断 Web 服务信息。通过在我们成功模拟的固件镜像上运行该工具,我们发现了 12 个影响 23 台设备的新 0-day 漏洞。
请注意,我们已在 Ubuntu 20.04 上测试了 FirmAE。
FirmAE$ git clone --recursive https://github.com/pr0v3rbs/FirmAE
download.sh 脚本。$ ./download.sh
install.sh 脚本。$ ./install.sh
init.sh 脚本。$ ./init.sh
$ wget https://github.com/pr0v3rbs/FirmAE/releases/download/v1.0/DIR-868L_fw_revB_2-05b02_eu_multi_20161117.zip
$ sudo ./run.sh -c <brand> <firmware>
$ sudo ./run.sh -a <brand> <firmware>
$ sudo ./run.sh -r <brand> <firmware>
在 run.sh -c 完成后。
用于检查模拟固件是否可通过网络访问
socat 连接、nc 反向 shell(31337)以及 telnet 连接(31338)$ sudo ./run.sh -d <brand> <firmware>
$ sudo ./run.sh -b <brand> <firmware>
在 firmae.config 中查看五个仲裁环境变量
$ head firmae.config
#!/bin/sh
FIRMAE_BOOT=true
FIRMAE_NETWORK=true
FIRMAE_NVRAM=true
FIRMAE_KERNEL=true
FIRMAE_ETC=true
if (${FIRMAE_ETC}); then
TIMEOUT=240
首先,准备一个 docker 镜像。
$ ./docker-init.sh
然后,运行以下命令之一。-ec 仅检查模拟,-ea 检查模拟并分析漏洞。
$ ./docker-helper.py -ec <brand> <firmware>
$ ./docker-helper.py -ea <brand> <firmware>
这里,<firmware> 可以是一个列出固件镜像路径的文本文件。请查看 ./examples/test.list 中的示例文件。
在固件镜像成功模拟之后。
$ ./docker-helper.py -ed <firmware>
Google 电子表格 - 查看
Google 云端硬盘 - 下载
本研究项目由 KAIST 的 SysSec Lab 开展。
如果您在使用 FirmAE 时考虑引用我们的论文,我们将不胜感激。
@inproceedings{kim:2020:firmae,
author = {Mingeun Kim and Dongkwan Kim and Eunsoo Kim and Suryeon Kim and Yeongjin Jang and Yongdae Kim},
title = {{FirmAE}: Towards Large-Scale Emulation of IoT Firmware for Dynamic Analysis},
booktitle = {Annual Computer Security Applications Conference (ACSAC)},
year = 2020,
month = dec,
address = {Online}
}