是否可以确定计算机的 BIOS 在运行时是否在该计算机的两个时间点之间进行了修改?
实际上,我希望能够通过本地主机操作系统(理想情况下,Linux 的答案会很好,但任何方法都可以)或通过某些东西来收集相当于 BIOS 的加密哈希快照(或尽可能多)像 IPMI 一样,无需重新启动计算机。
我知道还有一个无法信任计算机本身的问题,但我只是在寻找基本功能。
注意:我并不是要证明计算机没有附带受感染的 BIOS,或者只是在下午 1 点到 3 点之间没有发生任何新变化。
是否可以确定计算机的 BIOS 在运行时是否在该计算机的两个时间点之间进行了修改?
实际上,我希望能够通过本地主机操作系统(理想情况下,Linux 的答案会很好,但任何方法都可以)或通过某些东西来收集相当于 BIOS 的加密哈希快照(或尽可能多)像 IPMI 一样,无需重新启动计算机。
我知道还有一个无法信任计算机本身的问题,但我只是在寻找基本功能。
注意:我并不是要证明计算机没有附带受感染的 BIOS,或者只是在下午 1 点到 3 点之间没有发生任何新变化。
如果您的主板兼容,您应该能够使用带有-r 参数的flashrom将 bios 备份到文件中。然后,您可以使用 md5、sha256 等来获取稍后可以比较的哈希值。
//baseline.sh
//first make your baseline bios checksum with
flashrom -r ./bios.bios
sha256sum bios.bios > bios.checksum
//check.sh
//now periodically check again
flashrom -r ./bios.bios
sha256sum bios.checksum -c
//if your output looks like "bios.bios: FAILED" you have a problem.
如果您的系统有 TPM,您可以检查其 PCR 以了解系统引导之间的任何更改。前几个 PCR 使用 BIOS 不同部分的散列进行扩展,您应该查找一些文档并查看要用于检查的 PCR。在 Linux 下读取 PCR 只是在 /sys 下读取正确的设备节点,在 Windows 上它有点复杂,我相信你需要为此编写自定义代码。
有可能读取 BIOS 并对其进行校验和,但恶意 BIOS 可以轻松拦截它。因此,虽然检查 BIOS 校验和和/或 TPM 可能会显示某些内容,但对您的安全措施有足够了解的攻击者可以轻松绕过这一点(并且可以不受限制地访问您的硬件)。
如果 PC 一直在线(如通过第二台服务器的心跳验证),您可以非常确定 BIOS 没有在硬件方面刷新。只要您的攻击者没有对您的服务器的 root 访问权限,在运行时刷新 BIOS 可能并非易事。但是,您需要确保 PC 一直在线(即通过 IPSec 专门播种的心跳包,并且需要低于 10 毫秒的延迟)。
请注意,没有100% 安全之类的东西。