
Инструменты для управления светодиодом веб-камеры на ThinkPad X230
Этот репозиторий содержит инструменты, позволяющие получить программный контроль над светодиодом веб-камеры на ThinkPad X230 без физического доступа к ноутбуку. Они были созданы как практическая демонстрация того, что вредоносное ПО может записывать видео через веб-камеру без индикации светодиода.
Это работает путём перепрошивки прошивки веб-камеры по USB (внутренне веб-камера X230 подключена через USB) для добавления возможности произвольного управления светодиодом. Этот подход, вероятно, затрагивает многие другие ноутбуки, поскольку подключение веб-камеры через USB и разрешение перепрошивки её прошивки является распространённым шаблоном проектирования у производителей ноутбуков.
См. доклад «Lights Out: Covertly turning off the ThinkPad webcam LED indicator» (pdf), который я представил на POC 2024, за подробностями: обнаружение способа перепрошивки прошивки веб-камеры X230, обратная разработка прошивки, добавление импланта для управления светодиодом и заметки о применимости этого подхода к другим ноутбукам.
Примечание: перепрошивка прошивки веб-камеры может вывести её из строя, используйте эти инструменты с осторожностью.
Веб-камера, используемая на ThinkPad X230 (и на некоторых других ноутбуках той же эпохи), основана на USB-контроллере камеры Ricoh R5U8710. Этот контроллер хранит часть своей прошивки, часть SROM, на микросхеме SPI-флеш-памяти, расположенной на плате веб-камеры. Контроллер также позволяет перепрошивать содержимое SPI-микросхемы по USB.
Светодиод на плате веб-камеры X230 подключён к выводу GPIO B1 контроллера R5U8710.
Порт GPIO B отображается на адрес 0x80 в адресном пространстве XDATA CPU на базе 8051 внутри R5U8710.
Таким образом, изменение значения по этому адресу меняет состояние светодиода.
Это работает независимо от того, передаёт ли веб-камера видео в данный момент или нет.
Инструменты, предоставленные в этом репозитории, позволяют прошить пользовательскую прошивку с так называемым «универсальным имплантом», управляемым через USB, на SPI-микросхему на плате веб-камеры.
Этот имплант позволяет записывать управляемые данные по произвольным адресам (в пределах адресного пространства XDATA) и вызывать произвольные адреса (в пределах адресного пространства CODE; с алиасингом с XDATA, начиная со смещения 0xb000).
Универсальный имплант может использоваться для:
динамической загрузки импланта второй стадии в память контроллера камеры и его выполнения (изначально использовалось для целей обратной разработки);
непосредственного управления светодиодом веб-камеры.
Более подробную информацию см. в слайдах доклада.
srom.py — чтение и запись части SROM прошивки веб-камеры на базе Ricoh R5U8710 через USB.
Примечание: веб-камера загружает прошивку SROM только во время своей загрузки. Таким образом, вам потребуется полностью выключить и снова включить ноутбук (полное завершение работы, а не просто перезагрузка), чтобы обновлённая прошивка была загружена;
patch_srom.py — пропатчивает образ SROM из веб-камеры FRU 63Y0248 (не из оригинальной веб-камеры X230) для добавления универсального импланта.
Примечание: для работы с оригинальным образом SROM веб-камеры X230 этот инструмент требует доработки.
Однако образ SROM FRU 63Y0248 (опционально, с добавленным имплантом) также может быть прошит на оригинальную веб-камеру X230;
fetch.py — получает содержимое адресного пространства IRAM, XDATA или CODE через USB с помощью импланта второй стадии, который динамически загружается через универсальный имплант;
led.py — включает или выключает светодиод веб-камеры, перезаписывая значение по адресу 0x80 в XDATA через универсальный имплант.
srom/x230.bin — содержимое SROM оригинального модуля веб-камеры X230 (FRU неизвестен; маркировка на плате 19N1L1NVRA0H);
srom/63Y0248.bin — содержимое SROM модуля веб-камеры FRU 63Y0248;
code/63Y0248.bin — содержимое адресного пространства CODE, полученное с модуля веб-камеры FRU 63Y0248.
Примечание: Boot ROM находится ниже смещения 0xb000 и идентичен Boot ROM на оригинальном модуле веб-камеры X230.