
ThinkPad X230向けのウェブカメラLED制御ツール
このリポジトリには、ThinkPad X230のウェブカメラLEDをラップトップへの物理的なアクセスなしでソフトウェア制御できるようにするツールが含まれています。 これらは、マルウェアがLED表示なしでウェブカメラ経由でビデオを録画できることを実証するために作成されました。
これは、USB経由でウェブカメラのファームウェアを書き換えることで実現されます(X230のウェブカメラは内部でUSB接続されています)。これにより、LEDを任意に制御する機能が追加されます。 この手法は、他の多くのラップトップにも影響する可能性があります。なぜなら、ウェブカメラをUSBで接続し、そのファームウェアの書き換えを許可することは、ラップトップメーカーの間で一般的な設計パターンだからです。
詳細については、私がPOC 2024で行った"Lights Out: Covertly turning off the ThinkPad webcam LED indicator"トーク(pdf)を参照してください:X230ウェブカメラのファームウェアを書き換える方法の発見、ファームウェアのリバースエンジニアリング、LED制御用インプラントの追加、そして他のラップトップへの適用可能性に関するメモ。
注意:ウェブカメラのファームウェアを書き換えるとウェブカメラが文鎮化する可能性があります。これらのツールは注意して使用してください。
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メモリ空間内)への制御されたデータの書き込みと、任意のアドレス(CODEメモリ空間内。オフセット0xb000以降でXDATAとエイリアスされます)の呼び出しを可能にします。
ユニバーサルインプラントは以下の用途に使用できます:
カメラコントローラのメモリ内にセカンドステージインプラントを動的にアップロードして実行する(元々はリバースエンジニアリングの目的で使用されていました);
ウェブカメラのLEDを直接制御する。
詳細については、トークのスライドを参照してください。
srom.py — Ricoh R5U8710ベースのウェブカメラのファームウェアのSROMパーツをUSB経由で読み書きします。
注:ウェブカメラは起動時にのみSROMファームウェアを読み込みます。 そのため、更新されたファームウェアを読み込ませるには、ラップトップの電源を入れ直す(再起動だけでなく完全にシャットダウンする)必要があります;
patch_srom.py — FRU 63Y0248ウェブカメラ(元のX230ウェブカメラではありません)のSROMイメージにパッチを適用して、ユニバーサルインプラントを追加します。
注:このツールは、元のX230ウェブカメラのSROMイメージで動作させるには変更が必要です。
ただし、FRU 63Y0248のSROMイメージ(必要に応じてインプラントを追加したもの)は、元のX230ウェブカメラにも書き込むことができます;
fetch.py — ユニバーサルインプラントを介して動的にアップロードされるセカンドステージインプラントを通じて、IRAM、XDATA、またはCODEメモリ空間の内容をUSB経由で取得します;
led.py — ユニバーサルインプラントを介してXDATAのアドレス0x80の値を上書きすることで、ウェブカメラのLEDをオンまたはオフにします。
srom/x230.bin — 元のX230ウェブカメラモジュールのSROM内容(FRU不明;ボード上の19N1L1NVRA0Hマーキング);
srom/63Y0248.bin — FRU 63Y0248ウェブカメラモジュールのSROM内容;
code/63Y0248.bin — FRU 63Y0248ウェブカメラモジュールからリークされたCODEメモリ空間の内容。
注:Boot ROMはオフセット0xb000より下方にあり、元のX230ウェブカメラモジュールのBoot ROMと同一です。