L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Données et recherche · SKILL.md

performing-firmware-malware-analysis

performing-firmware-malware-analysis

分析固件镜像中嵌入的恶意软件、后门和未授权修改,目标包括路由器、IoT 设备、UEFI/BIOS 和嵌入式系统。涵盖固件提取、文件系统分析、二进制逆向工程和 Bootkit 检测。适用于固件安全 分析、IoT 恶意软件调查、UEFI Rootkit 检测或嵌入式设备入侵评估等请求场景。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: performing-firmware-malware-analysis description: > 分析固件镜像中嵌入的恶意软件、后门和未授权修改,目标包括路由器、IoT 设备、UEFI/BIOS 和嵌入式系统。涵盖固件提取、文件系统分析、二进制逆向工程和 Bootkit 检测。适用于固件安全 分析、IoT 恶意软件调查、UEFI Rootkit 检测或嵌入式设备入侵评估等请求场景。 domain: cybersecurity subdomain: malware-analysis tags: [malware, firmware, IoT, UEFI, embedded-security] version: 1.0.0 author: mahipal license: Apache-2.0

执行固件恶意软件分析

适用场景

  • 受入侵的 IoT 设备或路由器需要固件分析以识别植入的后门
  • 调查在操作系统重装后仍能存活的 UEFI/BIOS Rootkit
  • 分析固件更新中是否存在供应链攻击或恶意修改
  • 从 IoT 设备固件镜像中提取并检查嵌入的 Linux 文件系统
  • 在疑似硬件或固件级别入侵后验证固件完整性

不适用于标准操作系统恶意软件分析;对常规系统上的操作系统级恶意软件,应使用 PE/ELF 分析工具。

前置条件

  • binwalk,用于固件镜像分析和提取(pip install binwalk)
  • Ghidra,带 ARM/MIPS 架构支持,用于嵌入式二进制逆向工程
  • UEFI Tool(UEFITool),用于 UEFI 固件解析和分析
  • 固件分析工具包(FAT)或 EMBA,用于自动化固件分析
  • QEMU,用于模拟提取的固件文件系统
  • ARM、MIPS 和其他嵌入式架构的交叉编译工具链

工作流程

步骤 1:提取并识别固件组件

分析固件镜像结构并提取文件系统:

# 识别嵌入的文件系统和压缩数据
binwalk firmware.bin

# 提取所有识别到的组件
binwalk -e firmware.bin

# 使用签名扫描进行递归提取
binwalk -eM firmware.bin

# 输出通常包含:
# - 引导加载程序(U-Boot、GRUB、自定义)
# - 内核镜像(Linux、RTOS)
# - 根文件系统(SquashFS、JFFS2、CramFS、ext4)
# - 配置数据
# - 数字签名或校验和

# 熵分析以发现加密或压缩区域
binwalk -E firmware.bin

