有没有遇到 windows 还原 uefi boot entry 的?

2019-02-02 17:49:01 +08:00
 henglinli
在 secure boot 开启并使用自签名 efi 情况下,之前的 Alienware alpha r1 如此,如今的 nuc8i7hnk 亦是如此。目前采用的规避方法是使用 systemd boot 替代 bootfwmgr,再用 chainload 重命名后的 bootfwmgr。这不是 ami (没记错的话 alpha r1 的 bios 也是 ami 的方案,dell 的实现)的 bug 就是 MS 不厚道故意把其他 boot entry 给故意弄坏了。
无论是 efibootmgr 还是 bcfg 添加的 boot entry 都会被 windows 弄坏,然而 bootmgrfw 又不能 chainload 其他 bootloader (存疑,曾试过 bcdedit 添加类似 windows 的启动项目,但是无效,stackoverflow 上也有例子)。假装 bootmgrfw 的这个方法让我觉得憋屈,明明差一点就可以了解决问题而不是规避问题。

未尝试的可能方法:自签名 bootmgrfw 及其他相关的 efi,不知道 windows 的安全启动机制是否支持,更不知道 windows 还原 bootentry 的机制是否包含签名验证。自签名 bootmgrfw 等后,如果 windows 依然能正常启动,说明 window 还原 bootentry 的机制不包含签名验证,那么修改或添加 bcdedit 那个备份数据库对应的 boot entry 项,也许能做到让 windows 还原期望的 boot entry,也就是说先添加 linux 用的 boot entry,再安装 Windows 或者修复 windows 启动也许能解决该问题。由于不太想了解 windows 的启动细节,未进行深纠。

以上为抛砖引玉用。
以下为没用的。

不知道启用 bios supervisor 密码后,含有 TPM 的主板是否能做到即使使用跳线重置主板也无法清除 bios supervisor 密码? intel 的规格文档并未说明 bios 密码一定存储在 tpm 中,我也没进行测试。
有没有人使用这个 https://github.com/corna/me_cleaner 清除过 intel nuc 的 me。
3471 次点击
所在节点    Linux
24 条回复
henglinli
2019-02-02 18:23:06 +08:00
刚才复查的 intel 的规格文档,主板跳线可清除 bios 密码。这不就是后门吗?安全启动的意义就不太大了。
估计 Apple 的主板也有类似的跳线,清除 T2 的 key。
现在想来,Chromebook 虽然没有开机密码,但是开启 devmode 会重置系统这个设置来看还是很安全的。
这个 nuc8i7hnk 的硬盘加密功能仅仅支持 sata 0。intel 的规格文档还补充说 AHCI 或者 NVME 的驱动器的硬件加密实现还没有标准,早点看到这点,我就就会选择 intel 545s 了。对硬盘加密有需求的,并且不太了解的人,希望你看到了这里。估计今后的重要数据不会放到本地了,加密后放到 google drive 才安心。
realpg
2019-02-02 18:26:09 +08:00
感觉你说的乱的一塌糊涂……
你的方案选择啥的 甚至我觉得一些技术的理解都有问题
henglinli
2019-02-02 18:38:28 +08:00
@realpg 我的锅,“假装 bootmgrfw “,用其他 bootloader 替换 windows 的,然后 chainload windows bootloader。
我就是吐槽下,intel 论坛我上不了,估计墙了部分,而且代理挂上也很慢很慢。
wevsty
2019-02-02 19:24:18 +08:00
启动引导的问题我个人不是很清楚细节,不做任何评论。

BIOS 密码的问题,我并不认为 BIOS 密码不储存在 TPM 是一个安全问题。因为清空 BIOS 并不代表 TPM 密钥会泄露出去,只要 TPM 能检测到 BIOS 或者 BIOS 设置产生了变化拒绝提供密钥就不会有什么安全问题。
henglinli
2019-02-02 20:11:33 +08:00
@wevsty nuc8i7hnk 的密码是存储在 TPM 上的,准确的是 intel PTT (应该是 cpu 内置的 TPM 吧,不是第三方 TPM 芯片,intel 规格文档有说明主板上还有一个位置可放置 TPM 芯片)。BIOS 密码放在内置 flash 上或者 TPM 上都对我而言都很安全。我担心的不安全的情况是:有人物理访问到主机,并使用跳线清除 BIOS 密码,并用其他系统从 USB 启动就问访问到用户文件了。
tempdban
2019-02-02 20:20:15 +08:00
@henglinli 既然能跳线清 BIOS 那为啥不拆盘直接读?
chinvo
2019-02-02 20:20:33 +08:00
使用 tpm 全盘加密可以杜绝你说的问题。BIOS 重设并不能影响 tpm 密码,而且 tpm 密码一旦变化全盘加密就无法解密
ysc3839
2019-02-02 20:26:33 +08:00
我认为要保证数据安全的话靠固件密码是不够的。建议把数据加密,同时不要把密码存储在系统内部,也就是尽量避免仅使用 TPM 存储密码。
henglinli
2019-02-02 20:38:18 +08:00
@chinvo 磁盘加密不是硬件(drive)级别的很会变慢,但是我依然能接受,可惜当时不知道 nvme 的 ssd 不支持硬件(drive)级别的加密,不然购买 sata 接口的 intel 545s 了。年后把 btrfs 换成 zfs,毕竟内核还没有做好,加密更重要。重要的数据,还是不放本地,加密后放到 google drive 才安心。
realpg
2019-02-02 20:44:55 +08:00
@henglinli #3
从来没研究过安全启动这套东西
我也没看明白你说这一坨是想干啥

