我计划在未来几天购买一台新笔记本电脑,新的超酷超极本给我留下了深刻的印象。作为一个长期的 GNU/Linux 用户,我当然会在上面安装我选择的发行版。
我很可能必须购买一台预装 Windows 8 的电脑;它很可能会运行 UEFI 并具有“安全启动”,未签名的内核将无法启动。
UEFI 可能很好,BIOS 可能需要退役。我猜毛茸茸的东西是安全启动。
据我所知,有些值得信赖的证书将嵌入到固件中,从而嵌入到内核中ETC。。如果内核的证书可以追溯到任一固件,内核将启动,否则 UEFI 将告诉我并拒绝启动。此过程将阻止未经认证的软件启动。这可能有好处,尽管我看不到它们。
我想知道开源内核如何获得这些密钥之一并且仍然可以自由的。我读过了Linux 邮件列表上的一个主题一名红帽员工要求 Linus Torvalds 拉取一个变更集,该变更集实现了解析 PE 二进制文件的工具,并采取一组复杂的操作来让内核以安全启动模式启动(据我所知)。他们想要这样做是因为 Microsoft 只签署 PE 二进制文件。托沃兹先生有亲切地拒绝了这个变更集,指出内核已经实现了该标准,但不是 PE。 RedHat 正在尝试将此代码推送到内核,这样他们就不必在某一天对其进行 fork。
看,这是一件复杂的事情。让我问我的问题:
- 作为家庭用户,我可以通过 UEFI 和安全启动获得哪些好处?
- 这怎么样签名完毕?
- 谁可以获得签名/证书?是付费的吗?可以公开吗? (Linux的源码里应该有吧?)
- Microsoft 是唯一提供签名的机构吗?难道不应该有一个独立的基金会来提供它们吗?
这将如何影响开源和免费内核、爱好者/学术内核开发人员ETC。。例如,这个启动会吗(一个非常基本的引导扇区代码):
hang: jmp hang times 510-($-$$) db 0 db 0x55 db 0xAA
一条新闻在这个网站上这是这个问题的灵感。一个名为的西班牙 Linux 用户组西班牙Linux已就此问题向欧洲委员会提交了针对微软的投诉。
我应该担心吗?我拒绝使用专有软件或由相信编辑公司。到目前为止我一直这样做,并且我想继续这样做。提前致谢。
答案1
此过程将阻止未经认证的软件启动。这可能有好处,尽管我看不到它们。
您有一个新的安全机制来控制什么可以从您的硬件启动,什么不能从您的硬件启动。一项安全功能。你不会觉得自己需要它,直到为时已晚。但我离题了。
我读过 Linux 邮件列表上的一个帖子,其中一名 Red hat 员工要求 Linus Torvalds 拉取一个变更集,该变更集实现了解析 PE 二进制文件的工具,并采取一组复杂的操作来让内核以安全启动模式启动(据我所知) )。
驱动程序(例如 GPU 固件)必须根据安全启动进行签名,否则它可能是另一个 Rootkit。现状是这些驱动程序都是以 PE 格式签名的。无论如何,内核可以在没有这些的情况下启动,但硬件将无法工作。与要求每个硬件供应商为每个发行版签署其 blob 或设置用户空间框架来执行此操作相比,在内核中解析 PE 格式只是技术上更简单的选择。 Linus 决定不再吸微软的鸡鸡。这不是技术争论。
作为家庭用户,我可以通过 UEFI 和安全启动获得哪些好处?
最明显的特点是 UEFI 快速启动。我已经拿到了几个带有 Windows 8 徽标的桌面,它们启动速度非常快,以至于我经常错过弹出启动菜单。英特尔和 OEM 厂商在这方面已经做了很多工程。
如果你是那种讨厌的 Linux 用户浮肿和代码重复满怀热情,您可能还想在固件级别管理多重引导并完全摆脱引导加载程序。 UEFI 提供了启动管理器你可以用它直接启动进入内核或选择使用固件菜单启动其他操作系统。尽管它可能需要一些修补。
此外,启动时和固件菜单中的图形也更精美。启动期间更好的安全性(安全启动)。其他功能(IPv4/6 网络启动、2TB+ 启动设备等)主要面向企业用户。
无论如何,正如莱纳斯说,BIOS/UEFI 应该“只加载操作系统并摆脱困境”,对于具有快速启动功能的家庭用户来说,UEFI 显然是这样的。它确实比 BIOS 做了更多的事情,但如果我们谈论的是家庭用户,他们不会关心这一点。
这个签名是如何完成的?
理论上,二进制文件使用私钥加密以产生签名。然后可以用公钥验证签名,以证明二进制文件是由私钥所有者签名的,然后对二进制文件进行验证。在维基百科上查看更多内容。
从技术上讲,仅对二进制文件的哈希进行签名,并且签名以 PE 格式和附加格式旋转嵌入到二进制文件中。
在程序上,公钥由 OEM 存储在您的固件中,并且来自 Microsoft。你有两个选择:
- 生成您自己的密钥对并安全地管理它们,将您自己的公钥安装到固件中,并使用您自己的私钥对二进制文件进行签名(签名来自 Ubuntu,或者设计来自 Fedora),或者
- 将您的二进制文件发送给 Microsoft 并让他们对其进行签名。
谁可以获得签名/证书?是付费的吗?可以公开吗? (Linux的源码里应该有吧?)
由于签名/证书嵌入在二进制文件中,因此所有用户都应该获得它们。任何人都可以建立自己的CA并为自己生成证书。但如果你想让微软为你生成证书,你就必须通过Verisign来验证你的身份。该过程花费 99 美元。公钥位于固件中。私钥位于 Microsoft 的保险箱中。证书位于签名的二进制文件中。不涉及源代码。
Microsoft 是唯一提供签名的机构吗?难道不应该有一个独立的基金会来提供它们吗?
与管理 PKI、验证身份、与每个已知 OEM 和硬件供应商协调的过程相比,技术方面相当琐碎。这要付出高昂的代价。 Microsoft 恰好拥有多年的基础架构 (WHQL) 和经验。因此他们提出签署二进制文件。任何独立基金会都可以提供同样的服务,但迄今为止还没有一家这样做。
从 IDF 2013 的 UEFI 会议上,我看到 Canonical 也开始将自己的密钥添加到某些平板电脑固件中。因此 Canonical 可以在不通过 Microsoft 的情况下签署自己的二进制文件。但他们不太可能为您签署二进制文件,因为他们不知道您是谁。
这将如何影响开源和免费内核、爱好者/学术内核开发人员等。
您的定制内核不会在安全启动下启动,因为它没有签名。不过你可以把它关掉。
安全启动的信任模型锁定了内核的某些方面。就像即使你现在是 root 一样,你也不能通过写入 /dev/kmem 来破坏你的内核。您无法休眠到磁盘(正在上游工作),因为无法确保恢复时内核映像不会更改为 bootkit。当内核崩溃时,您无法转储核心,因为 kdump (kexec) 机制可用于引导 bootkit(也在上游工作)。这些是有争议的,并且没有被 Linus 接受到主线内核中,但是一些发行版(Fedora、RHEL、Ubuntu、openSUSE、SUSE)无论如何都附带了自己的安全启动补丁。
就个人而言,构建安全启动内核所需的模块签名需要 10 分钟,而实际编译只需要 5 分钟。如果我关闭模块签名并打开 ccache,内核构建只需要一分钟。
UEFI 是与 BIOS 完全不同的启动路径。 UEFI 固件不会调用所有 BIOS 引导代码。
一个名为 Hispalinux 的西班牙 Linux 用户组织已就此问题向欧洲委员会提交了针对微软的投诉。
正如上面所说,除了微软之外,没有人站出来做公共服务。目前没有证据表明微软有意以此为恶,但也没有什么可以阻止微软滥用其事实上的垄断地位,进行权力之旅。因此,虽然 FSF 和 Linux 用户团体可能看起来不太务实,也没有真正坐下来建设性地解决问题,但人们很有必要向微软施加压力并警告其后果。
我应该担心吗?我拒绝使用专有软件或受信任公司签名的软件。到目前为止我一直这样做,并且我想继续这样做。
采用安全启动的理由:
- 它消除了真正的安全攻击媒介。
- 它是一种让用户更自由地控制其硬件的技术机制。
- Linux 用户需要了解安全启动机制并在微软进一步垄断安全启动之前积极采取行动政策。
答案2
我最近购买了一台配备 Windows 8 和 UEFI 安全启动的笔记本电脑,经历了这个过程。经过大量时间和研究,我可以回答以下问题:
- 听起来您不属于“家庭用户”类别。
普通用户会注意到 UEFI 的好处是,他们在屏幕上看到的第一件事将是 Microsoft/供应商品牌的 UEFI 引导加载程序显示。这些都没有可怕的例如“按 Del 进行设置,F11 选择启动设备”等。
然后它会很好地转换到 Microsoft 内核/引导加载程序等待屏幕。这呈现了一种“提示的力量”微软主题体验。我想,如果这是一个实际的好处,那就是仁者见仁智者见智了。我很生气,因为我没有得到我期望在启动时看到的正常信息。例如,如果您的供应商不使用标准密钥来进入基本 UEFI/Bios 设置,那么祝您好运。
哦,是的,理论上来说,这将阻止引导扇区病毒,或者至少让创建者创建/窃取某人的 ID 并向 Verisign 支付 99 美元(RedHat Fedora 路线。谷歌一下。)
有关实际签名如何完成的一些信息,请查看:http://al.robotfuzz.com/playing-with-uefi-secure-boot-part-2-basic-authenticode-signing-with-ms-tools/
WHO ?只有微软吗?
啊,还有一个问题。任何人都可以使用任意密钥对代码进行签名。问题是机器只会运行由受信任的权威密钥签名的代码。密钥的公钥在出厂时安装在系统 UEFI 核心中,用于验证使用私钥签名的 UEFI 程序(启动代码)的签名。
猜猜谁的公钥是在工厂安装的?猜猜谁要求默认启用安全启动?
每个系统制造商显然都会把微软的密钥放在那里。他们可以还放入 Canonical 的 (Ubuntu) 密钥、Red Hat 的密钥、Apple 的密钥等。不过,更多的密钥意味着更多的违规点,而且它们可以存储的数量显然存在物理限制。
- 你的引导扇区代码?不,那是 BIOS 继承。如果您想尝试编写 UEFI 代码,请查看http://x86asm.net/articles/uefi-programming-first-steps/
对于像您这样叛逆的计算机用户来说,解决方案是什么?
希望您的系统供应商允许您访问系统启动配置
希望他们允许您关闭安全启动。如果没有安全启动,Windows 启动代码仍将运行。
如果您真的很幸运,系统供应商将允许您放入自己的证书颁发机构密钥,并且您可以签署自己的东西。仅当您想尝试安全启动时才真正需要这样做。
我的 MSI 笔记本电脑允许我执行上述所有操作。
我希望看到这样一个世界:任何人都可以免费获取 Linux 发行版并更换他们的操作系统。这就是我们在安全启动之前所拥有的。我们还有很多引导扇区病毒。必须在系统配置中禁用安全启动可能是一个足够小的障碍,足以验证您是否有能力安装操作系统,或者知道有人这样做。
无法将其关闭是一件坏事,这取决于制造商。不要责怪微软,除非他们“说服”制造商阻止禁用安全启动。