NESA-Lab/FirmRCA

GitHub: NESA-Lab/FirmRCA

FirmRCA 是一个专为 ARM 嵌入式固件设计的后模糊测试根因分析工具,利用基于事件的高效故障定位技术来解析崩溃原因。

Stars: 13 | Forks: 3

[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.15623400.svg)](https://doi.org/10.5281/zenodo.15623400) [![DOI](https://img.shields.io/github/license/NESA-Lab/FirmRCA.svg)](https://github.com/NESA-Lab/FirmRCA?tab=GPL-3.0-1-ov-file) [![Static Badge](https://img.shields.io/badge/IEEE%20S%26P-10.1109%2FSP61157.2025.00002-green)](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, 二进制分析, 云安全运维, 云资产清单, 后模糊测试分析, 固件分析, 基于事件的追踪, 客户端加密, 嵌入式安全, 故障定位, 根因分析, 物联网安全, 逆向工具, 逆向工程