q1sh101/bythos

GitHub: q1sh101/bythos

一个零依赖的 C11 单二进制 Linux 固件信任态势审计工具,只读方式汇总 UEFI、Secure Boot、TPM、IOMMU 等十余个子系统的安全状态并输出结构化报告。

Stars: 0 | Forks: 0

# bythos ![Linux](https://img.shields.io/badge/Linux-FFA500?logo=linux&logoColor=black&labelColor=FFA500) ![C11](https://img.shields.io/badge/C11-A8B9CC?logo=c&logoColor=black&labelColor=A8B9CC) ![Zero--deps](https://img.shields.io/badge/Zero--deps-brightgreen.svg) ![UEFI](https://img.shields.io/badge/UEFI-firmware%20trust-7B68EE?labelColor=7B68EE) 适用于 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, 加密, 可信计算, 固件安全, 子域名枚举, 安全合规, 安全启动, 安全基线, 审计工具, 客户端加密, 引导链, 教学环境, 文档安全, 杀软绕过, 漏洞扫描器, 硬件安全, 系统安全, 网络代理, 网络安全, 隐私保护, 零依赖