路由器漏洞挖掘工具总结

固件的解包与封装

firmware-mod-kit

工具下载

基于binwalk的解打包⼯具

安装⽅法:

⾸先安装依赖

1
sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic

安装工具

1
2
3
4
5
git clone https: / github.com/mirror/firmware-mod-kit.git  
 
cd firmware-mod-kit/src  
 
./configure & make

解包固件

将固件 firmware.bin 解包到 working_directory/ 下

1
./extract_firmware.sh firmware.bin working_directory/

重新打包固件

将新⽣成的固件放到 output_directory 下

1
./build_firmware.sh output_directory/ working_directory/

基于文件系统的信息收集

trommel

工具下载

trommel是一款使用python语言编写的开源工具,用于对固件的文件系统进行分析,筛选嵌入式设备文件,以识别潜在的脆弱指标。该工具不需要安装

使用方式

1
python3 trommel.py -p 文件系统  -o 提取结果文件前缀 -d 提取结果存放目录

例如对DIR822路由器进行分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
iot@research:~/tools/trommel$ python3 trommel.py -p ~/Desktop/fmk/rootfs/  -o DIR -d ~/Desktop/


__ __| _ \ _ \ \ | \ | ____| |
| | | | | |\/ | |\/ | __| |
| __ < | | | | | | | |
_| _| \_\\___/ _| _|_| _|_____|_____|



TROMMEL is working to sift through the directory of files.

Results will be saved to 'DIR_TROMMEL_20240722_164138'.

TROMMEL file hashes will be saved to 'DIR_TROMMEL_Hash_Results_20240722_164138'

Based on the binary 'busybox' the instruction set architecture is MIPS.

分析结果会在我们给定的文件夹下面,一些文件的hash值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
__ __|  _ \   _ \   \  |  \  | ____| |     
| | | | | |\/ | |\/ | __| |
| __ < | | | | | | | |
_| _| \_\\___/ _| _|_| _|_____|_____|

There are 1801 total files within the directory.

File name: /home/iot/Desktop/fmk/rootfs/usr/bin/udevinfo, Hashes: 000ff986209071ba70698eb16fee1b99, 97b63b9392e1b17cf0e4366fd0941bd6201bcbbf, 63b408face3024feac5f126706a47650ec4750662dd5922f9d097fe8deb0ef16
File name: /home/iot/Desktop/fmk/rootfs/usr/bin/udevstart, Hashes: c127c8f3f9264700662b6444d37ebac4, e03ee6c1a8eebfb14dcc53ed8edba6cde857a834, 207b1a01e57efa28cbfa201cffc0de22fe98b670f9e0514026e2e715a57d115b
File name: /home/iot/Desktop/fmk/rootfs/usr/sbin/fw_upgrade, Hashes: b2fa985015e16a23b6f0a25b7f3f59e7, f56a0ad8b3ad9bccef247a90249346d70be6017f, d46a4c167550dfa03457745e7736d7e3fb8f3efcde68b159a3726a4008bd5804
File name: /home/iot/Desktop/fmk/rootfs/usr/sbin/ddnsd, Hashes: e4a64d300b2de5fffc733c0a3534ddfe, 45b9790e12fb340a5bc7da142d944bb458de2a5f, 8ad8dc77c40fc58c4ab4c83b6a627c10bcaabc70e69bfc894145c7492c3934e8
File name: /home/iot/Desktop/fmk/rootfs/usr/sbin/arpmonitor, Hashes: 7da0790d7ebcdf779ed23957c2d45012, 19089e2c4eb1d286c8a36a0bf49e63abd187c1d9, d52c61e292040aa54f89cafbaef361b378cf514a5a2ab6966c9ea2bad554245a
File name: /home/iot/Desktop/fmk/rootfs/usr/sbin/trigger, Hashes: e930729ca4ef73be0db6e7936f64b1fe, fd9e3d5c4191b5a571a66e142b4d74e30399e9d1, d23521a7cae34f215994b32acc69f0101b0f329bb05cabbe244f911181f950eb
File name: /home/iot/Desktop/fmk/rootfs/usr/sbin/proxyd, Hashes: dbc87f84abb893344dc1752c1038699b, 5d1c26c9c0cc70892eb7d40f270e29d8ffddeaa6, 59f442d96c9378c151198dcab6090dd7d9867b50c3f33ef94994207fdf31e587

