以下是我所做的:
- 生成我自己的 SSL 密钥 (db、KEK、PK) x (cer、key)
- 从内核、GRUB、shim(以及 中的所有其他 EFI 二进制文件
/boot
)中删除现有签名,并使用我自己的证书(db)对其进行签名。 - 重新启动并在 UEFI 中注册我的证书(将其移至用户模式)。
到目前为止一切顺利。我希望从这一点开始,对手只有两种方法来更改我的引导加载程序(GRUB):
- 转到 UEFI 并禁用 SecureBoot(=> 需要密码)
- 泄露我的私人 KEK 密钥(或 PK),授权更改 db(或 KEK)EFI 变量,这将允许添加另一个证书,该证书可以签署另一个引导加载程序。
但
实际情况是, shim 确实检测到 GRUB 已被破坏/修改,它显示以下内容:
ERROR
Verification failed: (0x1A) Security Violation
<OK>
然后,当我按下时<OK>
,它很高兴地建议我添加另一个键(!)
Press any key to perform MOK management
Enroll key from disk
显然,它破坏了整个“信任链”——它使得所有之前的步骤都变得毫无用处,从某种意义上说,它是一个后门(我明白它是想提供帮助,但可能太有帮助了……)。
问题
- 我说得对吗?也许我遗漏了什么或误解了什么?我的印象是只有密钥的所有者才能替换引导加载程序/EFI/内核(否则,EvilMaid 攻击就有可能,窃取 LUKS 密码将变得轻而易举,等等……)
- 有解决方法吗?我可以
mmx64.efi
完全删除 MokManager ( ) 吗?是否可以删除该行为,使其“不那么有用”?
附言
如果你想知道的话,那么grub.cfg / initrd
...... - 我正在使用独立版本的 GRUB,它会检查它加载的所有内容的 GPG 签名(set check_signatures=enforce
)
更新
最后我决定完全摆脱链:shim
-> grub
/ grub.cfg
> initrd
-> Linux 内核(因为每个转换都必须经过验证)。
相反,可以启动内核直接(统一内核映像)。更多信息以及工具可以在这里找到。
答案1
这是 Thomas Ward 发布的官方回应(戴着他的服务器团队/开发帽子)代表 Ubuntu 安全团队本身,通过他们的 IRC 频道直接引用
Ubuntu 安全团队在收到我向安全团队提交的这个问题的回复后,就这个问题回复了我。我将直接引用安全团队的 Alex Murray(#ubuntu-hardened
Freenode IRC 网络上的 amurray)的话:
这是一个有意为之的选择,因为用户无论如何都已经放弃了 grub/shim,因此他们能够注册自己的证书 - 如果他们想使用自己的证书等,那么他们应该重建 shim 而不使用这个,或者直接删除 mokmanager 二进制文件本身 - 因为我们不进行 TPM 支持的全盘加密,所以目前仍有许多方法可以进行邪恶女仆式的攻击,这只是其中之一
-- amurray,#ubuntu-hardened,Freenode IRC,2020 年 4 月 26 日 22:25:28 UTC-4
因此,Ubuntu 安全团队承认这是一种风险,但保留原样是有意为之。
如果您想防止这种情况,请删除mokmanager
二进制文件或重建shim
,但不能调整证书。
无论如何,Ubuntu 不执行任何 TPM 支持的全盘加密,因此有多种方法可以进行这种“邪恶女仆”式攻击。虽然 Ubuntu 安全团队承认这一点,但他们并不认为这是需要立即采取行动的事情,因为这是一个有意的选择。
还要记住 -mokmanager
向用户发出有关密钥的警告,因此由用户或设置系统的管理员来承担风险 - 只需完全移除即可解决此问题,mokmanager
从而强化系统,并且不提供通过此向量更改这些密钥的机制。但是,仍然有其他方法可以进行此类攻击。
答案2
回答您最紧迫的问题:
为什么 shim/mokmanager 允许规避全部SecureBoot 的保护措施?如何修复? 答案为什么很简单,但无法提供,这听起来像是对安全启动的误解,它的用途以及为什么 Sim/MokManager 被设计为允许最终用户自行签署自己的证书。首先,我们必须消除“Secureboot”本身是任何形式的“安全”或旨在捍卫和保护您的硬件的攻击犬的观念,它只是……
...由 PC 行业成员开发的安全标准,有助于确保设备仅使用原始设备制造商 (OEM) 信任的软件进行启动。 (安全启动,微软 Windows 硬件开发人员)
因此,从另一个角度来看,它是一种软件验证检查器。虽然您对 BIOS 密码的担忧有一定道理,但您的系统可能还有其他技术可以实现您所寻找的功能。例如,TPM 硬件设备也可以通过 BIOS 激活、用密码锁定,有时还可以物理移除以增加保护。它可能更符合您所希望的安全启动功能,被称为可信平台模块 (TPM),代表旨在提供基于硬件的安全相关功能的技术。
TPM 芯片是一种安全的加密处理器,可帮助您执行诸如生成、存储和限制使用加密密钥等操作。许多 TPM 都包含多种物理安全机制,使其具有防篡改功能,恶意软件无法篡改 TPM 的安全功能。Microsoft 硬件开发人员文档
因此,考虑到这一点,如果您还不熟悉安全启动(开启)时开启 UEFI 与安全启动(关闭)时开启 UEFI 之间的区别,或者传统模式开启时关闭 UEFI 与安全启动关闭之间的区别,那么您可能不了解我们为什么需要它,您可以阅读更多关于它被创建的原因以及为什么 Ubuntu 必须以某种方式扩展对它的支持。简而言之,由于存在如此多的不同操作系统软件包,一些公司根本无法为每个发行版制作数百个驱动程序库文件迭代以对其进行签名,这意味着如果用户想要安装一些 Linux,他们将面临无法使用这种情况适用的任何硬件的风险。,您可以了解有关此的更多信息这里。
总结一下你的其他问题:
我对吗? 在一定程度上...
也许我遗漏了什么或者误解了什么? 事实上最重要的因素是...
我的印象是只有密钥的所有者才能替换引导加载程序/EFI/内核(否则,EvilMaid 攻击就成为可能,窃取 LUKS 密码将变得轻而易举,等等......) 你说得对,但更准确的印象是,只有密钥的所有者才能做这些事情,如果他们不愿意擦除整个系统以取走硬件或其他东西的话。但本质上你的数据会相当安全,而任何拥有你设备物理访问权限的人都可以[潜在的替换你的引导程序/内核并进入你的系统,但有一个非常非常强调潜在的。这就是为什么我说你忘记或忽略了设备安全最重要的因素,那就是你自己!没有讽刺。这意味着,是的,确实有你可以做的事情将使只有您(或技术上密钥的持有者)才能访问您的设备并从中收集任何类型的数据。从 Grub 2 开始,最早从 Ubuntu 14.04 开始。
有其他解决方法吗? 除了一个好的强密码之外,最强的方法是将 LUKS2 标头分开并将它们安装在单独的驱动器上。大多数人将他们的系统安装在一个硬盘上,允许使用默认分区。但是,如果您将启动分区保存在单独的 USB 驱动器上(希望至少有一个备份,没有该 USB 驱动器,任何人都无法访问您计算机上的任何内容。如果没有本地存储的引导加载程序,就不可能感染您的引导加载程序!并且由于没有操作系统的即时加载屏幕,很有可能发生无论如何,让我们来研究一下这些问题的现实性质,因为它们是有充分理由的,但它们很可能会发生吗?除非您是高级官员或公司董事会成员,或者只是一个会成为协同间谍攻击目标的富人,否则普通人不会偷窥您的房间对您的系统进行邪恶女仆攻击。但是,即使他们这样做了,您也可以通过更加小心地保护自己,利用大多数酒店都有的内置保险箱。 (我的意思是,如果你做得足够好以至于成为目标,你可以负担得起带保险箱的房间,几乎所有的酒店房间都有,至少在国内)。
我可以完全删除 MokManager (mmx64.efi) 吗?是否可以删除该行为,使其“不那么有用”? 您可以……返回传统模式并关闭 UEFI 模式,至少这是最简单的方法。当然,这不一定是“最安全的”,但我认为我们现在已经确定这都是相对的。MokManager 可以帮助您,如果您删除它并发现自己想知道为什么程序无法运行或游戏无法启动,可能只是 repo 中的驱动程序无法工作,您需要下载 Nvidia 驱动程序或类似的东西,所以它可以帮助您绕过驱动程序签名强制执行,这会导致安全警告,而这种警告只会出现,因为您可能正在使用一台曾经安装过 Windows、为 Windows 构建且旨在与 Windows 软件一起使用但更喜欢在 Ubuntu 上使用它的机器,为了实现这一点,他们必须弄清楚如何使用 Ubuntu。
最后,如果还不够强调的话,请记住,这实际上是关于物理访问您的设备。这些 Evil Maid、LUKS 标头提取方法等等,需要攻击者亲自到场才能实施。当然,他们确实可以通过互联网以其他方式攻击您,但就您所担心的而言,如果他们能够如此接近您的财产,您难道不会更加保护您的财产吗?
软件保护和加密不是鲁莽的借口。采取预防措施,并在您的终端做更多的事情。简而言之,您关于检索 LUKS 密码很容易的评论我不会说得那么远。我的意思是,当你上学时背着一个 15 磅重的书包很容易,但是如果你必须背着它 20 到 40 年,从某种意义上说它可能仍然“容易”,但花 500 美元背那么久真的值得吗?要了解观看对 LUKS 加密进行暴力密码攻击的感觉,您可以更快地考虑一下数学问题:这相当简单,如果他们对密码几乎一无所知,我们假装他们所知道的是密码有 9 个字符长,并且他们知道密码中没有任何符号,请猜测每个可能的字母,无论是小写还是大写,整数还是字母,这将是 62^9 次迭代或 13,537,086,546,263,552 种组合的概率,并且破解哈希率为 100M/s,这将需要 4 年以上的时间才能完成。因此,您可以想象,他们甚至想费心去尝试从某个随机的人那里检索一些数据需要多少麻烦。除非这是悬浮车辆的专利,否则只要您尽职尽责,就可以保证安全。