对内核进行签名/校验和以防止/检测操作

Ska*_*Rat 8 security kernel encryption

我的所有分区都已加密(//home),但该/boot分区必须保持未加密状态并且可以进行操作。我正在考虑在启动时对内核进行散列,并根据存储值(在编译时生成,保存在我的加密驱动器上)检查结果,以查看自上次启动以来是否有人以某种方式操纵了内核(甚至可能是物理上的)。写这样的脚本有问题吗?有没有程序可以做到这一点?

Gil*_*il' 6

您正在寻找的东西 — 验证计算机上运行的操作系统是您信任的操作系统 — 称为可信启动。(它是有时被称为可信启动的几件事之一)。你提出的方法没有达到这个目标。

加密不提供数据完整性真实性。换句话说,它并不能阻止攻击者修改您磁盘的内容并将其替换为恶意操作系统。这个恶意操作系统可以很容易地被编程来显示你期望加载内核的校验和。

最简单的攻击路径是中间人,攻击者在这种情况下在某种虚拟机下运行您的正常操作系统。虚拟机层将您的输入传输到所需的操作系统并将输出传输回。但它也会在侧面记录您的击键(嗯,密码),从操作系统的内存中窥探私钥等等。

为了避免这种形式的攻击,您需要有一个信任根:您信任系统的一个组件,而不是因为系统的其他组件这么说。换句话说,你必须从某个地方开始。从您拥有的硬件开始是一个好的开始;您可以将操作系统保存在不会离开您视线的 USB 密钥上,并仅将其插入您有足够信心的硬件硬件可能存在恶意软件!)。请注意,如果您愿意信任计算机,那么您也可能信任它的硬盘。

有一种技术解决方案可以弥合信任一个小芯片和信任整个台式机或笔记本电脑之间的差距。某些 PC 具有TPM(可信平台模块),它可以验证是否只能启动已知的操作系统。Trusted Grub支持 TPM,因此使用 TPM 加上 Trusted Grub,您可以确保您运行的内核是您已批准的内核。

请注意,采用 TPM 可能对您有利也可能不利。这一切都取决于谁拥有钥匙。如果您拥有 TPM 的私钥,那么您就可以准确控制计算机上运行的内容。如果只有制造商拥有私钥,这是将通用平台变成锁定设备的一种方式。