技术解析

Linux kernel Intel driver bug 导致大量笔记本 BIOS 被锁,谁来背锅?
0
2021-06-24 18:12:16
idczone
  1. 2 月份引入 Bug 的 Intel driver 作者? http://lists.infradead.org/pipermail/linux-mtd-cvs/2017-February/010359.html

  2. 6 月份把 bug 标记为 normal 的 kernel bug team ? https://bugzilla.kernel.org/show_bug.cgi?id=195951

  3. 10 月份导致大规模爆发的 ubuntu 17.10 ? https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1734147 (貌似新闻标题都甩锅给 ubuntu,个人感觉挺冤,而且 Fedora 也有。)

  4. BIOS 芯片厂家? bug 作者提到了 GigaDevice/Winbond flash chips.

  5. Intel UEFI BIOS team? https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/thinkpad-s-series-laptops/thinkpad-s440/downloads/ds036070

(Fix) Security Fix: Intel TA201708-001 for SPI Write status command.
(Fix) Add Back Flash Prevention flag for PSIRT-TA-201708-001.

其它?

元芳们怎么看?


另外请教下这份有问题的 dmesg log 哪里有问题?看晕了。。。
https://bugzilla.kernel.org/attachment.cgi?id=257713

标题党
Ubuntu 的 bug 里也说,impact minimal
而且 6 月初爆 bug,7 月底修好,2 个月速度算快了

如果买过维护服务,找维护厂商,如果没有,看 GPL:
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

为 LZ 标题党道歉,并不是真的怪 linux/ubuntu/intel driver,只是纯粹好奇技术上的 root cause。
虽然 7 月底修好了 bug,但是这个 bug 4.11 引入,4.14 修复,用了 4.13 的 Ubuntu Artful 表示很冤。
https://github.com/torvalds/linux/commit/87eb832ae9748fab00588b98c2e33e89de065438impact minimal ”在哪里?我看到的是:
"It's very serious"
Importance: Critical

我想知道,被锁之后只有重写固件才能恢复吗?

并不是,只是清了设置而已
除非你之前设了密码

清了设置的话那重新设一下就好了,大多数情况下默认设置也没什么问题,感觉影响也不算太大。
真正的问题是导致不能开机,我之前就试过。EFI 是可以改写启动项的,我自己写了个程序修改,结果写入了错误的数据,结果后面开机刚过完自检就重启,不停这样循环,取下电池没有用,最后用编程器重写了一次才好。


Ubuntu Artful Aardvark 的支持周期到 2018 年 7 月,用了一个在 2017 年 12 月就 EOL 的内核版本,这怪到 Ubuntu 头上不冤

协议只能推掉法律责任,不能防止被骂。

我就挺好奇,主板上的 SPI Flash 关 Intel 什么事?又不是它出品的,它为嘛要费事写个驱动呢?另外,在内核中集成这么个东西真的好么?难道是为了便于在 linux 下更新 BIOS 固件?如果遇到恶意入侵,root 权限被攻破,是否会导致 BIOS 损坏?

我记得前上上月,我玩 Fedora 的时候,还真遇到过一次,BIOS 被搞坏了,幸好是技嘉主板,有双 BIOS,系统重启时自动恢复成老版本的了。



不止设置被清,而且无法保存,也可能损坏。( launchpad Intel driver 作者的回复)
1. Flash is left locked. This makes the BIOS impossible to save
settings.
2. Flash corrupted
lenovo 官方部分型号可以 ISO 烧光盘恢复,或者 rEFInd 绕过启动限制,但是目前大多数自行修复的都是拆机拆焊 BIOS 用编程器重刷。
个人认为目前最接近真相的应该是
```
I think we are off on the wrong track. This is fundamentally a CVE against Insyde Software BIOS and possibly other vendors. Any attacker with kernel mode access could do the same thing, regardless of Linux install. I am not sure, but it is possible someone with admin access to Windows could create a driver to do the same thing. Any brave pentesters out there want to give it a try and write it up?
If Paul Sladen in is correct, this is definitely a CVE against the BIOS.
```

https://github.com/torvalds/linux/blob/master/Documentation/mtd/intel-spi.txt
不只 linux,windows 上也可以直接更新 bios,没发现厂家提供的 bios 很多都是.exe 文件吗。

