Malware capaz de grabar vídeo con el led de la cámara apagado (PoC en portátil ThinkPad X230)

Apenas hace un mes Andrey Konovalov (xairy.io) dió una charla en Seul sobre cómo "destripó" un ThinkPad X230 para llegar a poder actualizar el firmware de la cámara web a través de USB (la cámara web X230 está conectada a través de USB internamente) para agregar la capacidad de controlar arbitrariamente el LED. De esa manera, un malware podría grabar videos a través de la cámara web sin la indicación del LED y buena cuenta de ello lo tenéis en este repo de Github: https://github.com/xairy/lights-out

La cámara web que se utiliza en ThinkPad X230 (y en algunas otras computadoras portátiles de la misma época) se basa en el controlador de cámara USB Ricoh R5U8710. Este controlador almacena una parte de su firmware, la parte SROM, en el chip flash SPI ubicado en la placa de la cámara web. El controlador también permite actualizar el contenido del chip SPI a través de USB.

El LED de la placa de la cámara web X230 está conectado al pin GPIO B1 del controlador R5U8710. El puerto GPIO B está asignado a la dirección 0x80 en el espacio de memoria XDATA de la CPU basada en 8051 dentro de R5U8710. Por lo tanto, al cambiar el valor en esa dirección, cambia el estado del LED. Esto funciona independientemente de si la cámara web está transmitiendo video en ese momento o no.

Las herramientas proporcionadas en el repositorio permiten actualizar el firmware personalizado con un llamado "implante universal" controlado por USB en el chip SPI de la placa de la cámara web. Este implante permite escribir datos controlados en direcciones arbitrarias (dentro del espacio de memoria XDATA) y llamar a direcciones arbitrarias (dentro del espacio de memoria CODE; alias XDATA a partir del desplazamiento 0xb000).

El implante universal se puede utilizar para:
  • Cargar dinámicamente un implante de segunda etapa dentro de la memoria del controlador de la cámara y ejecutarlo (originalmente utilizado para fines de ingeniería inversa);
  • Controlar directamente el LED de la cámara web.
Herramientas:
  • srom.py — lee y escribe la parte SROM del firmware de una cámara web basada en Ricoh R5U8710 a través de USB.
          Nota: La cámara web solo carga el firmware SROM durante su arranque. Por lo tanto, deberá                 apagar y encender la computadora portátil (apagarla por completo, no solo reiniciarla) para que se           cargue el firmware actualizado;
  • patch_srom.py — aplica un parche a la imagen SROM de la cámara web FRU 63Y0248 (no de la cámara web X230 original) para agregar el implante universal.
          Nota: Esta herramienta requiere modificaciones para funcionar con la imagen SROM de la cámara           web X230 original. Sin embargo, la imagen SROM FRU 63Y0248 (opcionalmente, con el                      implante agregado) también se puede flashear en la cámara web X230 original;
  • fetch.py ​​— recupera el contenido del espacio de memoria IRAM, XDATA o CODE a través de USB mediante un implante de segunda etapa que se carga dinámicamente a través del implante universal;
  • led.py — enciende o apaga el LED de la cámara web sobrescribiendo el valor en la dirección 0x80 en XDATA a través del implante universal.

Comentarios