含有某些关键字的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
__ __|  _ \   _ \   \  |  \  | ____| |     
| | | | | |\/ | |\/ | __| |
| __ < | | | | | | | |
_| _| \_\\___/ _| _|_| _|_____|_____|

TROMMEL Results File Name: DIR
Directory: /home/iot/Desktop/fmk/rootfs/
There are 1801 total files within the directory.

Results could be vulnerabilities. These results should be verified as false positives may exist.

Non-Plain Text File, Keyword: 'root', File: /home/iot/Desktop/fmk/rootfs/usr/bin/udevinfo, Offset(s) in File:
0xecf, 0x8b21, 0x8b57, 0x8d13, 0x919f, 0x9237, 0xb9a9, 0x173cd, 0x1763b, 0x18179, 0x1e75b
Non-Plain Text File, Keyword: 'passwd', File: /home/iot/Desktop/fmk/rootfs/usr/bin/udevinfo, Offset(s) in File:
0x18573, 0x185eb
Non-Plain Text File, Keyword: 'pwd', File: /home/iot/Desktop/fmk/rootfs/usr/bin/udevinfo, Offset(s) in File:
0x162f7

Firmwalker

工具下载

Firmwalker 是⼀个⽤于扫描固件⽂件系统的简单脚本。它搜索敏感信息,如硬编码的密

码、私钥、证书等,并检查潜在的安全问题。它将在提取或安装的固件⽂件系统中搜索感兴

趣的内容,例如:

  • etc/shadow 和 etc/passwd

  • 列出 etc/ssl ⽬录

  • 搜索 SSL 相关⽂件,例如 .pem、.crt 等。

  • 搜索配置⽂件

  • 寻找脚本⽂件

  • 搜索其他 .bin ⽂件

  • 查找关键字,例如管理员、密码、远程等。

  • 搜索 IoT 设备上使⽤的常⻅ Web 服务器

  • 搜索常⻅的⼆进制⽂件,例如 ssh、tftp、dropbear 等。

  • 搜索 URL、电⼦邮件地址和 IP 地址

  • 使⽤ Shodan CLI 调⽤ Shodan API 的实验性⽀持

使⽤⽅法如下,最后会⾃动⽣成⼀个 firmwalker.txt

1
2
./firmwalker.sh 固件路径
./firmwalker {path to root file system} {path for firmwalker.txt}

分析DIR822的结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
iot@research:~/tools/firmwalker$ ./firmwalker.sh ~/Desktop/fmk/rootfs/   ./ruset.txt
***Firmware Directory***
/home/iot/Desktop/fmk/rootfs/
***Search for password files***
##################################### passwd
##################################### shadow
##################################### *.psk
***Search for Unix-MD5 hashes***
***Search for SSL related files***
##################################### *.crt
##################################### *.pem
/etc/stunnel_cert.pem
***Search for urls***
##################################### urls
http://' *
http://192.168.0.1
http://192.168.0.50
http://ask.oray.cn
http://checkip.dyndns.org
http://checkip.dyndns.org >
http://DDNS:8181, if it does not setting DDNS then show http:
http://dlinkrouter.local
http://<?echo $ipaddr;?>
http://<?echo $ipaddr;?><
http://<?echo $_SERVER[
http://<?echo $_SERVER['HTTP_HOST'];?>
http://my.domain.com:1080
http://pajhome.org.uk
http://point-at-infinity.org

动态分析固件

FirmAE

工具下载

Clone FirmAE

1
git clone --recursive https://github.com/pr0v3rbs/FirmAE

运行download.sh

1
./download.sh

运行 install.sh

1
./install.sh

firmae 的使用 首先执行初始化脚本

1
./init.sh

检查仿真条件 -c 参数

1
sudo ./run.sh -c <brand> <firmware>

firmware 填写固件名称 brand 是开发板名称,可以随便填,不影响正常使用

完成run.sh -c后,可debug固件,这样后面进行 debug 时,等待的时间会大大减少

-a 使用分析模式

1
sudo ./run.sh -a <brand> <firmware>

运行模式,有利于进行网络测试

1
sudo ./run.sh -r <brand> <firmware>

user-mode 调试固件

1
sudo ./run.sh -d <brand> <firmware>

system-mode 调试固件

1
sudo ./run.sh -b <brand> <firmware>

使用 FirmAE 对D-Link路由器设备漏洞进行仿真

第一步,首先检查仿真条件 使用 -c 参数