我觉得在操作系统下更新 BIOS 是走进了邪路,主板如果没有双 BIOS,那么,恶意软件损毁主板将不再是设想,而一般用户,基本都不具备电子电路知识,也没有工具,自己刷 BIOS 芯片肯定不现实。
BIOS 最好还是通过主板集成的刷新程序来操作,或者通过厂家发布的自带 DOS 的 ISO 文件来操作,而不应该在任何操作系统中提供可写接口。

恶意软件如果想要破坏你的系统,有一万种办法,这么做只能给更新 bios 带来麻烦,并不会有额外的安全收益
与破坏 bios 相比,覆盖硬盘上的所有数据杀伤力要大得多
事实上,绝大多数的恶意软件都会尽力保证你的系统(看上去)正常,而不是把你的电脑搞坏。

我的意思是,只要存在这种可能性,就是可怕的。硬盘数据对个人用户来说,真不是太重要,反正最重要的东西平时基本都是有好几个备份,而 BIOS 弄坏了,金钱损失不说,至少得折腾好几天才能弄好吧?

有内核高手么?删除掉"/lib/modules/KERNEL_VERSION/kernel/drivers/spi/"的话,能否去除这种风险?

fix 早就有了: https://github.com/torvalds/linux/commit/d9018976cdb6eefc62a7ba79a405f6c9661b08a7
保险的做法是避开 4.11/4.12/4.13 这 3 个版本
4.13 ubuntu fix: ( https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1734147 )
linux (4.13.0-21.24) artful
linux-hwe-edge (4.13.0-21.24~16.04.1) xenial
linux-oem (4.13.0-1012.13) xenial

坐飞机可能掉下来,坐车可能撞死,但是没有人会因此就不出门 -> 存在可能性并不可怕
个人数据不重要,数据可以备份 -> 勒索病毒作者表示很欣赏这种想法
BIOS 本身也会有 BUG,主板出厂后,BIOS 也需要更新才能支持新的硬件。如果 BIOS 的更新很麻烦,意味着成本提升 -> 无论 BIOS 是否损坏,都需要支付更多的金钱

你说的这是近年年来的趋势,黑客也要养家
还记得 cih 么?不为别的,就是炫技
想要勒索商业公司,搞挂他们服务是个好主意

双 BIOS 也不太可行吧,BIOS 怎么知道自己有没有坏?最终还是要用户介入,那用什么条件触发呢?

你应该去了解一下技嘉的双 BIOS 技术,如果我没记错的话,它的备份是任何途径都无法写入的,系统加电时,BIOS 会自我检查完整性(可能是 hash 或 CRC 校验之类的),如果受损,就自动从备份复制。

你的比喻跟我说的根本不是一回事。你说的那些可能性,是偶然因素,是人无法控制的;而我说的这种技术上的风险,则是完全有可能将其消灭在萌芽状态的,从根本上杜绝这种可能。而且,从硬件上让 BIOS 无法被操作系统刷新,并不会给用户增加多少困扰,用户完全可以通过更安全的手段去更新 BIOS。
其实,我又要散播点阴谋论了,我猜让操作系统可以刷 BIOS 这事就是 Intel/AMD 等这几家 PC 核心硬件厂商主导搞的,它们分别搞了 ME/PSP 后,担心用户不会按它们的意愿主动保持更新,所以就搞了这个,方便后台静默刷新 BIOS。
而它们为嘛要费尽心机弄这个吃力不讨好的 ME/PSP 呢?估计就得问问 NSA 了。

附加:至少是 Win98 以前(应该是 ME/PSP 出世的时间点差不多),那时在操作系统下是不可能通过应用程序来刷新 BIOS 的,那么多年,用户也没觉得通过特制软盘或光盘来更新 BIOS 是件麻烦事。

如果要禁用 Linux BIOS 更新,自己编译内核,理论上应该关闭"SPI support"就好了
https://github.com/torvalds/linux/blob/master/drivers/spi/KconfigOS 更新 BIOS 需求,应该主要是批量维护方便,顺便照顾下个人用户特别 windows 小白用户。


