签名/校验和以防止/检测内核


8

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

Answers:


6

您正在寻找的内容-确认计算机上运行的操作系统是您信任的操作系统-被称为受信任的启动。(这是有时被称为“受信任的引导”的几件事之一)。您提出的方法无法实现此目标。

加密不提供数据完整性真实性。换句话说,它不能阻止攻击者修改磁盘的内容并将其替换为恶意操作系统。可以轻松地对该恶意操作系统进行编程,以显示所需的已加载内核的校验和。

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

为了避免这种形式的攻击,您需要具有信任根源:您出于某种原因而信任的系统组件,而不是因为系统的某些其他组件如此表示的原因。换句话说,您必须从某个地方开始。从拥有的硬件开始是一个好的开始;您可以将操作系统保持在看不见的USB钥匙上,并仅将其插入对您有足够信心的硬件上(硬件可以有恶意软件!)。请注意,如果您愿意信任计算机,那么也可以信任计算机的硬盘。

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

请注意,采用TPM可能对您有利或不利。这一切都取决于谁拥有钥匙。如果您拥有TPM的私钥,则可以精确控制计算机上运行的内容。如果只有制造商拥有私钥,则可以将通用平台转变为锁定的设备。


+1指的是TPM(又名Treacherous Computing)的巨大潜在陷阱
Eli Heady

您没有给出实际的解决方案,仅提及流行的与安全性相关的短语。您所说的关于MITM攻击的威胁忽略了OP问题的主要思想:使用校验和验证脚本,该脚本仅在满足某些条件时才让系统启动。在这一点上,就没有有效地验证实际底层硬件是它应该是什么,而不是一个虚拟机的问题。
rozcietrzewiacz

-1

引导的内核驻留在内存中。您可以制作一个脚本来定位它,/dev/mem并知道其大小,然后计算并验证其校验和。

您还可以对整个HD进行加密,而无需进行/boot分区并且(几乎)无需修改内核。怎么样?我可以想到两种方式:

  • 将您的内核放在CD上,计算机将通过该CD进行引导。这并不困难;有人几年前报告了使用这样的设置-请参阅该论坛主题中的第二个帖子。

  • 如果您的主板受到coreboot的支持,并且有足够的空间容纳最小的内核,则您的BIOS芯片上可能具有启用加密的内核。(我没有机会进行测试,但是我看不出为什么这可能行不通。)

编辑:请注意,所有这些只是迈向“受信任”“已验证”引导的唯一步骤(吉尔斯正确地指出了这一点)。完整的机制还应考虑引导加载程序阶段发生的情况以及如何识别底层硬件。看看Google Chromium OS如何做到这一点


能行吗 我不确定; 我不知道内核在启动后是否会修改其内存中的代码。我确实知道您无法通过这种方式验证模块,因为该模块在加载时已链接到内核(在此处和此处更改一些地址)。它会提供所需的安全性吗?不,请看我的答案。诚信是棘手的!
吉尔(Gilles)'所以

看来您没有阅读我的完整答案。您提到的第一段仅是对实际要求的直接响应。我的答案的其余部分提供的选项与提到的方法类似,但是更好,因为它们可以安全地防止内核修改(与USB pendrive不同)。
rozcietrzewiacz

@Gilles 在上一个评论中忘记了“ @”。另外,我刚刚检查了您不确定的内容:转储了内存中的内核映像,然后添加了一堆模块,对该区域进行了第二次转储,与之相同。您可以使用它。
rozcietrzewiacz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.