固件分析与比较工具
固件分析可用于实现多种有趣的目标,其中最主要的是识别黑盒固件的功能、组件和潜在安全弱点。
固件分析与比较工具(FACT)旨在尽可能自动化手动固件分析工作。FACT 结合了一组不断扩展的强大分析功能,创建了一个统一界面,将用户从任意固件样本带到完成的分析结果。FACT 分析的一些关键特性是,结果:
此外,FACT 提供了多种导航和可视化分析结果以及固件内容的方式,以便轻松访问。主要的 FACT 界面是一个基于 html/js/css 的 Web 界面,可以本地托管或通过网络共享。此外,FACT 还提供了一个类似 REST 的 HTTP API,可以通过集成的 SwaggerUI 进行探索。Web 界面的一些关键特性包括:
虽然 FACT 作为研究原型维护,但该项目经过充分测试,包含基础文档,并提供多种生产级功能。我们始终欢迎反馈和功能请求。
更多细节和一些截图可以在我们的项目页面找到。
FACT 设计为多进程应用程序,内核和 RAM 越多越好。
| 最低配置 | 推荐配置 |
|---|---|
| 4 核 | 16 核 |
| 8 GB 内存 | 64 GB 内存 |
| 10 GB 磁盘空间 | 10* GB 磁盘空间 |
[!NOTE] 设置 FACT 代码、容器和二进制文件大约需要 10 GB 空间。解压文件和存储分析结果需要额外空间,可位于单独分区或驱动器。
原则上可以在任何 Linux 发行版上安装 FACT,但安装程序仅限于:
在较旧发行版(例如 Debian 11 “Bullseye” 或 Ubuntu 20.04 “Focal”)上安装可能仍然有效,但由于这些发行版已到达生命周期,不被视为稳定。
FACT 需要 Python 3.10–3.14(应已在所有受支持发行版中默认安装)。
设置过程基本自动化,封装在单个脚本中。不过,某些功能可以专门选择。有关如何安装 FACT 的详细指南,请参阅 INSTALL.md。
[!IMPORTANT] 请注意,虽然大量使用容器,FACT 仍然包含许多依赖项(并且没有提供卸载)。如果您希望保持系统清洁,可以尝试以下提供的设置选项。
我们每月提供 master 分支的即用型 Vagrant box。Vagrant 是一种简单便捷的方式,无需在机器上安装即可开始使用 FACT。只需设置 Vagrant 并将我们提供的 box 导入 VirtualBox。我们的 box 可以在 vagrantup 网站 找到!
请查看我们的教程,了解如何开始使用 FACT 和 Vagrant。
也存在 Docker 化版本,但目前未维护。(有关详细信息,请参阅 FACT_docker 仓库。)
您可以通过执行 start_fact.py 脚本来启动 FACT。该脚本会自动检测所有已安装的组件。
src/start_fact.py
之后,可以通过 http://localhost:5000(默认)或 https://localhost(如果使用 nginx 安装 FACT)访问 FACT。
您可以通过按下 Ctrl + c 或向 start_fact.py 脚本发送 SIGTERM 来关闭系统。
[!CAUTION] FACT 不打算用作公共互联网服务。Web 界面不是加固的应用程序。我们通过应用 SecDevOps 尽力限制安全问题,但 FACT 仍可能存在漏洞。如果计划在非完全可信网络上托管 FACT,请确保重置 FACT 配置中的所有密码。
[!TIP] 有关如何使用 FACT 的更多文档,请参阅我们的 wiki 页面。
您也可以查看我们的 Sphinx 文档。
关于 FACT 是什么以及如何工作的信息,也可以在 docs 文件夹的幻灯片中找到。
FACT 提供 REST API。更多信息可在 wiki 页面中找到。
FACT 提供可选的基于认证、角色和用户管理。更多信息可在 wiki 页面中找到。
贡献的最简单方式是编写自己的插件。我们的开发者手册可在 GitHub 上的 wiki 中找到。
当前可用的额外插件:
脚本 src/firmware_import_export.py 可用于导出解压后的文件和分析结果,并将其导入到另一个 FACT 实例。数据存储为 ZIP 存档,这也是脚本在导入时期望的格式。要导出已分析固件映像的文件和分析数据,请运行:
python3 firmware_import_export.py export FW_UID [FW_UID_2 ...] [-o OUTPUT_DIR]
[!NOTE] 导出的存档可能占用大量磁盘空间。没有固定比例,但可能超过原始固件大小的 2 到 10 倍。
之后,您可以使用以下命令导入导出的文件:
python3 firmware_import_export.py import FW.zip [FW_2.zip ...]
我们很荣幸在多次 BlackHat Arsenal 会议中展示 FACT。
感谢 @botlabsDev,他最初提供了 Vagrantfile,不过现已废弃。
该项目部分由 德国联邦信息安全办公室(BSI) 和其他机构资助。
固件分析与比较工具 (FACT)
版权所有 (C) 2015-2026 Fraunhofer FKIE
本程序是自由软件:您可以重新分发和/或修改它,前提是遵守自由软件基金会发布的 GNU 通用公共许可证,无论是许可证第 3 版,还是(按您的选择)任何更高版本。 本程序的分发旨在提供有用性,但不作任何保证;甚至不包括适销性或特定用途适用性的隐含保证。 有关详细信息,请参见 GNU 通用公共许可证。 您应该已随本程序收到一份 GNU 通用公共许可证副本。如果没有,请访问 http://www.gnu.org/licenses/。
某些插件可能具有不同许可证。如果是这样,插件文件夹中会提供许可证文件。