这种认识是一种误区。
CIH 不就是 Win95 下面修改 BIOS 么?
在 DOS 下面更新 BIOS 和在 Windows 这样的操作系统下面更新 BIOS 其实没有明显的不同。
要理解这个问题首先要理解 CPU 工作模式和 CPU 执行指令的特权级别,对于 Intel 的 X86 CPU 来说,启动时首先工作在实模式,传统的 BIOS 和 DOS 就是运行在实模式下,实模式本身没有任何特殊的保护措施,允许执行任何可以执行的指令(当然也包括刷写 BIOS 的指令)。
对 Windows 这一套东西来说,启动 Windows 时,Windows 会把 CPU 切换到保护模式。CPU 设计时保护模式下有 RING3-RING0 一共 4 个特权级别,RING0 这个级别下允许 CPU 执行任何支持的指令(其实和实模式差不多,虽然也有些区别,不过这里不展开了)。对于 Windows 来说,Windows 只把所有的程序划分为 RING0 和 RING3 两种级别,用户态是 RING3,内核态是 RING0,所以只要加载(或者是使用)了 Windows 驱动,理论上就可以干任何事情。
理解这些问题之后就会发现,无论是 DOS 下面更新 BIOS 还是在 Windows (或者其他操作系统上)更新 BIOS 都是一样的,而且实际上现代操作系统提供了各种各样的机制可以提供更多的保护措施。
历史上因为 CIH 的原因,确实有那么一段时间大家对 BIOS 的保护是十分重视的,那个时候会在主板提供硬件保护开关来阻止写入 BIOS,只不过现代不是那么重视这个问题了而已。

对对对,这点我确实有点胡言乱语,我忘记了当年那些用来更新 BIOS 的软盘,其实也是 DOS 启动的,还是运行在 OS 上的应用程序。

技嘉备份 BIOS 可以写入,只是没有对外开放接口:
开机按 Alt+F10,会把主 BIOS 的内容复制到备份 BIOS

没猜错的话,Intel 开始给自己 Active Management Technology 擦屁股了,呵呵~
其实最好的方法,还是以前的老路子,硬跳线 BIOS Protection,只有在跳线帽短接两个 pin 之后,BIOS 才能写入。
这个更新,估计 Intel 的 Management Engine 这个大后门也只是修修补补,隐藏的更深,不可能拿到的。
这个锅,就是 Intel 背,Ubuntu 不过是更新的激进了一点。

看 7 楼我之前遇到的问题。这个时候固件本身是没有问题的,但是其中代码的 bug 导致其无法正常启动。像联想这个估计也类似,固件本身是完好的。那双 BIOS 不能起作用,还是得靠用户触发才行。

任何固件都应当被设计为在可读写存储器数据完全无法识别的时候正常工作(至少是恢复到出厂设置)。
BIOS 时代大家都是这么做的,怎么到了 UEFI 都疯狂加功能,把剩下的都丢了?

想特索商业公司,最简单的是 ddos,通过其他手段搞挂服务都是非常容易被查出来的
另外,如我前面所说,搞挂服务有一万种办法,和 BIOS 安全没多大关系

如果某个 openvz 或者容器云,某个提权漏洞配合这个漏洞,你想想看

想多了……任何云服务都不可能让你操作物理机的 BIOS 的,否则如何实现隔离?
如果你说拿到了物理机的权限,那本来就是为所欲为的事情,风险在于 root 权限而不是可以操作 BIOS

1. 请注意我说的就是容器和 openvz,两者都不是虚拟化,不存在虚拟机的隔离。内核就是共享的。只不过限制了权限来实现隔离。攻破也比虚拟化容易的多。
2. 正常就算被攻破,也不过是清空数据,重新部署罢了。然而现在这个漏洞可以使 BIOS 损坏。想恢复不是一时半会。
如果按你的说法的话,很多驱动 bug 都可以不修的,很多系统服务的 bug 也是可以不修的。因为都需要 root 权限触发。

我什么时候说过 bug 可以不修?你觉得 BIOS 可以操作和更新是一种 bug 吗?
请注意:我回复的是有人认为 BIOS 不应当能够被修改的观点,和主楼提到的 bug 没有任何关系。

另外,据我了解的情况来看,这个 bug 是可以通过重刷 BIOS 修复的,并没有损坏硬件。这和破坏操作系统并没有本质的区别。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服