1
2
3
iot@research:~/tools/FirmAE$ sudo ./run.sh -c DIR822 ~/Desktop/DIR822A1_FW103WWb03.bin 
[sudo] password for iot:
[*] /home/iot/Desktop/DIR822A1_FW103WWb03.bin emulation start!!!

第二步用运行模式启动 使用-r 参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
iot@research:~/tools/FirmAE$ sudo ./run.sh -r DIR822 ~/Desktop/DIR822A1_FW103WWb03.bin 
[*] /home/iot/Desktop/DIR822A1_FW103WWb03.bin emulation start!!!
[*] extract done!!!
[*] get architecture done!!!
[*] /home/iot/Desktop/DIR822A1_FW103WWb03.bin already succeed emulation!!!

[IID] 3
[MODE] run
[+] Network reachable on 192.168.0.1!
[+] Web service on 192.168.0.1
Creating TAP device tap3_0...
Set 'tap3_0' persistent and owned by uid 0
Bringing up TAP device...
Starting emulation of firmware...

firmware-analysis-toolkit

工具下载

Firmware Analysis Toolkit(简称FAT)是一种用于分析嵌入式设备固件的开源工具套件。它旨在帮助安全研究人员和逆向工程师分析和理解嵌入式设备的固件,以发现漏洞、安全问题和潜在的攻击面。以下是Firmware Analysis Toolkit(FAT)的一些主要特点和功能:

  1. 固件提取:FAT允许您从嵌入式设备中提取固件,无论它们是存储在闪存芯片、固态硬盘还是其他媒体上。这是进行后续分析的第一步。
  2. 固件分析:FAT提供了各种分析工具,以帮助您深入研究固件的内部结构和组件。这包括文件系统解析、二进制文件分析、文件提取等。
  3. 字符串提取:该工具还能够从固件中提取字符串,以帮助您识别固件中可能包含的敏感信息或有用的配置参数。
  4. 固件比较:FAT允许您比较不同版本的固件,以查找更改和差异。这对于检测漏洞修复或新功能添加等方面很有用。
  5. 漏洞分析:FAT包括一些用于静态和动态漏洞分析的工具,以帮助您发现潜在的安全问题。
  6. 攻击面评估:该工具套件还提供了一些功能,用于评估嵌入式设备的潜在攻击面,帮助您识别可能的攻击矢量。
  7. 插件系统:FAT支持插件系统,这意味着您可以编写自定义插件来扩展工具的功能,以满足特定的需求。

首先需要安装 firmware-analysis-toolkit,安装完后目录结构如下

qemu

QEMU(Quick Emulator)是一款开源的虚拟化工具和模拟器,用于在不同架构和操作系统之间进行硬件级别的虚拟化和模拟。它具有多种用途,包括虚拟机管理、嵌入式系统开发、操作系统开发和测试等

他支持多平台支持、硬件级模拟、嵌入式开发、虚拟机管理、快照和还原、高度可定制、性能优化

QEMU在虚拟化和模拟领域非常有用,它是一个强大的工具,可用于多种开发、测试和虚拟化场景。它还是一个开源项目,因此可以根据需要进行自定义和扩展

qemu-user

QEMU-User(简称QEMU-U)是QEMU项目的一部分,它提供了一种用户态的CPU模拟,允许在一个架构上运行的二进制程序在不同架构的系统上执行。具体来说,QEMU-User允许将一个CPU架构的二进制程序在另一个CPU架构的系统上运行,而不需要完全模拟整个虚拟机。

如果仅仅只有单个 elf 静态链接文件,那么可以采用局部仿真的方法进行启动 例如 arm 架构的可以直接使用如下命令,然后监听 1234 端口,等待 gdb连接

1
qemu-arm -g 12345 ./elf_fie

这样就可以开启一个 12345 端口的 server,然后可以在另一个终端中使用 gdb 的 target remote 命令进行连接,然后调试

如果是动态链接的二进制文件,可以指定共享库的位置,可以使用qemu-user的-L选项指定当前目录,然后将动态库存放于当目录的 lib 子目录中

1
qemu-arm -L ./ -g 12345 ./elf_fie

ARM 32位:

1
qemu-arm -L /path/to/lib -g 12345 /path/to/your/arm_binary

ARM 64位 (AArch64):

1
qemu-aarch64 -L /path/to/lib -g 12345 /path/to/your/aarch64_binary

MIPS 32位:

1
qemu-mips -L /path/to/lib -g 12345 /path/to/your/mips_binary