# 识别特定文件系统类型
file _firmware.bin.extracted/*

# 处理 SquashFS 文件系统
unsquashfs _firmware.bin.extracted/squashfs-root.img
ls squashfs-root/

步骤 2:分析提取的文件系统

在固件文件系统中搜索恶意修改:

# 目录结构分析
find squashfs-root/ -type f | head -50

# 搜索可疑文件
find squashfs-root/ -name "*.sh" -exec ls -la {} \;
find squashfs-root/ -perm -4000 -type f  # SUID 二进制文件
find squashfs-root/ -name "*.so" -newer squashfs-root/bin/busybox  # 被修改的库

# 检查启动脚本中的后门
cat squashfs-root/etc/init.d/rcS
cat squashfs-root/etc/inittab
ls -la squashfs-root/etc/rc.d/

# 搜索硬编码凭据
grep -rn "password\|passwd\|secret\|key\|token" squashfs-root/etc/ 2>/dev/null
grep -rn "root:" squashfs-root/etc/shadow 2>/dev/null

# 检查未授权 SSH 密钥
find squashfs-root/ -name "authorized_keys" -exec cat {} \;

# 网络配置后门
cat squashfs-root/etc/hosts
grep -rn "iptables\|nc\|netcat\|ncat" squashfs-root/etc/ squashfs-root/usr/bin/

# 检查 cron 中的反弹 Shell
find squashfs-root/ -name "crontab" -o -name "cron*" | xargs cat 2>/dev/null

# 识别所有 ELF 二进制文件进行分析
find squashfs-root/ -type f -exec file {} \; | grep ELF

步骤 3:逆向工程可疑二进制文件

分析可能是后门的提取二进制文件:

# 识别架构和格式
file squashfs-root/usr/bin/suspicious_binary

# 提取字符串以发现 IoC
strings squashfs-root/usr/bin/suspicious_binary | grep -iE "http|ip|port|shell|connect|exec"

# 与已知固件二进制文件交叉对比
# 将 SHA-256 哈希与已知正常固件比较
sha256sum squashfs-root/usr/bin/* > current_hashes.txt
# 对比基线:diff baseline_hashes.txt current_hashes.txt

# 导入 Ghidra 进行反汇编(选择正确的架构)
# ARM:ARM/AARCH64(大多数 IoT 设备使用小端序)
# MIPS:MIPS/MIPS64(大端序或小端序,取决于设备)
# x86:用于 UEFI 模块

# 使用 radare2 进行快速分类
r2 -A squashfs-root/usr/bin/suspicious_binary
# 命令:afl(函数列表)、pdf @main(反汇编 main)、iz(字符串)

步骤 4:UEFI/BIOS 固件分析

分析系统固件中的 Bootkit 和植入物:

# 使用 UEFITool 提取 UEFI 固件卷
# GUI:UEFITool -> 文件 -> 打开 -> 选择 firmware.rom
# CLI:UEFIExtract firmware.rom

# 使用 chipsec 分析 UEFI 固件(需要硬件访问)
python chipsec_main.py -m common.bios_wp     # BIOS 写保护
python chipsec_main.py -m common.spi_lock     # SPI Flash 锁
python chipsec_main.py -m common.secureboot   # 安全启动状态
python chipsec_main.py -m common.uefi.s3bootscript  # S3 恢复脚本

# 从实时系统转储 UEFI 固件
python chipsec_util.py spi dump firmware_dump.rom

# 与已知正常固件比较
sha256sum firmware_dump.rom
# 与厂商提供的固件哈希比较

# 使用 YARA 扫描已知 UEFI 恶意软件签名
yara -r uefi_malware_rules.yar firmware_dump.rom
已知 UEFI 恶意软件家族:
━━━━━━━━━━━━━━━━━━━━━━━━━━
LoJax:         首个野外发现的 UEFI Rootkit(APT28/Fancy Bear)
               修改 SPI Flash 以投放持久化代理
MosaicRegressor:模块化 UEFI 框架,投放多种载荷
CosmicStrand:  UEFI 固件 Rootkit,在启动期间修改内核
BlackLotus:    UEFI Bootkit,可绕过 Windows 11 安全启动
ESPecter:      ESP(EFI 系统分区)Bootkit,修改启动管理器
MoonBounce:    SPI Flash 植入物,修改 CORE_DXE 模块
FinSpy UEFI:   具有 UEFI 持久化的监控软件

步骤 5:模拟固件进行动态分析

在模拟环境中运行提取的固件:

# 使用 QEMU 模拟基于 ARM 的 IoT 固件
# 挂载提取的文件系统
sudo mount -o loop squashfs-root.img /mnt/firmware

# 使用 QEMU 用户态模拟 chroot 进入固件
sudo cp /usr/bin/qemu-arm-static /mnt/firmware/usr/bin/
sudo chroot /mnt/firmware /bin/sh

# 或使用 firmadyne 进行自动化固件模拟
python3 fat.py firmware.bin

# 在模拟固件中进行网络服务分析
# 扫描开放端口和服务
nmap -sV localhost -p 1-65535

# 监控模拟固件的网络流量
tcpdump -i tap0 -w firmware_traffic.pcap

步骤 6:记录固件分析结果

整理完整的固件分析发现:

分析文档应涵盖:
- 固件镜像元数据(厂商、型号、版本、构建日期)
- 提取结果(文件系统类型、内核版本、架构)
- 与已知正常基线相比的修改文件
- 发现的后门二进制文件及逆向工程发现
- 硬编码凭据和未授权访问机制
- 网络服务及其安全状态
- UEFI/BIOS 完整性验证结果
- 提取的 IoC(IP、域名、文件哈希、SSH 密钥)
- 修复建议(重刷固件、更换设备、升级)

核心概念

术语定义
固件永久存储在设备硬件(Flash 存储器、EEPROM)中的软件,控制设备的底层操作和启动过程
UEFI(统一可扩展固件接口)取代传统 BIOS 的现代系统固件;提供启动服务、运行时服务和模块化驱动架构
SPI Flash存储 UEFI/BIOS 固件的串行外设接口 Flash 存储芯片;可被读取和修改以实现持久化
安全启动UEFI 功能,验证启动组件的数字签名以防止启动期间未授权代码的执行
SquashFS只读压缩文件系统,常用于嵌入式 Linux 固件以实现高效存储
Bootkit感染启动过程(MBR、VBR、UEFI)以在操作系统之前加载并规避操作系统级安全的恶意软件
固件模拟在虚拟环境(QEMU、firmadyne)中运行提取的固件以分析行为,无需物理硬件

工具与系统

  • binwalk:固件分析工具,用于扫描、提取和分析固件镜像中嵌入的文件系统和压缩数据
  • UEFITool:开源 UEFI 固件镜像解析器和提取器,用于分析 UEFI 卷、模块和驱动
  • chipsec:Intel 的开源平台安全评估框架,包括 SPI Flash、安全启动和 UEFI 分析
  • firmadyne:面向基于 Linux 的嵌入式设备的自动化固件分析和模拟平台
  • Ghidra:NSA 的逆向工程工具,支持 ARM、MIPS 和其他嵌入式架构,用于固件二进制分析

常见场景

场景:调查具有持久后门的受攻陷路由器

背景:某网络路由器即使在恢复出厂设置后仍持续出现可疑行为(意外的 DNS 解析、向未知 IP 发送流量)。怀疑存在固件级别的入侵。

方法:

  1. 使用 JTAG/UART 调试接口或厂商管理工具从路由器转储固件
  2. 使用 binwalk 提取文件系统,识别 Linux 发行版和内核版本
  3. 将文件哈希与厂商提供的已知正常固件镜像进行比较
  4. 在启动脚本(rcS、inittab、crontab)中搜索后门条目
  5. 使用 Ghidra(ARM/MIPS 架构)分析任何被修改或新增的二进制文件
  6. 检查硬编码凭据、未授权 SSH 密钥和反弹 Shell 脚本
  7. 模拟固件以观察网络行为并识别 C2 通信

注意事项:

  • 不要从厂商网站下载固件来分析(下载的是干净版本,而非受攻陷的版本)
  • 不要忽视可能钩挂系统函数的被修改共享库(.so 文件)
  • 不要遗漏存储在主文件系统之外的固件修改(引导加载程序、配置分区)
  • 不要忘记同时检查主固件分区和备用固件分区(某些设备有双 Bank Flash)

输出格式

固件恶意软件分析报告
===================================
设备:            NetGear R7000 路由器
固件版本:        V1.0.11.116(已被修改)
架构:            ARM(小端序)
文件系统:        SquashFS(Linux 3.4.103)
转储方式:        UART 调试控制台

完整性检查
厂商固件哈希:    aaa111bbb222...(干净的 V1.0.11.116)
被分析固件哈希:  ccc333ddd444...(不匹配)
被修改文件:      与厂商基线相比,14 个文件存在差异

后门发现
[!] /usr/bin/httpd_backdoor(新二进制文件,不在厂商固件中)
    架构:ARM 32 位
    功能:向 185.220.101[.]42:4444 发起反弹 Shell
    持久化:已添加到 /etc/init.d/rcS

[!] /etc/shadow 已被修改
    root 密码被更改为已知哈希
    新增 UID 0 的用户 'admin2'

[!] /etc/crontab 已被修改
    添加:*/5 * * * * /usr/bin/httpd_backdoor

[!] /root/.ssh/authorized_keys(新文件)
    包含攻击者的 SSH 公钥

提取的 IoC
C2 IP:           185.220.101[.]42
C2 端口:         4444
SSH 密钥:        ssh-rsa AAAA... attacker@control
后门哈希:        eee555fff666...

修复措施
1. 通过 TFTP 恢复模式刷入干净的厂商固件
2. 更改所有设备凭据
3. 升级到最新固件版本
4. 如可用,启用固件完整性检查
5. 监控是否存在再次入侵的指标
Skills enregistrées