
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로 제어되는 이른바 "유니버설 임플란트(universal implant)"가 포함된 맞춤형 펌웨어를 웹캠 보드의 SPI 칩에 플래시할 수 있게 해줍니다.
이 임플란트는 임의의 주소(XDATA 메모리 공간 내)에 제어된 데이터를 쓰고, 임의의 주소(CODE 메모리 공간 내, 오프셋 0xb000부터는 XDATA와 별칭됨)를 호출할 수 있게 해줍니다.
유니버설 임플란트는 다음 용도로 사용할 수 있습니다:
카메라 컨트롤러 메모리 내에 2단계 임플란트를 동적으로 업로드하고 실행(원래는 리버스 엔지니어링 목적으로 사용됨);
웹캠 LED를 직접 제어.
자세한 내용은 발표 슬라이드를 참조하세요.
srom.py — USB를 통해 Ricoh R5U8710 기반 웹캠의 펌웨어 SROM 부분을 읽고 씁니다.
참고: 웹캠은 부팅 중에만 SROM 펌웨어를 로드합니다. 따라서 업데이트된 펌웨어가 로드되도록 하려면 노트북을 전원 차단(재부팅이 아닌 완전 종료)해야 합니다;
patch_srom.py — FRU 63Y0248 웹캠(원래 X230 웹캠이 아닌)의 SROM 이미지에 유니버설 임플란트를 추가하도록 패치합니다.
참고: 이 도구는 원래 X230 웹캠 SROM 이미지와 함께 작동하려면 수정이 필요합니다.
하지만 FRU 63Y0248 SROM 이미지(선택적으로 임플란트가 추가된)는 원래 X230 웹캠에도 플래시할 수 있습니다;
fetch.py — 유니버설 임플란트를 통해 동적으로 업로드되는 2단계 임플란트를 사용하여 USB를 통해 IRAM, XDATA 또는 CODE 메모리 공간의 내용을 가져옵니다;
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과 동일합니다.