MIPS 64位:

1
qemu-mips64 -L /path/to/lib -g 12345 /path/to/your/mips64_binary

在这个命令中:

  • qemu-arm 是用于启动QEMU ARM用户模式的命令。
  • -L /path/to/lib 指定根文件系统的路径,这是需要的,因为用户模式QEMU通常需要一些系统库和资源。
  • -g 12345 指定用于调试的端口号,你可以将这个端口连接到调试器。
  • /path/to/your/arm_binary 是要执行的ARM架构的二进制文件的路径。

请将 /path/to/rootfs/path/to/your/arm_binary 替换为实际的路径和文件名。

qemu-system

QEMU-System是QEMU项目的一部分,它提供了完整的虚拟化和仿真环境,允许用户模拟整个计算机系统,包括CPU、内存、外部设备等。QEMU-System是一种强大的工具,可用于多种用途,包括虚拟化、操作系统开发、嵌入式系统测试和仿真等。

QEMU-System是一个非常强大和灵活的工具,广泛用于虚拟化、操作系统开发、嵌入式系统测试和仿真等领域。它是一个开源项目,因此用户可以根据需要进行自定义和扩展。

如果有文件系统,就可以使用 qemu-system 来进行系统仿真 举个例子来说明各个参数

1
2
3
4
5
6
7
8
9
qemu-system-arm \
-M vexpress-a9 \
-kernel vmlinuz-3.2.0-4-vexpress \
-initrd initrd.img-3.2.0-4-vexpress \
-drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \
-append "root=/dev/mmcblk0p2 console=ttyAMA0" \
-net nic \
-net tap,ifname=tap0,script=no,downscript=no \
-nographic

-kernel 指定内核镜像文件 bzImage 路径 -initrd 设置内核启动的内存文件系统 bzImage: 压缩的linux内核 vmlinux: 未压缩的ELF格式的linux内核,可以使用extract-vmlinux解压bzImage得到 rootfs.img: 根目录的文件系统 dev_helper.ko: 编译好的驱动模块,也是要分析的目标 start.sh: qemu的启动脚本

如果使用 qemu-system 进行调试,就得需要根据架构下载三个文件,比如目标系统是 arm 的 32位 小端序 就需要去如下网站下载以下文件: https://people.debian.org/~aurel32/qemu/

  • vmlinuz-3.2.0-4-vexpress:zImage 格式压缩的 linux kernel
  • initrd.img-3.2.0-4-vexpress:ramdisk 镜像
  • debian_wheezy_armhf_standard.qcow2:文件系统镜像

然后进行网络配置 方便虚拟机和 qemu 进行通信

虚拟机里:

1
2
sudo tunctl -t tap0 -u `whoami`  # 为了与 QEMU 虚拟机通信,添加一个虚拟网卡
sudo ifconfig tap0 10.10.10.1/24 # 为添加的虚拟网卡配置 IP 地址

qemu里:

1
2
ifconfig eth0 10.10.10.2/24
ping -c 3 10.10.10.1 # 测下网

然后 qemu 启动命令

1
2
3
4
5
6
7
8
9
sudo qemu-system-arm \
-M vexpress-a9 \
-kernel vmlinuz-3.2.0-4-vexpress \
-initrd initrd.img-3.2.0-4-vexpress \
-drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \
-append "root=/dev/mmcblk0p2 console=ttyAMA0" \
-net nic \
-net tap,ifname=tap0,script=no,downscript=no \
-nographic

以下是各种架构的调试命令: aarch64:

1
2
3
4
5
6
7
8
9
10
sudo qemu-system-aarch64 \
-m 1024 \
-cpu cortex-a57 \
-M virt \
-nographic \
-smp 4 \
-kernel linux-4.14.221/arch/arm64/boot/Image \
-append "noinintrd sched_debug root=/dev/vda rootfstype=ext4 rw crashkernel=256M loglevel=8" \
-drive if=none,file=linux_rootfs.ext4,id=hd0 \
-device virtio-blk-device,drive=hd0

armhf:

1
2
3
4
5
6
7
8
9
sudo qemu-system-arm \
-M vexpress-a9 \
-kernel vmlinuz-3.2.0-4-vexpress \
-initrd initrd.img-3.2.0-4-vexpress \
-drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \
-append "root=/dev/mmcblk0p2 console=ttyAMA0" \
-net nic \
-net tap,ifname=tap0,script=no,downscript=no \
-nographic

