我正在将 arch linux 设置为与 Windows 双重启动并启用安全启动。据我了解,安全启动的目标是防止攻击者修改启动管理器和/或内核。对于 Windows,当我让笔记本电脑无人看管时,这也适用,因为修改后的启动管理器不会使用 Microsoft 的密钥进行签名。
几乎所有的Linux发行版都使用垫片设置并重新启动后,我需要注册 GRUB 启动管理器的哈希值。到目前为止,一切都很好。然后我通过更改 grub 二进制文件中的一个字节来模拟攻击并重新启动。系统再次提示我注册其哈希值,并且可以毫无麻烦地完成此操作。
那么,如果可以通过注册新哈希轻松“修复”安全违规,那么这会如何改善呢?我有什么误解吗?
答案1
安全启动本身并不能防止攻击者对计算机进行物理访问。我建议使用密码来防止未经授权的访问固件设置。安全启动的主要目标是防止恶意软件插入受损的内核和启动加载程序。
具有物理访问权限的用户可以注册新的公钥(即将它们存储在由固件控制的非易失性存储器中)。这些公钥用于验证引导加载程序、内核以及引导时运行的任何其他内容的完整性。注册新密钥后,攻击者可以安装新内核,该内核是用攻击者的私钥签名的。或者,具有物理访问权限的攻击者可以完全禁用安全启动。
但是,关键在于:只有在操作人员能够物理访问屏幕并且可以进入固件设置的情况下才能添加新密钥。物理访问是必需的能够更换或添加新钥匙。安全启动旨在防止攻击者在系统已启动时试图通过闯入计算机来修改关键系统文件。已经开始了。这种侵入可以通过网络发生,或者使用诱骗合法用户运行的特洛伊木马程序。即使安全启动处于活动状态,攻击者也可能能够修改内核映像,但固件拒绝在下次启动时启动内核,因为签名不匹配。
因此,UEFI 安全启动确实有其用途,但这里还有一个需要考虑的点。由于计算机在出厂时预装了 Microsoft 和硬件制造商的密钥,因此您无法控制哪些二进制文件能够在计算机上启动时运行。在已签名的 GRUB 映像中检测到可用于规避安全启动的错误。微软和硬件供应商可能会左右签署各种二进制文件,而您却无从得知。
此问题的解决方案是删除所有固件密钥并用您自己的固件密钥替换它们。这样,只有您可以签署允许在您的计算机上运行(在启动时)的二进制文件。但请注意:有报告称某些计算机需要特殊驱动程序才能启动,并且这些驱动程序使用需要原始公钥的密钥进行签名,否则计算机将无法启动。