安全工程师披露一种关闭摄像头LED灯悄悄录像的方法
Linux 安全工程师Andrey Konovalov在POC(Power of Community)2024会议上介绍了秘密关闭ThinkPad摄像头LED指示灯并录像方法。
他开发了一种概念验证程序,通过重刷 ThinkPad X230 摄像头固件的方式,可以在不实际接触笔记本的情况下关闭笔记本的 LED 指示灯。
这个概念性验证程序被称为“Lights Out”,程序的源代码已经发布在了 GitHub 中,并且提供了相关的PDF文档用于验证和解释其运行过程。
工程师 Andrey Konovalov 实际演示了在不实际接触笔记本电脑的情况下,对一台 ThinkPad X230 上的网络摄像头的LED灯进行软件控制。
而这么做的目的,则是为了提醒广大用户注意,恶意入侵者可能也会以类似方式在没有LED指示的情况下,偷偷通过网络摄像头录制视频。
对这一过程总结归纳:发现刷新X230网络摄像头固件方法、对固件逆向工程、添加LED控制植入物,将该方法适配在其他笔记本电脑上。
一、原理解析
这种远程攻击手段通过USB刷新网络摄像头固件(ThinkPad X230网络摄像头通过USB内部连接)来实现,从而添加任意控制LED的功能。
这种做法可能会影响到许多其他品牌的笔记本电脑,因为通过USB连接网络摄像头并允许刷新其固件是笔记本电脑制造商的常见设计模式。
原因在于,ThinkPad X230(以及同一时代其他几款笔记本电脑)上使用的网络摄像头都采用了基于 Ricoh R5U8710 USB 摄像头控制器。
该控制器将其固件的一部分即SROM部分存储在位于网络摄像头板上的SPI闪存芯片上,且其控制器还允许通过USB刷新SPI芯片的内容。
X230网络摄像头板LED连接R5U8710控制器GPIO B1引脚,GPIO B端口映射R5U8710内部基于8051的CPU的XDATA存储空间地址0x80。
因此,可以通过该地址的值来改变LED的状态,当然无论其网络摄像头此刻是否正在播放视频,这都是有效的。
工程师提供的工具可实现利用USB控制的所谓“通用植入物”将定制固件刷新到网络摄像头板的SPI芯片上,实现将受控数据写入任意地址。
写入的任意地址(在XDATA存储空间内)和调用任意地址(在代码存储空间内;从偏移量0xb000开始与XDATA混叠),这些都可以做到。
这个所谓“通用植入物”可用于:在相机控制器存储器内动态上传第二阶段植入并执行(最初用于逆向工程);直接控制网络摄像头LED等。
二、植入工具
(一)py源码
1、srom.py:通过USB读写基于 Ricoh R5U8710的网络摄像头固件的srom部分。
注:网络摄像头仅在启动时加载SROM固件,因此需要重启笔记本电脑(完全关机,而不仅仅是重启),以便加载更新的固件;
2、patch _ srom.py:修复来自FRU 63Y0248网络摄像头(并非来自原始X230网络摄像头)的srom图像,以添加通用植入物。
注:该工具需要修改来配合原来的X230网络摄像头SROM图像。
然而,FRU 63Y0248 SROM图像(可选项目,添加了植入物)也可以闪现在原始X230网络摄像头上;
3、fetch.py:通过第二阶段植入从USB获取IRAM、XDATA或代码存储空间的内容,该植入通过通用植入动态上传;
4、led.py:通过通用植入覆盖XDATA地址0x80的值来打开或关闭网络摄像头LED。
(二)内存转储
1、srom/x230.bin:原x230网络摄像头模块的SROM内容(FRU未知;板上的19N1L1NVRA0H标记);
2、srom/63y 0248.bin:FRU 63y 0248网络摄像头模块的srom内容;
3、CODE/63y 0248.bin:FRU 63y 0248网络摄像头模块泄露的代码存储空间内容。
注:引导ROM低于偏移量0xb000,它与原来的X230网络摄像头模块上的引导ROM相同。
三、案例思考
安全工程师 Andrey Konovalov 在 POC 2024 安全会议上使用 ThinkPad X230 这台设备进行演示,要知道这台设备的上市时间是2012年。
而今大部分笔记本电脑都配备了物理摄像头开关或者盖子,不使用时可直接遮盖摄像头,对于使用近三五年上市的笔记本的用户无需顾虑。
但案例又不得不提醒我们,如总书记而言:没有网络安全就没有国家安全,就没有经济社会稳定运行,广大人民群众利益也难以得到保障。