armel:

1
2
3
4
5
6
7
8
9
sudo qemu-system-arm \
-M versatilepb \
-kernel vmlinuz-3.2.0-4-versatile \
-initrd initrd.img-3.2.0-4-versatile \
-hda debian_wheezy_armel_standard.qcow2 \
-append root=/dev/sda1 \
-net nic \
-net tap,ifname=tap0,script=no,downscript=no \
-nographic

mip_32:

1
2
3
4
5
6
7
sudo qemu-system-mips \
-M malta \
-kernel vmlinux-3.2.0-4-4kc-malta \
-hda debian_wheezy_mips_standard.qcow2 \
-append "root=/dev/sda1 console=tty0" \
-net nic -net tap,ifname=tap0,script=no,downscript=no \
-nographic

mipsel_32:

1
2
3
4
5
6
7
sudo qemu-system-mipsel \
-M malta \
-kernel vmlinux-3.2.0-4-4kc-malta \
-hda debian_wheezy_mipsel_standard.qcow2 \
-append "root=/dev/sda1 console=tty0" \
-net nic -net tap,ifname=tap0,script=no,downscript=no \
-nographic

mipsel_64:

1
2
3
4
5
6
7
8
sudo qemu-system-mips64el \
-M malta \
-kernel vmlinux-3.2.0-4-5kc-malta \
-hda debian_wheezy_mipsel_standard.qcow2 \
-append "root=/dev/sda1 console=tty0" \
-net nic \
-net tap,ifname=tap0,script=no,downscript=no \
-nographic

例子: 以思科的路由器为例

固件下载 https://software.cisco.com/download/home/283879340/type/282487380/release/1.2.0.9 https://software.cisco.com/download/home/285026142/type/282465789/release/1.0.3.44

使用 binwalk 进行提取

1
binwalk -Me RV130X_FW_1.0.3.44.bin

得到如下文件系统 [qemu_systemmode7](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/qemu_systemmode7.png)

对漏洞程序 httpd 进行查看 可以发现是 arm 的小端序

1
2
file httpd
httpd: ELF 32-bit LSB executable, ARM, EABI4 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped

qemu 启动命令

1
2
3
4
5
6
7
8
9
sudo qemu-system-arm \
-M vexpress-a9 \
-kernel vmlinuz-3.2.0-4-vexpress \
-initrd initrd.img-3.2.0-4-vexpress \
-drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \
-append "root=/dev/mmcblk0p2 console=ttyAMA0" \
-net nic \
-net tap,ifname=tap0,script=no,downscript=no \
-nographic

目录结构如下 [qemu_systemmode1](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/qemu_systemmode1.png)

[qemu_systemmode2](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/qemu_systemmode2.png)

然后会有个报错

1
2
3
4
5
6
qemu-system-arm: Invalid SD card size: 25 GiB
SD card size has to be a power of 2, e.g. 32 GiB.
You can resize disk images with 'qemu-img resize <imagefile> <new-size>'
(note that this will lose data if you make the image smaller than it currently is).

qemu-img resize debian_wheezy_armhf_standard.qcow2 32G

应该是镜像大小不是 2的n 次方

我们可以手动调整大小

1
qemu-img resize debian_wheezy_armhf_standard.qcow2 32G

[qemu_systemmode3](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/qemu_systemmode3.png)

之后就可以正常运行 qemu [qemu_systemmode4](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/qemu_systemmode4.png)

[qemu_systemmode5](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/qemu_systemmode5.png)

然后这时,为了能让虚拟机和 qemu 通信,我们需要配置一下网络 虚拟机里:

1
2
sudo tunctl -t tap0 -u `whoami`  # 为了与 QEMU 虚拟机通信,添加一个虚拟网卡
sudo ifconfig tap0 10.10.10.1/24 # 为添加的虚拟网卡配置 IP 地址

[qemu_systemmode6](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/qemu_systemmode6.png)

qemu里:

1
2
ifconfig eth0 10.10.10.2/24
ping -c 3 10.10.10.1 # 测下网

传入文件系统

1
sudo scp -r ./squashfs-root root@10.10.10.2:/root/

这里有个坑,如果直接传入 squashfs-root,var 下的软链接会出问题,导致后面 nginx 服务无法正常启动

然后将 squashfs-root 的压缩包传入 qemu 中然后解压

1
2
tar zcvf 1.tar squashfs-root
sudo scp -r 1.tar root@10.10.10.2:/root/

