
Hardware backdoors in x86 CPUs
: puertas traseras de hardware en CPUs x86
github.com/xoreaxeaxeax/rosenbridge // domas // @xoreaxeaxeax
project:rosenbridge revela una puerta trasera de hardware en algunos procesadores x86 de escritorio, portátiles y embebidos.
La puerta trasera permite que el código en anillo 3 (espacio de usuario) evite las protecciones del procesador para leer y escribir libremente datos del anillo 0 (kernel). Aunque la puerta trasera normalmente está deshabilitada (requiriendo ejecución en anillo 0 para activarla), hemos descubierto que está habilitada por defecto en algunos sistemas.
Este repositorio contiene utilidades para verificar si su procesador está afectado, cerrar la puerta trasera si está presente, y la investigación y herramientas utilizadas para descubrir y analizar la puerta trasera.
La puerta trasera rosenbridge es un pequeño núcleo no-x86 integrado junto al núcleo x86 principal en la CPU. Se habilita mediante un bit de control en un registro específico del modelo, y luego se activa con una instrucción de lanzamiento. Luego se alimentan comandos al núcleo embebido, envueltos en una instrucción x86 especialmente formateada. El núcleo ejecuta estos comandos (a los que llamamos el 'conjunto de instrucciones profundamente embebidas'), omitiendo todas las protecciones de memoria y comprobaciones de privilegios.
Aunque la puerta trasera debería requerir acceso a nivel de kernel para activarse, se ha observado que está habilitada por defecto en algunos sistemas, permitiendo que cualquier código no privilegiado modifique el kernel.
La puerta trasera rosenbridge es completamente distinta de otros coprocesadores públicamente conocidos en CPUs x86, como el Management Engine o el Platform Security Processor; está más profundamente integrada que cualquier coprocesador conocido, teniendo acceso no solo a toda la memoria de la CPU, sino también a su archivo de registros y su pipeline de ejecución.
Se cree que solo las CPUs VIA C3 están afectadas por este problema. Los procesadores de la serie C se comercializan para automatización industrial, puntos de venta, cajeros automáticos y hardware sanitario, así como para una variedad de computadoras de escritorio y portátiles de consumo.
El alcance de esta vulnerabilidad es limitado; las generaciones de CPUs posteriores al C3 ya no contienen esta característica.
Este trabajo se publica como un estudio de caso y experimento conceptual, ilustrando cómo podrían surgir puertas traseras en procesadores cada vez más complejos, y cómo los investigadores y usuarios finales podrían identificar dichas características. Las herramientas y la investigación ofrecidas aquí proporcionan el punto de partida para una investigación cada vez más profunda de vulnerabilidades en procesadores.
Para verificar si su CPU está afectada:
git clone https://github.com/xoreaxeaxeax/rosenbridge
cd rosenbridge/util
make
sudo modprobe msr
sudo ./bin/check
La utilidad proporcionada debe ejecutarse en hardware real (no en una máquina virtual), y se encuentra en estado alfa. Puede causar fallos, pánicos o bloqueos en sistemas que no contengan la puerta trasera.
Las utilidades proporcionadas aquí están diseñadas para una familia y núcleo de procesador específicos; desafortunadamente, las herramientas pasarán por alto la puerta trasera si ha sido incluso ligeramente modificada respecto a la forma investigada.
Algunos sistemas tienen la puerta trasera habilitada por defecto, permitiendo que código no privilegiado obtenga acceso a nivel de kernel sin permiso. Si los pasos en 'Verificando su CPU' indican que su CPU es vulnerable, puede instalar un script para cerrar la puerta trasera al inicio del proceso de arranque:
cd fix
make
sudo make install
reboot
Tenga en cuenta que, incluso con esto, un atacante con acceso a nivel de kernel puede volver a habilitar la puerta trasera. Este script se proporciona como un esquema para corregir el problema durante el proceso de arranque, pero requerirá adaptación para diferentes sistemas.
La utilidad sandsifter se utiliza ampliamente en esta investigación para descubrir instrucciones desconocidas.
asm
Un ensamblador para el Conjunto de Instrucciones Profundamente Embebidas (DEIS). Convierte programas escritos en el ensamblador personalizado rosenbridge en instrucciones x86, que, cuando se ejecutan después de la instrucción de lanzamiento, enviarán los comandos al núcleo oculto de la CPU.
esc
Una prueba de concepto del uso de la puerta trasera rosenbridge para escalada de privilegios.
fix
Un esquema aproximado para cerrar la vulnerabilidad en sistemas afectados, en la medida de lo posible mediante actualizaciones de registros específicos del modelo.
fuzz
Una colección de utilidades utilizadas para fuzzear tanto los núcleos x86 como rosenbridge, con el fin de aislar la instrucción de lanzamiento y la instrucción de puente desconocidas, y resolver el formato de instrucción del núcleo rosenbridge.
deis
El fuzzer utilizado para explorar los efectos y capacidades del núcleo oculto de la CPU.
exit
Se cree que, en algunos procesadores, se necesita una secuencia de salida para volver al núcleo x86 al final de una secuencia DEIS. Este directorio contiene las utilidades utilizadas para buscar la secuencia de salida en las primeras etapas de la investigación, pero se abandonó cuando se encontró un procesador que no requería dicha secuencia.
manager
Una colección de utilidades Python diseñadas para monitorear y gestionar tareas de fuzzing distribuidas en una red de workers.
wrap
Una versión reducida del fuzzer sandsifter, utilizada para identificar la instrucción de puente que enviará comandos desde el núcleo x86 al núcleo rosenbridge oculto.
kern
Una colección de utilidades auxiliares utilizadas para monitorear la memoria del kernel y los registros en busca de cambios causados por instrucciones DEIS fuzzeadas.
lock
Utilidades para bloquear o desbloquear la puerta trasera rosenbridge.
proc
Una herramienta para identificar patrones en los registros de fuzzing para identificar clases de comportamientos de instrucciones DEIS.
test
Una herramienta utilizada al principio de la investigación, para intentar identificar la arquitectura del núcleo oculto ejecutando instrucciones RISC conocidas.
util
Una herramienta en estado alfa para detectar si un procesador está afectado por rosenbridge.
(TODO: enlace al documento técnico)
(TODO: enlace a las diapositivas)
Los detalles e implicaciones presentados en este trabajo son inferencias y opiniones de los autores, derivadas de la investigación descrita. La investigación se realiza y proporciona con el objetivo de identificar y corregir una vulnerabilidad de seguridad percibida en las CPUs descritas. Los procesadores VIA son reconocidos por su bajo consumo de energía y excelencia en diseños embebidos; creemos que la funcionalidad descrita fue creada de buena fe como una característica útil para el mercado embebido, y se dejó habilitada involuntariamente en algunas generaciones tempranas del procesador. No se implica intención maliciosa alguna.
project:rosenbridge es un esfuerzo de investigación de Christopher Domas (@xoreaxeaxeax).