工具
FwAnalyzer 固件文件系统规则检查工具
针对固件中文件系统镜像的规则检查工具:读取 ext2/3/4、FAT/VFAT、SquashFS 和 UBIFS 镜像、cpio 归档或目录,并以 JSON 报告列出所有违反 TOML 配置规则的文件。规则涵盖 SUID 与全局可写文件、允许的属主、SELinux 标签与 Linux capabilities、单个文件的元数据、内容正则、SHA-256 摘要、JSON 字段,以及外部脚本(例如附带的 checksec 包装脚本);还能提取版本字符串等数值,并把文件树或指定文件与上一次运行的结果比较。Cruise 将其定位为固件安全检查流程的一环,check.py 搭配 Android OTA 解包脚本可对固件包中的每个镜像逐一运行检查。
使用条件与局限
- 审阅时最新版本为 1.4.4,发布于 2022-10-24,未附带二进制文件;1.4.1 至 1.4.3 版附有预编译的 Linux 版 fwanalyzer。所审阅的 master 提交日期为 2023-10-08,仅在该版本之后修正拼写错误,也是最新提交;仓库未归档,Makefile 中的 VERSION 仍为 1.4.1。
- 需用 Go 从源码构建(go.mod 声明 Go 1.13,Makefile 默认 GOOS 为 linux),执行 make deps 和 make 后得到 build/fwanalyzer。各文件系统后端都调用外部程序:ext 镜像用 e2tools 的 e2ls 和 e2cp,FAT 用 mtools 的 mdir 和 mcopy,另需 unsquashfs、ubi_reader 的 ubireader_list_files 以及 cpio。读取 SELinux 与 capability 信息需要作者打过补丁的 e2tools 和 squashfs-tools 分支,处理 ext 中的符号链接需要 e2tools 的 link_support 分支;Dockerfile 在 golang:1.13 镜像上列出了完整依赖。
- 输入为使用者已有的文件系统镜像或已解包目录;FwAnalyzer 本身不解包固件包。check.py 需要一个把配置映射到镜像的解包脚本,附带的 Android OTA 解包脚本依赖独立的 extract_android_ota_payload 与 mkbootimg_tools 项目。检查结果完全取决于使用者的配置:devices 目录提供 Android user 构建、Android 属性和通用 Linux 根文件系统的示例规则,报告列出的是违反规则的文件,而非经过评估的漏洞。
- make test 运行 Go 单元测试,集成测试目标运行为 Python 2 编写的 test/test.py,所用夹具均位于 test/ 中:小型 ext2、SquashFS、UBIFS、VFAT 和 cpio 镜像,ARM32、ARM64 与 x86-64 的 hello-world ELF 构建,以及预编译的 e2cp 和 unsquashfs 辅助程序;make testsetup 会用到 sudo setcap。CircleCI 在 Docker 镜像中构建并测试,GitHub 工作流仅用 golangci-lint v1.29 做代码检查。
- 采用 Apache-2.0 许可,版权属 Cruise LLC;外部文件系统工具各自适用其许可。所审来源未提及 REA 的使用,本收录未构建或运行该工具,也未分析任何镜像。
关于此条目
- 类型
- 工具
- 类别
- 固件工具
- 关联
- 基础工具
- 目标
- 固件
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- Readme.md GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- Building.md GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- Changelog.md GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- Checksec.md GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- Dockerfile GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- Makefile GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- go.mod GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- devices/Readme.md GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- devices/android/Readme.md GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- pkg/extparser/extparser.go#L40-L43 GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- test GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- .circleci/config.yml GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- LICENSE GitHub · cruise-automation/fwanalyzer · 修订 a0db450
- https://github.com/cruise-automation/fwanalyzer/releases/tag/1.4.4