NESA-Lab/FirmRCA
GitHub: NESA-Lab/FirmRCA
FirmRCA 是一个专为 ARM 嵌入式固件设计的后模糊测试根因分析工具,利用基于事件的高效故障定位技术来解析崩溃原因。
Stars: 13 | Forks: 3
[](https://doi.org/10.5281/zenodo.15623400) [](https://github.com/NESA-Lab/FirmRCA?tab=GPL-3.0-1-ov-file) [](https://www.computer.org/csdl/proceedings-article/sp/2025/223600a002/21B7PVDny6I)
# FirmRCA
嵌入式固件根因分析。
本仓库包含论文 "FirmRCA: Towards Post-Fuzzing Analysis on ARM Embedded Firmware with Efficient Event-based Fault Localization" 的源代码。
## 注意
*在 FirmRCA 的开发过程中,足迹收集和根因分析是在两台独立的服务器上依次进行的。然而,负责足迹收集的服务器发生了硬盘故障。因此,当前仓库的 fuzzware-emulator 所使用的 fuzzware 版本不确定,这可能会给实验结果带来潜在的不稳定性。*
## 如何安装
步骤 1. 克隆仓库。
```
git clone https://github.com/NESA-Lab/FirmRCA
cd ./FirmRCA
```
步骤 2. 安装依赖。
安装 capstone。
```
git clone https://github.com/capstone-engine/capstone.git
cd ./capstone
git reset --hard 622059530f172b1570a424e3f7ef5fda8c00dab0 # not sure if new features in the latest commit affect our code
#Then you should compile and install capstone as system library, following the instructions in capstone.
#For example, on *nix:
sudo ./make.sh
sudo ./make.sh install
```
设置 python 环境。我们使用 `uv` 来管理环境。如果尚未安装,请先运行 `wget -qO- https://astral.sh/uv/install.sh | sh`。
```
cd /FirmRCA
uv sync
```
步骤 3. (可选)编译 capnproto 库,如果你想修改追踪数据。
```
curl -O https://capnproto.org/capnproto-c++-1.0.1.tar.gz
tar zxf capnproto-c++-1.0.1.tar.gz
cd ./capnproto-c++-1.0.1
./configure
make -j$(nproc) check
sudo make install
```
```
git clone https://gitlab.com/dkml/ext/c-capnproto.git
cd ./c-capnproto
sudo apt install ninja-build
cmake --preset=ci-linux_x86_64
cmake --build --preset=ci-tests
```
编译库。
```
cd ./test_c_capnproto
# 在运行 capnp compile 之前,如有需要可以修改 bintrace.capnp
capnp compile -o ./c-capnproto/build/capnpc-c bintrace.capnp
gcc *.c -I./ -shared -fPIC -o libcapnproto.so
cp ./libcapnproto.so ../src/lib
```
步骤 4. 编译项目二进制文件
你可以修改 `src/src/Makefile.am` 中的 `bin_PROGRAMS` 变量以进行不同的设置。
* reversenolog: 执行完整的 FirmRCA,不包含额外的日志信息。
* reverselog: 执行完整的 FirmRCA,包含额外的日志信息。这将生成一个巨大的日志文件(可能有数百 MB)。
* ablation1: 执行不包含冗余循环污点抑制策略的 FirmRCA。
* ablation2: 执行不包含历史写入污点优先级排序策略的 FirmRCA。
* ablation3: 执行不包含任何启发式可疑度评分策略的 FirmRCA。
```
cd ./src
chmod +x ./autogen.sh
./autogen.sh
./configure
cd src
make
```
如果在运行 `./configure` 时出现问题,请确保这些编译文件使用 LF 而不是 CRLF。你也可以查看 [POMP](https://github.com/junxzm1990/pomp) 以获取安装参考。
步骤 5. 运行 FirmRCA。
我们使用 `main.py` 脚本来管理 FirmRCA 的执行。在设置好数据集(在下一节中)之后,你可以简单地运行 `uv run main.py` 来查看示例,或者运行 `uv run main.py --name=` 来测试特定的测试用例。
结果将保存在 `testsuites//execution--.log` 中。
对于高级用法,你可以查看源代码。
## 数据集
我们在 `testsuites/testsuites-demo.zip` 文件中准备了 3 个测试套件作为演示。你可以直接在 `testsuites/` 下使用 `cd testsuites && unzip testsuites-demo.zip` 解压此文件。此外,完整的数据集可以从 [10.5281/zenodo.15623399](https://doi.org/10.5281/zenodo.15623399) 下载。
如果你想生成更多的测试用例,你可以像这样准备你的文件:
```
FirmRCA/
├── testsuites
│ ├──
│ │ ├── firmware.bin
│ ├──
│ │ ├── firmware.bin
│ ├──
│ │ ├── firmware.bin
```
`` 应该与 `config.yml` 中的 `name` 键的值相同。你还应该指定加载二进制文件的 `bin_load_addr`。
然后请参考 [fuzzware-fuzzer](https://github.com/fuzzware-fuzzer/fuzzware-emulator) 来设置环境。请不要克隆他们的仓库,因为 unicorn 版本可能不同。请使用本仓库中的 fuzzware-emulator。
然后,运行 `uv run dataset.py` 来生成你自己的数据集。
标签:ARM固件, Capstone, Event-based Tracing, FirmRCA, Fuzzing, Fuzzware, IEEE S&P, Root Cause Analysis, 二进制分析, 云安全运维, 云资产清单, 后模糊测试分析, 固件分析, 基于事件的追踪, 客户端加密, 嵌入式安全, 故障定位, 根因分析, 物联网安全, 逆向工具, 逆向工程