WeHack BBS
关于自由的GNU/Linux发行版对于“电路式”私有固件的处理方式? - 可打印的版本

+- WeHack BBS (https://bbs.wehack.space)
+-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html)
+--- 版块: GNU/Linux 讨论区 (https://bbs.wehack.space/forum-6.html)
+--- 主题: 关于自由的GNU/Linux发行版对于“电路式”私有固件的处理方式? (/thread-310.html)



关于自由的GNU/Linux发行版对于“电路式”私有固件的处理方式? - nadebula - 10-14-2021

前几天从破烂堆里回收来的一台E130,自带的是Realtek 8188CE(螃蟹卡中最弱的型号之一)。我先后在该机上测试了Trisquel 10和Debian testing,发现该卡在这两种不含私有固件的发行版上都能工作。由于已知该卡(如同绝大多数非Atheros卡一样)依赖私有固件,而操作系统中又不含私有固件,唯一的可能就是该固件存在于卡上某处(非易失性存储器),它被加载到了该卡上的外设专用内存,并且被该卡上的专用处理器运行。

由于PCI/e外设具有DMA能力,因此它们的私有固件极其危险(尤其是像无线网卡这样具有通讯能力的)。详情参见Hardened Linux翻译项目中的一篇关于外设固件的威胁的博士论文中译版。本人近日向相关发行版反映过此问题,得到的答复大致都是该固件属于不可变的“电路式”固件,因而允许加载其自带固件并未违反FSF相关指导原则(RMS本人于多年前将储存于外设中的只读存储器中的固件看作“电路”)。

本人的问题是,对于具有DMA能力的恶意硬件(非自由设计的硬件,例如非Atheros无线网卡),假设该硬件本体上的某个非易失性存储器中保存了一份固件镜像,它是否真的可以看作“电路”,即它是否为真正不可变的,或者该非易失性存储器是否真正为完全只读的,运行于主机CPU上的操作系统及其上的各种安全机制无法得知。本人认为既然私有固件厂商不能自证清白,用户就只能将其看作恶意并且极端危险的。

这会带来其他潜在问题,例如其他硬件厂商可以效仿,将私有固件置于硬件本体之上的某个并非完全只读的非易失性存储器之中,然后借助DMA进行偷偷更新(以及进行各种其他攻击)。另外如果大多数私有硬件厂商都采取这种策略,并且所谓自由的GNU/Linux发行版仍然放行此类固件,这些自由发行版对于私有固件的拒绝是否还有意义等问题都有待探讨。

当然也可根据外设的危险程度进行分类,例如严格禁止PCI/e外设自带的私有固件被加载,但是对于不具备DMA能力的USB外设(例如蓝牙控制器)则可适当放宽。

本人持续关注各方回应,同时欢迎各位就此问题进行讨论。


RE: 关于自由的GNU/Linux发行版对于“电路式”私有固件的处理方式? - vimacs - 10-14-2021

固件可以做为一个处理器的boot ROM直接写到一个SRAM里面,最后流片出来,这样看起来也像一个“纯电路”的实现。
而且DMA也可以做一个纯电路的实现,用户也很难知道这样实现的DMA就没有恶意行为。


RE: 关于自由的GNU/Linux发行版对于“电路式”私有固件的处理方式? - nadebula - 10-15-2021

最近一次更新Debian testing之后发现该螃蟹卡不再可用,似乎是Debian堵住了这个重大安全漏洞。但是不确定今后是否仍将如此,本人会持续进行测试。
Trisquel 10测试版仍然会加载该固件。本人也向其社区反映过多次,但是他们似乎对于外设固件的威胁不以为然。


RE: 关于自由的GNU/Linux发行版对于“电路式”私有固件的处理方式? - nadebula - 10-15-2021

我最近观察到这样一种现象:
1)前天发现Debian testing更新后,此螃蟹卡不再可用
2)我想测试更新后的Trisquel 10测试版,发现螃蟹卡仍然可用
3)回到Debian,发现螃蟹卡又变为可用
4)关机静置若干小时,再次启动Debian,再次变为不可用
昨天重复实验,将Trisquel 10换成Ubuntu等非自由发行版,观察到类似现象。
结论:此螃蟹卡拥有一块易失性存储器用于“缓存”该固件。既然是易失性的,它不可能完全只读。既然可写,它就不能被看作“电路”,而是重大安全漏洞。
当然,此螃蟹卡上可能确实还有一块存储器用于保存一份原始版本的固件,并且此存储器可能确实是只读且非易失性的。但是一旦该固件被私有操作系统(例如Windows或Ubuntu)加载,它就会被“缓存”下来,从而被Debian等(准)自由发行版加载。Trisquel虽然是FSF官方认证的自由发行版,但是对于此类“板载”固件的处理反而相当随意。
在移植coreboot或者去除白名单之前,本人可以物理拆除该卡,但是初学者未必能够理解这些,并且不是所有PCI/e无线网卡都能物理拆除,较新的超极本往往板载了除硬盘(SSD)外的全部模块(之所以允许用户拆除硬盘,可能和私有固件的硬盘加密功能有关,防止遗忘口令以后必须更换主板)。


RE: 关于自由的GNU/Linux发行版对于“电路式”私有固件的处理方式? - vimacs - 10-15-2021

(10-15-2021, 10:09 AM)nadebula 提到: 我最近观察到这样一种现象:
1)前天发现Debian testing更新后,此螃蟹卡不再可用
2)我想测试更新后的Trisquel 10测试版,发现螃蟹卡仍然可用
3)回到Debian,发现螃蟹卡又变为可用
4)关机静置若干小时,再次启动Debian,再次变为不可用

这种问题有点像iwlwifi在使用了Windows,并启用了快速启动的机器中的一个问题。
https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi#about_dual-boot_with_windows_and_fast-boot_enabled


RE: 关于自由的GNU/Linux发行版对于“电路式”私有固件的处理方式? - nadebula - 10-15-2021

刚刚发现“静置”这招对于Debian也不是100%有效,刚才启动Debian之后发现螃蟹卡“诈尸”了。在上次表现正常(即固件未被加载)之后并未启动过私有操作系统。看来唯一的方式是将其物理拆除了……
这似乎能够证明该螃蟹卡上的存储器并非真正只读(且其内容确实发生了变化),否则每次启动Debian时的行为应该不受影响。即使RMS关于“电路”的定义仍然准确,该固件也不可视为“电路”。
在移除白名单(包括移植coreboot)之前,该机能用的最好的无线网卡是Intel 2230,它带一个无需加载固件的蓝牙。不过我不太打算为了蓝牙而购入此卡。


RE: 关于自由的GNU/Linux发行版对于“电路式”私有固件的处理方式? - vimacs - 01-23-2022

昨天有篇博文刚好提到所谓 RYF 对于私有固件的处理方式。提到 “电路式” 私有固件和可更新的私有固件一样是私有软件,而且放在电路里面无法更新,更可能出现无法修复的安全问题。

https://ariadne.space/2022/01/22/the-fsfs-relationship-with-firmware-is-harmful-to-free-software-users/