解压然后挂载文件系统

1
2
3
4
5
6
7
#解压
cd /root && tar –xvf 1.tar
# 然后挂载文件系统
mount -o bind /dev ./squashfs-root/dev/
# mount -t sys /sys/ ./squashfs-root/sys/
mount -t proc /proc/ ./squashfs-root/proc/
chroot ./squashfs-root sh

之后就可以正常调试了

firmadyne

FIRMADYNE 是一个自动化且可扩展的系统,用于对基于 Linux 的嵌入式固件进行仿真和动态分析。旨在帮助安全研究人员和逆向工程师研究、测试和分析固件,以识别其中可能存在的漏洞、安全问题和潜在的攻击面。它包括以下组件:

  • 用于检测固件执行的修改内核(MIPS:v2.6、ARM:v4.1、 v3.10 );
  • 用于模拟硬件 NVRAM 外设的用户空间NVRAM 库;
  • 一个提取器,用于从下载的固件中提取文件系统和内核;
  • 一个小型控制台应用程序,用于生成用于调试的附加 shell;
  • 以及一个用于从 42 多个不同供应商下载固件的爬虫。

如何安装 firmadyne? 首先需要按照依赖项

1
sudo apt-get install busybox-static fakeroot git dmsetup kpartx netcat-openbsd nmap python-psycopg2 python3-psycopg2 snmp uml-utilities util-linux vlan

递归克隆

1
git clone --recursive https://github.com/firmadyne/firmadyne.git

还需要安装 binwalk 及其依赖项:

1
2
3
4
git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
sudo ./deps.sh
sudo python ./setup.py install

然后就是数据库的安装和配置

1
2
3
4
sudo apt-get install postgresql
sudo -u postgres createuser -P firmadyne
sudo -u postgres createdb -O firmadyne firmware
sudo -u postgres psql -d firmware < ./firmadyne/database/schema

记得设置密码为 firmadyne [firmadyne1](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne1.png)

[firmadyne2](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne2.png)

然后就是二进制组件的安装

1
cd ./firmadyne; ./download.sh

最后就是 qemu

1
sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils

如何使用呢? 首选我们需要启动数据库

1
service postgresql startbash

可以随便找个固件进行测试 这里使用 netgear 的固件

1
2
3
wget -N --continue \
http://www.downloads.netgear.com/files/GDC/WNAP320/WNAP320%20Firmware%20Version%202.0.3.zip \
-O firmware.bin

[firmadyne3](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne3.png)

然后使用之前安装的工具进行解压

1
python3 ./sources/extractor/extractor.py -b Netgear -sql 127.0.0.1 -np -nk "firmware.bin" images
  • 解析固件firmware.bin创建项目
  • 解压后目录./../images/下会多出一个tar.gz文件,文件名就是这个固件的id
  • -b Netgear指定固件类型为Netgear,可以随便写一个
  • -sql指定数据库位置
  • -np禁止多线程解压
  • -nk不处理内核

[firmadyne4](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne4.png) 可以看到解压成功 [firmadyne5](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne5.png)

images 下多出的 targz [firmadyne6](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne6.png)

然后进行自动化分析固件架构

1
./scripts/getArch.sh ./../images/1.tar.gz

可以看到是 mipseb 的架构 说白了就是对 busybox 进行架构检测

同时也会将结果保存到数据库,方便后面自动分析

然后对固件信息进行收集

1
./scripts/tar2db.py -i 1 -f ./../images/1.tar.gz

[firmadyne7](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne7.png)

同样的,同时也会将结果保存到数据库,方便后面自动分析

然后这时我们需要对固件创建 img

1
./scripts/makeImage.sh 1 [arch]
  • [arch]是可选参数,用于覆盖数据库中的arch记录

然而实际上不指定就会报错 [firmadyne8](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne8.png)

[firmadyne9](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne9.png) [firmadyne10](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne10.png)

最后对固件的网络接口情况进行分析

1
./scripts/inferNetwork.sh 1 mipseb

[firmadyne11](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne11.png) [firmadyne12](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne12.png)

最后进行固件模拟

1
./scratch/1/run.sh

[firmadyne13](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne13.png) [firmadyne14](https://github.com/SecureNexusLab/IoTFirmwareAnalysisGuide/blob/main/images/firmadyne14.png)

可以看到调试成功

emux

工具下载