q1sh101/bythos
GitHub: q1sh101/bythos
一个零依赖的 C11 单二进制 Linux 固件信任态势审计工具,只读方式汇总 UEFI、Secure Boot、TPM、IOMMU 等十余个子系统的安全状态并输出结构化报告。
Stars: 0 | Forks: 0
# bythos
   
适用于 Linux 的只读固件信任态势审计工具。单个 C11 二进制文件,无
daemon,零第三方依赖。
bythos 不进行强化。它只负责读取、分类、打印、退出。
## 概览
```
+-----------------------------------------------------------------------------------------+
| BYTHOS 0.1.0 ~75 checks · 10 subgroups |
+----------------+-----------------+-----------------+-----------------+------------------+
| Trust layer | hardware | firmware | Secure Boot | boot chain |
+================+=================+=================+=================+==================+
| | TPM | BIOS_CNTL | db, dbx | shim |
| sample | IOMMU | Intel ME | MOK, PK | SBAT |
| checks | Thunderbolt | Intel DCI | SbatLevel | BootOrder |
| | DMA | AMD PSP | CA breadth | BootNext |
| | ... | ... | ... | ... |
+----------------+-----------------+-----------------+-----------------+------------------+
+-------------------+---------------------------------------------------------------------+
| Subgroup | Sample checks |
+===================+=====================================================================+
| EFI | EFI boot mode, ESRT entries |
| Secure Boot | state, setup mode, db/dbx, SBAT, MOK, trust breadth, efivarfs |
| Boot chain | shim signature, SBAT revocations, BootOrder, EFI one-shot boot, ... |
| ESP | ownership, filesystem type, fallback boot binary, capsules |
| TPM | TPM 2.0, DA lockout, PCR 0/7, event-log CRTM signal |
| LUKS | encrypted volumes, systemd TPM2 token, PCR mask strength |
| Platform firmware | BIOS_CNTL, Intel ME, Intel DCI, AMD PSP, chipsec availability |
| Platform DMA | IOMMU groups, IOMMU DMA posture, Thunderbolt DMA protection |
| CPU | microcode, memory encryption, CPU vulnerability scan |
| fwupd | service state, LVFS, inventory, updates, history, HSI signals |
+-------------------+---------------------------------------------------------------------+
+-----------------------------------------------------------------------------------------+
| Reads: sysfs . efivarfs . /proc . PCI config . MSRs . trusted CLI helpers |
| Outputs: plain colored text | --json (CI / dashboards / posture diffs) |
| Exit: 0 = no FAIL | 1 = FAIL | 2 = usage error |
+-----------------------------------------------------------------------------------------+
```
## 简单示例
终端中的纯文本输出带有颜色;`--json` 为 CI 和态势差异比对输出相同的树状结构。
```
$ sudo bythos
[bythos] firmware trust posture
warn: 55 ok 8 warn 0 fail 12 skip
secure boot:
ok state Secure Boot enabled
ok SBAT policy level SbatLevel: sbat,1,2024010100
warn trust breadth Microsoft 3rd Party UEFI CA in db
tpm:
ok PCR 0 non-zero; firmware measured at boot
ok PCR 7 non-zero; Secure Boot state measured
platform firmware:
ok Intel BIOS write protection BLE and SMM_BWP set; BIOS region protected
ok Intel DCI DCI disabled and locked
fwupd:
ok HSI: Boot Guard enabled and verified
ok HSI: pre-boot DMA protection active
```
## 快速开始
```
git clone https://github.com/q1sh101/bythos
cd bythos && make && sudo make install
sudo bythos # requires root for full coverage
bythos --json # machine-readable output
bythos --help
bythos --version
```
安装路径可以通过 `prefix`、`bindir`、`mandir`、`DESTDIR` 进行覆盖。
使用 `sudo make uninstall` 卸载。
## 工作原理
**bythos 不打开 socket,不写入文件,不运行 shell,且忽略 `$PATH`。**
辅助程序通过 `fork` + `execvp` 并基于编译时的 PATH 启动;其
输出通过具有 10 秒超时限制的管道进行捕获,并由手写的 C 解析器进行解析。
PE/COFF 解析从已安装的 shim/grub 二进制文件中提取 `.sbat`。JSON
输出会对控制字符和无效 UTF-8 进行转义。每个子组具有固定的
结果容量;溢出将在两种输出中被标记为截断。
## 可选辅助程序
bythos 无需额外软件包即可读取内核暴露的状态。辅助程序可扩展
覆盖范围:
| 辅助程序 | 扩展的覆盖范围 |
|--------------|----------------------------------------------------|
| `fwupdmgr` | HSI 信号、固件清单、更新状态 |
| `mokutil` | Secure Boot 状态、MOK 注册、db/dbx、SBAT |
| `sbctl` | Secure Boot 所有者 GUID 和厂商密钥状态 |
| `tpm2-tools` | TPM PCR 读取和字典攻击锁定策略 |
| `dmidecode` | SMBIOS 固件密码状态 |
范围更窄的探测也会使用 `cryptsetup`、`lsblk`、`pesign`、`sha256sum` 和
`systemctl`。`chipsec` 和 `spectre-meltdown-checker` 仅被检测其可用性。
缺失的辅助程序会将其检查结果降级为 `skip`,而绝不会是 `fail`。
## 输出状态
| 状态 | 含义 |
|--------|----------------------------------------------|
| `ok` | 观察到了预期的态势 |
| `warn` | 较弱的态势、过时的状态或较低的风险 |
| `fail` | 直接的态势衰退 |
| `skip` | 在本次运行中不适用或无法观察 |
`skip` 并不是隐性的通过。它意味着 bythos 无法进行该项观察:
硬件缺失、辅助程序缺失、字段缺失、需要 root 权限、厂商不匹配、
或输出无法解析,以及其他特定类型的原因(完整列表见 `man bythos`)。
纯文本输出使用小写标签。`--json` 将其大写(`OK`、`WARN`、
`FAIL`、`SKIP`),并为每行添加一个 `skip_reason` 字段。退出代码
列在顶部的概述中。
## 比较
| 工具 | 层级 | 最擅长 | 占用资源 |
|------------|-----------------------------|---------------------------------|-----------------------|
| **bythos** | UEFI / TPM / DMA / EFI 变量 | 固件信任态势报告 | 只读,用户态 |
| lynis | OS 配置 | 合规性强化扫描 | 只读,用户/root |
| aide | 文件系统哈希 | 部署后的完整性绊线 | 写入哈希数据库,root |
| chkrootkit | 已知的恶意特征 | 用户态 rootkit 检测 | 只读,root |
| fwupdmgr | LVFS + HSI 子集 | 固件更新和 HSI 报告 | 写入固件,root |
| fwts | ACPI / SMBIOS / UEFI 测试 | 固件合规性测试套件 | 只读,root |
| chipsec | SMI / SMM / SPI flash | 深层固件研究审计 | 内核模块,root |
chipsec 挖掘得更深,并且需要更低级别的访问权限。bythos 则留在用户态,
读取 Linux 已经暴露的信息。
## 系统要求
**运行时**:
- Linux 5.x 或更新版本
- 推荐 UEFI 主机
- x86_64 为主;ARM64 的覆盖范围较窄
**构建**:
- glibc 或 musl
- GNU Make 和 C11 编译器
在传统 BIOS 主机以及容器内部,大多数固件路径是
不可用的;bythos 仍会完成运行,将缺失的检查标记为 `skip`,并将
缺失的 EFI runtime 标记为 `warn`。
## 限制
- Pre-OS 固件内部状态(SMI / SMM / SPI flash)未被 Linux 暴露,对 bythos 不可见。
- 仅限版本和态势 - 不是 CVE 扫描器。
- 哈希比对确认文件身份,而非 Authenticode 链的有效性。
- BMC / IPMI / iLO / iDRAC 管理平面超出范围。
- PCR 读取是本地观察;远程证明超出范围。
- ACPI / SMBIOS 结构验证超出范围(参见 `fwts`)。
- 用户态安全(进程、内存、网络)超出范围。
## 构建和测试
```
make # build bythos
make ci-test # unit suite
make smoke # end-to-end smoke test
make asan # ASan + UBSan unit suite
```
默认构建使用 `-Wall -Wextra -Wpedantic -Werror`、
`-fstack-protector-strong`、`_FORTIFY_SOURCE=2`、PIE、RELRO、now 绑定和
不可执行堆栈链接器标志。ASan 和 UBSan 在单元测试套件
和实际运行的二进制文件上均无报错。
## 贡献
发现了 Bug 或有功能请求?请在
[github.com/q1sh101/bythos](https://github.com/q1sh101/bythos/issues) 提交 issue。
仅接受人工编写的 PR;不接受 LLM 生成的提交。
为关心固件信任的工程师而构建。
**作者** Giorgi Kishmareia · [q1sh101](https://github.com/q1sh101)
标签:BIOS, C11, DMA, EFI, Homebrew安装, HSI, IOMMU, MOK, SBAT, Secure Boot, SHIM, Thunderbolt, TPM, UEFI, 加密, 可信计算, 固件安全, 子域名枚举, 安全合规, 安全启动, 安全基线, 审计工具, 客户端加密, 引导链, 教学环境, 文档安全, 杀软绕过, 漏洞扫描器, 硬件安全, 系统安全, 网络代理, 网络安全, 隐私保护, 零依赖