V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
yanqiyu
V2EX  ›  Linux

grub2 被报道安全问题,可致安全启动被绕过

  •  2
     
  •   yanqiyu ·
    karuboniru · 2020-07-30 02:40:54 +08:00 via Android · 6544 次点击
    这是一个创建于 1571 天前的主题,其中的信息可能已经有所发展或是发生改变。
    38 条回复    2020-09-10 14:45:01 +08:00
    Osk
        1
    Osk  
       2020-07-30 07:47:53 +08:00
    grub2 让安全启动不再安全已经不是第一次了,相信也不是第二次。

    linux 这边对安全启动的需求感觉就是:我才不管安不安全,我只管能在开启安全启动时能正常启动
    spcharc
        2
    spcharc  
       2020-07-30 08:03:29 +08:00
    至今不明白安全启动有啥意义。反正我是没用过
    dzdh
        3
    dzdh  
       2020-07-30 08:59:10 +08:00
    @spcharc 对于非 win 用户没有任何意义只是保证 UEFI 启动程序是正常不被篡改的。
    spcharc
        4
    spcharc  
       2020-07-30 09:02:42 +08:00
    @dzdh #3
    win 用户
    安全启动的功能我也知道,并不需要解释一遍…只是看不到这个功能有啥意义
    hjc4869
        5
    hjc4869  
       2020-07-30 09:05:37 +08:00 via Android
    @spcharc 有 secure boot 之后恶意软件就不能劫持你的启动流程了。
    dzdh
        6
    dzdh  
       2020-07-30 09:20:30 +08:00
    @spcharc
    意义就是针对 WIN 用户保证启动流程安全不被篡改
    deorth
        7
    deorth  
       2020-07-30 09:24:32 +08:00   ❤️ 2
    如果一个恶意程序已经拥有了写入你 EFI 分区的权限,那它有一堆方法实现它想做的任何事,根本不需要这么麻烦的方法
    yanqiyu
        8
    yanqiyu  
    OP
       2020-07-30 09:42:37 +08:00 via Android
    @deorth 理想情况下,在 UEFI 安全启动启用的情况下,攻击可以轻易的破坏系统,但是不能埋 Rootkit,这个 CVE 允许了攻击者埋 Rootkit
    ungrown
        9
    ungrown  
       2020-07-30 10:03:41 +08:00   ❤️ 1
    @deorth #7 你说的有一定道理,但你忘了另外一种情况:恶意程序本身并没有篡改 boot 程序的权限,但是人可以手动做到,因为放 boot 程序的分区通常是不加密的。
    所以,假设一个用户在安全方面做得比较到位,全盘加密(比如用 windows 自带的 bitlocker ),平时使用习惯也很干净,恶意程序几乎没有途径进入其系统。但是 boot 程序所在的分区基本上不可能被加密(加密了怎么 boot ),那么针对这样的用户如何攻击呢?想办法物理接触目标设备,拆硬盘,进 boot 程序所在的明文分区,写入,然后整理现场清理痕迹,假装什么都没发生,等用户自己开机进系统,boom !
    spcharc
        10
    spcharc  
       2020-07-30 11:10:47 +08:00   ❤️ 1
    @ungrown #9
    你想太多了
    黑客都接触到你电脑了,你觉得还有啥秘密可言
    thunderbolt 3 接口的直接内存访问( DMA attack )不香吗?现在很多电脑都有 thunderbolt 3 吧。现在多数人都不会直接关机,人不在了电脑基本上是睡眠,此时硬盘都是解锁状态,直接从内存拷走密钥就行了
    而且 bitlocker 早就被人开发出了一堆使用 GPU 的并行算力暴力破密钥的软件。直接 dd 走你的硬盘回去慢慢破也不难吧
    ungrown
        11
    ungrown  
       2020-07-30 11:44:42 +08:00   ❤️ 2
    @spcharc #10
    你想太少了
    物理接触或者接近本就是信息安全领域始终关注的攻击场景,很多漏洞属于不接近或接触就不能有效利用的类型,很多防御错失也是针对这样的场景
    物理接触或接近永远都是切实有效的攻击手段
    如果你说的 DMA attack 切实可行的话,这个安全隐患必须堵上,早晚会因为关注度上升而采取措施
    DMA 攻击本身也是一种旁信道攻击,旁信道攻击本身就是一种常用攻击思路
    等等,你说补充的这些例子难道不是佐证了我的观点:攻击是多样的不可预测的,所以需要积极地发现和填补漏洞
    你不成你是个关心面子为了反对而反对,甚至不惜违背自己的论点,或者说你压根没有自己的论点
    发言之前还请理清思路
    另外,关于 bitcrack,本质上是 GPU 加速的暴力密码破解,也正因此它只能针对使用“用户输入密码”这种 bitlocker 模式的加密分区,然而用密码模式 bitlocker 的用户是少数,换句话说 bitcrack 能够攻击的只是少数 bitlocker 设备。虽然我也是这少数中的一员,但是,暴力破解,即使用上密码表,其所需时间也和目标密码本身的长度和复杂度正相关,不好意思我的 bitlocker 密码我自己都不能完整背出来,全靠肌肉记忆敲那几十个键,按照目前 bitcrack 公布的每天一亿多个密码的速度,我手头的设备足够它算上好几年。这样的安全性对我而言足够了,再说全盘加密又不代表文件都是明文的,我真正关注的少数重要私密文件有额外的文件加密。
    所以你前后两贴互相矛盾的立场,到底想表达什么?
    Osk
        12
    Osk  
       2020-07-30 12:25:30 +08:00   ❤️ 2
    这真的是 V 站吗? Secure Boot 只是安全环节中的一环啊.

    其它环节出现漏洞了, Secure Boot 不背锅, 别怪 Secure Boot 没用, secure boot 环节出漏洞了, 除非有其它的验证手段, 不然整个安全环节就崩了.


    Windows 8 提出 Secure Boot 后, 网上基本一片骂声, 有 Windows 社区的, 有 Linux 社区的, 但我在收集一些资料后我并不觉得这是一个很糟糕的功能, 相反, 它解决了一个痛点: 启动文件的验证, 在没有 Secure Boot 之前, 普通 PC 上大概只有通过 TPM 来达到一定的保护效果, 但当时 TPM 1.2 可不是大白菜遍地都有,而且有政策风险.

    那么 Linux 呢? 我觉得 Linux 在这方面做得很垃圾, 是的, 就是垃圾, Secure Boot 居然不验证 Initramfs (RedHat, Ubuntu 默认不验证). Initramfs 里面被人插入恶意代码了都不知道, 简直是一个巨大的安全风险. Archlinux 好一点, 可以手动配置全验证.

    Linux 社区做的好事就是逼微软加入了 Secure Boot 的开关.


    Secure Boot 保护的是启动阶段的流程是安全的, 避免 rootkit 在 OS 启动前就执行恶意代码, 不然你 OS 里面装再多安全方案也是隐患. 对于大部分的 Linux 发行版来说, 确实是鸡肋, 启用后自己编一个 ko 插入都麻烦.

    再说下去有人会认为我在黑 Linux 了, 以及类似于 "被迫害妄想症" 这样的言论出现.

    另外, linux 社区真的很双标, 微软启用 Secure Boot 就是要搞垄断, 咋不说说一些 Linux/Android 设备上使用类似于 Secure Boot 的 bootloader 锁呢, 还不给解锁那种.
    bitdepth
        13
    bitdepth  
       2020-07-30 12:34:34 +08:00 via iPad
    @Osk bootloader 鎖或者 drm 都是開源社區極度反對的東西
    shijingshijing
        14
    shijingshijing  
       2020-07-30 12:37:01 +08:00 via iPhone   ❤️ 6
    @spcharc
    @dzdh

    其实非 win 系统也有类似 secure boot 的东西,苹果 iOS 的 iBoot 就是这样的一个玩意儿。我个人觉得这个东西不过是打着安全的旗号,实现厂商的利益而已。

    现在的系统启动过程都 follow 一条 boot chain,多数系统的启动过程都划分两个或者多个 stage 。一般 stage 1 是固化在 cpu 片上 rom 里的代码,非常短小精悍,用于初始化各种资源,形成一个最小系统为 stage 2 提供环境; stage 2 才是真正载入操作系统镜像,载入各种驱动,建立 VFS 文件系统等等直到整个操作系统运行起来(进入桌面或者出现 Terminal 提示符)。

    以 iOS 为例,上电后首先是固化在 A 系列 cpu 的 boot rom 执行,然后 LLB,然后 iBoot,最后是 xnu kernelcache 。

    Linux 也是类似,首先是 bootloader,然后才是 vmlinux 。

    这条 boot chain 上每次从上一级到下一级移交的时候,都会形成一个攻击面,所以就需要对应建立一个 trust chain 来保证每一级结束后,载入的下一级是可信任的,一般做法是验证下一级镜像文件的签名,苹果做的更绝,不仅验证签名,还对下一级镜像加密了。即使最后系统正常运行了,微软还有个 PatchGuard 机制防内核被篡改,苹果也有个类似的机制叫 Kernel Patch Protection 。

    Secure Boot,Bitlocker 还有上面的一堆东西,甚至包括 TrustZone,苹果 T2 芯片都是为了保证这条 trust chain 不被破坏,最终用户的环境是安全的而做出的努力。

    然而从现实结果来看,这些东西包括 UEFI 等机制看起来是很美好的,现实是很残酷的。有些东西不仅保护有限,反而还因为自身设计问题等增加了攻击面。

    对于用户而言,不仅有些操作变得非常困难(比如开启了 secure boot 的电脑重装非出厂时的系统),此外这些安全机制都把某些全局唯一识别信息以硬件方式固化在 firmware 或者 rom 里面(微软是把 product key 写在 UEFI/BIOS 里面,iPhone 甚至把 certificate 固化在 cpu 的 boot rom 里面)这些东西可能用来追踪用户,且很难清理;更进一步,各个系统厂商可以利用这套机制控制软件安装和分发渠道,以后很可能都只能像 iPhone 那样只能从 app store 下载应用,无法自己用安装包来安装。所以我觉得安全提示是厂商举的大旗,限制和操控用户终端才是厂商真的私货。
    spcharc
        15
    spcharc  
       2020-07-30 12:39:44 +08:00
    @ungrown #11
    我的立场一直是需要物理接触的安全漏洞都没有太多堵的意义,如同用渔网来装水一样
    thunderbolt 3 的例子也是为了说明这个,毕竟人家都能动你的电路了,你在软件层面做再多能干啥。而且人家搞掉 bios 密码(估计很多人都没设,就算设了,也可以重置 bios ),去 bios 里关掉安全启动难吗。安全启动做再好,也防不住这个吧?
    我这俩办法仅仅可能是专家能想到的办法的万分之一。渔网怎么堵都还是渔网
    你觉得 metasploit 直接的测试库里面基本全是网络攻防测试,是为什么。因为被人家接触到硬件就已经 gameover 了
    iPhone 的 iOS 也是号称全盘加密吧,也有专用加密芯片吧,不也一样有公司能破?反正我是不知道怎么破的,毕竟 FBI 和那个未公布的第三方公司啥都没说。bitcracker 那个你看到的只是开源界公开的破解方式,但你能保证专业破解公司也是用它吗?
    这个立场很难看出来吗?自相矛盾吗?
    swulling
        16
    swulling  
       2020-07-30 12:49:51 +08:00
    @spcharc 安全不是保证绝对不被破解,而是让破解成本高到无利可图。

    举个例子,iPhone 的加密,虽然公开资料无法破解,但是你也说有可能有人能破,这事也没法证伪。
    但是我们敢说破解成本已经高到对普通人的 iPhone 来说无利可图,这也就够了,毕竟大部分用这个加密只是为了保护自己的隐私不因为丢了手机就泄漏出去。

    所以需要物理接触的安全漏洞也有很大堵的意义,就是为了提升破解成本。
    Osk
        17
    Osk  
       2020-07-30 12:52:48 +08:00
    @bitdepth 😄只是少有在大新闻上看到 Linux 社区在反对 Bootloader 锁的文章, 反对 Secure Boot 的新闻当时算是头条.
    swulling
        18
    swulling  
       2020-07-30 12:53:07 +08:00
    就好像家里装锁,哪怕你装最高等级的锁,依然有人可以搞开。
    但是也不能因为这就不装锁了,而是让开锁的成本算到偷窃的成本中。

    装摄像头等安全设施也一样,一切的一切都是成本,人本质就是一个经济动物,哪怕小偷,也不会做亏本的事情。
    raysonx
        19
    raysonx  
       2020-07-30 12:58:23 +08:00 via iPhone
    本质上 Secure Boot 是 wintel 联盟搞的东西,Linux 各发行版都不太鸟这东西。
    Osk
        20
    Osk  
       2020-07-30 13:02:18 +08:00
    @spcharc 雷电 3 现在有内核 DMA 隔离保护了, BIOS 代码本身的保护 Intel 好像也有方案, BIOS 密码如果有需要的用户或者一些企业是会设置好的, Secure Boot 关闭后, 开机界面是会显示警告的(似乎是 BIOS 显示,这类设备太少, 无法验证是 OS 显示的还是 BIOS 显示的警告).

    硬件安全防护方案并不是一文不值的, 针对硬件的攻击确实有, 只要攻击的代价足够高, 就是有意义的.
    ungrown
        21
    ungrown  
       2020-07-30 13:13:53 +08:00
    @spcharc #15 你这个立场脑子正常的都看不出来,因为这个立场本身是个伪命题。
    照你这么说,全盘加密、TPM 这种最简单最基本的手段完全就是多余的。
    但是你不会这么说,这个技术已经太成熟也太普遍了。
    你就只会拿些刚发现不久的新漏洞说说风凉话。
    物理接触意味着为所欲为,但是为所欲为是需要过程和时间的。
    对漏洞不遗余力地防堵,不仅仅是追求一个“无敌金身”。
    当敌人已经打到家门口,而“无敌”偏偏又是不可求或者成本过高时,多修几堵墙多填几个洞,这都是脑子正常的人的务实的选择。
    每少一个漏洞,每多一个反制手段,攻击面就会因此变窄,攻击需要耗费的时间就更长,需要依赖的条件就更多,防御成功性就提升。这也是每个务实的人对现实世界的认知,不局限于信息安全。
    “反正城墙上有个洞,敌人来了就万事休矣了,既然如此,这个洞就不填了……”就这种弱智想法,不说其他人,哪怕你自己,你说你站这样的立场,谁信啊?倒是有可能你会用这种错误观念去忽悠别人,上了当的人大概能做你的炮灰或者笑料。
    LokiSharp
        22
    LokiSharp  
       2020-07-30 13:28:32 +08:00   ❤️ 1
    我印象中。。。用 grub2 的各位不都想着法子绕开安全启动么
    Osk
        23
    Osk  
       2020-07-30 13:37:12 +08:00
    @LokiSharp GRUB2 和 Linux 发行版的问题在于 MS 认可的 CA 给他们签名了 shim, 让他们可以在开启 secure boot 的情况下正常加载 grub2 并启动 Linux, 然而 grub2 出现了不仅影响 Linux 自身甚至影响其它操作系统的安全漏洞...

    比如 ubuntu, 很久前就被报道过类似的问题, 也不知道修复没有, 甚至很难修复, 前一阵子微软通过 Windows Update 更新 secure boot 的证书库, 据说炸了一些 HP 的商用电脑.
    spcharc
        24
    spcharc  
       2020-07-30 14:59:37 +08:00
    @ungrown #21
    行,开始人身攻击了。
    就你脑子正常,可以了吧?
    接着用渔网装水吧,懒得跟你多说了
    ungrown
        25
    ungrown  
       2020-07-30 15:17:53 +08:00
    @ungrown #21 就你这种没事找茬歪理邪说从头到尾发言中隐含着傲慢鄙夷的杂碎,还想被人以礼相待?
    不攻击你那是天理不容!
    你那个“渔网”的比喻我都懒得接,因为根本就和现实差了十万八千里。
    现实中安全领域的人们兢兢业业勤勤勉勉认真对待每个暴露出来的漏洞,就是为了防止出现“渔网”,虽然城墙上大门小洞无数但那依旧是个大体坚固的城堡,不是什么你所谓的狗屁“渔网”。
    自以为是的东西还想强词夺理?
    artandlol
        26
    artandlol  
       2020-07-30 15:49:19 +08:00 via Android
    资本家再想怎么挣钱,你在想怎么让你电脑安全。也没人对你电脑感兴趣
    ungrown
        27
    ungrown  
       2020-07-30 15:51:41 +08:00
    @artandlol #26 你如果完全根据别人对某样事物是否感兴趣来决定自己是否也应该对之感兴趣的话,那么你会遇到一个问题:
    别人对你的命也不感兴趣,按照前述,你也不该对自己的命感兴趣。
    artandlol
        28
    artandlol  
       2020-07-30 16:39:36 +08:00 via Android
    五年以后,你如果还感兴趣再来聊什么是感兴趣。
    @ungrown
    fuxiuyin
        29
    fuxiuyin  
       2020-07-30 17:06:07 +08:00   ❤️ 1
    @spcharc 对个人用户意义可能不大,对企业来讲还是有用的。应用场景催生解决方案,这些东西能诞生在 wintel 而不是 google 、linux,也是这两家都有很大的企业市场。这两家联手的企业市场是,企业买硬件然后买软件使用权,最终形成了企业有自己的几个服务器,拥有硬件的完全控制权但是只有软件的使用权,比如以前经典的 Outlook,sharepoint,现在的 windows 365,azure stack 。而且这种使用场景是要求,企业只需要有最基础的硬件维护人员而不需要其他 IT 人员,所以所有的安全都得 MS 和 Intel 做,要去防止这些能接触到硬件的人欺负企业上下谁都不懂而使坏,偷看其他雇员的信息呀,售卖企业的用户的数据呀。wintel 的好多安全措施都是为这种场景搞得,就像最开始的 windows AD,credential management,对零售个人用户意义不大。
    ysc3839
        30
    ysc3839  
       2020-07-30 17:13:03 +08:00 via Android
    @Osk 那些人不反对移动设备锁 BL,估计是知道自己怼不过厂商及广大用户。
    目前的环境是大部分用户不需要且不关心这个开放性,少部分用户还会主动为封闭辩护,比如“我信得过这个厂商,我就要厂商帮我管着应用,避免应用干坏事”。
    jim9606
        31
    jim9606  
       2020-07-30 17:52:09 +08:00
    @shijingshijing
    x86 这边跟 iBoot 对应的应该是 Intel Boot Guard 吧。主板生产时 fuse 在 PCH 上,由 Boot Guard 验证 UEFI 固件的其余部分,固件到 OS Loader 用 Secure Boot 。

    initramfs 不验证很正常吧,各家 OS 的 Secure Boot 好像都只管内核态的代码,用户态默认都不验证的,initramfs 里要加载的 ko 都是要验证签名的吧,真要连这个都检查得给 FS 上 dm-verify 了。

    至于说增加攻击面,我觉得就像说不支持密码的软件就没有密码安全漏洞一样,有安全机制总比没有好,它能成为一个问题是因为我们期望它有安全性。如果一开始不期待它安全,那就不是安全问题了。
    Osk
        32
    Osk  
       2020-07-30 18:24:04 +08:00 via Android
    @jim9606 secure boot 我猜微软是想配合 bitlocker 等安全手段使用的,毕竟启用了 secure boot 内核安全了,但启动个 pe 往 c 盘里放个木马什么的就喜剧了,secure boot 也保不了。

    Linux 这边只使用 secure boot 可以说真没啥意义,和 Windows 只使用 Secure Boot 一样,纯粹添堵。但一旦启用 luks 加密 / 后,不验证 initramfs 的风险就变得极大了,secure boot 信任 shim, shim 信任 kernel,但不验证 initramfs,initramfs 可以被修改加入恶意代码,比如添加一个脚本往解密后的 rootfs 植入恶意程序,或者窃取 luks key,这些攻击的成本都极低。

    而 windows 的 bootmgr 好像没有类似的风险,毕竟功能少,攻击面少,不像 grub/initramfs 太过强大。(这里待验证,也许 bootmgr 有类似的风险但我没了解到,也不排除 bootmgr 在未来出现漏洞)

    对于这个问题,systemd bootloader 有一个很有趣的解决方案,archlinux 上可以很方便地将 bootloader + kernel + initramfs + intel ucode + kernel cmdline 打包到一个 efi 文件中,然后对整个 efi 文件 secure boot 签名,安全上很不错,然而操作太麻烦,且需要自己生成 secure boot 的各种证书。
    Osk
        33
    Osk  
       2020-07-30 18:25:44 +08:00 via Android
    @Osk 打错了,应该是 secureboot/firmware -> shim -> grub2 ->kernel,漏了一个 grub2
    jim9606
        34
    jim9606  
       2020-07-30 19:20:09 +08:00
    @Osk windows 文档对标准硬件安全性的要求是支持内存完整性+TPM+Secure Boot+DEP+UEFI MAT,说还是防范恶意软件,可能是认为内核空间安全是 OS 该负责的事,userland 的安全就不是 OS 负责了。

    你说的单文件 EFI 是 EFI Boot Stub 。这个虽然是跳过 GRUB,但主要是更新太麻烦,而且生成的 efi 太大了,对于通常就 100M 左右的 ESP 分区是有点危险。Ubuntu 在有 dkms 模块时会自动配置 MokManager 负责为自编译的模块签名。不过个人觉得也就是为了兼容关不了 Secure Boot 的系统,安全性上意义不大。
    bitdepth
        35
    bitdepth  
       2020-07-30 19:29:18 +08:00 via iPad
    @Osk 開源社區非常討厭任何人插入任何未知的東西到自己的機器上。你估計沒有見過歐洲的狂熱份子,去一趟 FOSDEM,很多的
    bootloader lock 在 xda developer 用戶中也是不受歡迎的
    只不過 PC 特為目標,大家認知是 PC 比較有主控權的領域,也有一些沒反成功,比如 Intel ME
    shijingshijing
        36
    shijingshijing  
       2020-07-30 21:29:15 +08:00
    @jim9606 不好说苹果的 iBoot 和 Intel Boot Guard 是严格对应的,首先是 iBoot 有时候会被用来称呼苹果移动设备的整个启动系统,有的时候又特指 Stage 2 的启动系统,要看上下文;其次,我看了一下 Boot Guard 的内容,主要是从 ACM 转到 IBB 的时候起作用,这个感觉更接近于苹果的 LLB 。

    其实核心还是逐级验证这个思想,Secure Boot 本身其实描述的是一个流程或者一个 feature,苹果貌似没有专门的称呼去描述这个,但验证过程是存在的。
    shijingshijing
        37
    shijingshijing  
       2020-07-30 21:58:18 +08:00
    @bitdepth 不能说 Intel ME 没有反成功,其实现在很多工作站比如 HP 的 Z 系列都在 UEFI/BIOS 里面提供了永久关闭 ME 的选项,还有不少第三方工具能够清理或者削弱 ME,至于是否真正关闭了不好说,但我觉得这至少算是一个进步了。Intel 的 ME 能够做大主要还是因为发现的太晚了,Intel 悄悄把生米煮成了熟饭,更新了好几代 ME,才有人发现 PCH 里面还有一套位于 Ring -3 的操作系统。

    我其实不反对这套验证机制,我真正反对的是这些东西不受用户自己控制,如果这一套验证机制是开源的,我巴不得每台设备上面都部署。
    ungrown
        38
    ungrown  
       2020-09-10 14:45:01 +08:00
    @artandlol 谁允许你偏题找台阶溜的?

    前面当你阴阳怪气地写出“资本家再想怎么挣钱,你在想怎么让你电脑安全。也没人对你电脑感兴趣”这样的评论的时候,你是在聊什么是感兴趣?

    放肆!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:53 · PVG 06:53 · LAX 14:53 · JFK 17:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.