如果你只是想要硬盘数据防盗,全盘加密不就完事了,跟 secure boot 有啥关系……

windows 下,bitlocker+tpm 你只要保管好自己的登录密码就好了

至于 linux,直接数据独立分区 AES 不就完了,软件加密性能也足够。
chinvo
2019-02-02 20:45:16 +08:00
@henglinli #9 你这个思路有问题,重要数据本地才更安心,因为除非物理访问,不然入侵你的成本比入侵云服务的成本低(入侵云服务可以获取更多人的数据,而且密码泄漏、撞库等是云服务的软肋)
chinvo
2019-02-02 20:46:11 +08:00
如果你认为本地的安全性都存疑,建议删数据抹盘上榔头,直接干掉更安全
henglinli
2019-02-02 20:49:09 +08:00
@ysc3839 是的。需要注意的是 TPM 保存的应该是密钥,并不是密码本身。目前在考虑购买 https://cloud.google.com/titan-security-key/这个玩意儿,记得 system76 好像也有一款类似的产品,刚才去看了下却找不到了。
henglinli
2019-02-02 20:57:19 +08:00
@chinvo 我的思路如果在国外是有问题的,可是国内法律不一样,我认为我的思路就没有问题了。比如我就把自定义 uefi 相关的 key 加密后放到 google drive 上。即使小偷偷了我的电脑,他首先开不了机,有 bios 密码,然后他主板跳线清除 bios 密码,然后 usb 启动后,mount 不了我的加密分区,当然也不知道我用电脑干了什么,其实只是看了 pornhub,怕懂技术的朋友发现了。
zingl
2019-02-02 23:52:58 +08:00
> 主板跳线清除 bios 密码,然后 usb 启动后,mount 不了我的加密分区

既然已经假定物理接触了,有且只有硬盘 /分区 /文件加密能起作用,其它那些都不是为了解决这个问题的
Tyanboot
2019-02-03 01:49:13 +08:00
Windows 会还原 efi entry,所以我直接在主板里面把 efi nvram 给锁了。
Osk
2019-02-03 08:24:25 +08:00
完全没看明白楼主的启动流程,,,我的经验是不要把其它的 boot loader 安装成默认的,即 efi/boot/bootx64.efi ,windows 有时会神经病地替换它。

然后自签证书的话可以用自己的证书给 ms 的根证书签名,这样就不用动 windows 的 efi 文件了。
henglinli
2019-02-03 10:21:48 +08:00
@Osk 未遇到过 efi/boot/bootx64.efi 被替换掉的情况,倒是 Ubuntu 会安装该文件,估计 windows 启动修复会替换它吧。
启动流程具体是:使用另一个 boot manager (我选择的是 systemd boot )替换掉 efi/boot/microsoft/bootmgrfw.efi ,然后用该 boot manager chain boot bootmgrfw.efi 重命名后的 bootw.efi 。
我发现只要从 efi shell 直接执行 bootmgrfw.efi (不管其是否被重命名) windows 都会还原 boot entry,以及 bootmgrfw.efi 本身,chainload bootmgrfw.efi 却不会。
签名部分目前我确实是签名了 MS 的 2 个证书和 intel 的一个证书(应该是更新固件要用到的,正应该有 intel 的证书在,我才不能确定是否能用 me_cleaner 清除 bios 固件中的 me,至少 me_cleaner 的 issue list 里面没有看到相同 nuc 的使用结果报告)。我的考量是,如果我签名(旧的 MS 签名会被替换掉)了 bootmgrfw.efi 等,Windows 也许不会替换它(比如假如神州网信版的签名也许就不是 MS 的签名呢?),那么我就可以用自己添加的 boot entry 启动 systemd boot 再用 system boot chainload 未被重命名的 bootmgrfw.efi 。如果可行的化,个人认为这比假装 bootmgrfw.efi 要好一点。
henglinli
2019-02-03 10:25:21 +08:00
@Tyanboot 怎么锁? Windows 启动后自己再把它改回来?( stackoverflow 上有人就是这么干的。。。)
还是 efishell 有相关的命令或者是你的主板支持?
henglinli
2019-02-03 10:34:01 +08:00
@zingl 分区加密部分是应该的,但是个人单方面认为应该要注意的是应该避免使用神州网信版以及简体中文版(都是特供版)的 bitlocker。目前猜测 windows 繁体中文版不是特供版,但是安装的时候还是不要选简体中文的好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/532698

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX