jueves, 19 de marzo de 2009

Otro Blue Pill de Joanna Rutkowska

Joanna Rutkowska presentó a mediados de 2006 su Blue Pill, causando un gran revuelo. Rutkowska, experta en rootkits, aprovechó una (por entonces) nueva funcionalidad de los procesadores AMD para crear un rootkit indetectable en cualquier sistema operativo. En esta ocasión su equipo del Invisible Things Lab lo ha vuelto a hacer, esta vez aprovechando una funcionalidad de Intel.

Rutkowska creó en 2006 una prueba de concepto que demostró que todo sistema operativo que usase AMD con tecnología SVM/Pacifca (destinada a optimizar la virtualización a bajo nivel desde el procesador) heredaba un serio problema: cualquier software podía asumir un rol llamado "hypervisor". Este concepto se refiere a un nivel de control más alto incluso que el de supervisor, que es el nivel al que corre el sistema operativo.

Las arquitecturas de procesadores modernos utilizan el concepto de Ring (anillo) para especificar capas de seguridad desde las que se tienen distintos permisos de acceso a los recursos. El kernel y los drivers de sistema, están en el Ring0, el modo de ejecución de mayor privilegio para poder trabajar a bajo nivel con el hardware. Trabajar a tan bajo nivel implica que se tiene total control sobre la máquina y por tanto, una mayor responsabilidad (un fallo da al traste con el sistema operativo, por ejemplo, los famosos pantallazos azules suelen suceder por una mala instrucción de un controlador). El resto de programas corren en el Ring3 (los otros dos, aunque soportadas por las CPU, no se usan normalmente). El Ring3 un espacio en el que un fallo no resultaría tan crítico, porque no pueden acceder al hardware directamente, deben hacerlo a través de llamadas a sistema. MS-DOS, por ejemplo, carecía de este concepto. Todo corría bajo privilegios de Ring0, de ahí la inestabilidad general del sistema operativo ante cualquier fallo de cualquier programa.

Con la llegada de la virtualización, se define una capa con incluso más privilegios que el Ring0, el hypervisor. Por ejemplo, Vmware debe correr a un nivel hypervisor, mayor incluso que el sistema operativo que aloja, para poder ejecutar código en el entorno del Ring0 sin molestar al resto de sistemas operativos virtuales que puede alojar una máquina. Una especie de "paso atrás" que controla todo lo que tiene delante, el Ring -1 hundido en las raíces del sistema.

Rutkowska y su equipo acaban de publicar el documento técnico "Attacking SMM Memory via Intel CPU Cache Poisoning". System Management Mode (SMM) se refiere a un modo de operación más privilegiado en las arquitecturas x86. El SMM podría considerarse el Ring -2. SMM se ejecuta en la zona de memoria conocida como SMRAM. Se supone que el controlador de memoria solo debe permitir al firmware (la BIOS) acceder a esa zona de memoria. Una vez que la BIOS carga en esa parte el SMM, sólo el código que esté en ese "anillo" debería poder acceder a él. Lo que han descubierto es cómo acceder a esa zona, bajar dos niveles desde el Ring 0 (a través de un driver en el sistema Windows, o incluso siendo root en Linux) y ejecutar código con los privilegios de SMM. Con todo ese poder, una vez más y como ya demostró con Blue Pill, se puede crear un rootkit indetectable. Literalmente, el sistema operativo e incluso los drivers, todo, podría estar bajo el control de un atacante y hacer creer una total "mentira" al sistema basada en una ejecución de código capaz de controlar al más bajo nivel el sistema.

El mérito no es solo de Rutkowska, Loic Duflot, paralela e independiente, ha descubierto lo mismo. La investigadora también menciona como curiosidad que hace varios años, los propios empleados de Intel ya conocían el problema y que incluso estas debilidades fueron documentadas. De hecho, los detalles del fallo eran accesibles a través de Google. La propia Rutkowska se sorprende de que solo ellos y Loic Duflot hayan creado exploits para aprovechar este problema. Aprovechar el fallo es en la práctica aparentemente sencillo. Se deben modificar los registros MTRR para marcar como "escribible" la región donde está la SMRAM y transferir la ejecución al código SMM. Básicamente se trata de machacar esa memoria y ejecutar ese código. En Linux, en la práctica, el usuario root puede hacerlo modificando /proc/mtrr y en Windows a través de un driver.

Las placas Intel DQ35 son vulnerables, aunque no las DQ45. Intel ampliará su documentación sobre las placas con contramedidas para evitar el ataque.

Este modo de incrustarse en las raíces del sistema, aunque elaborado e ingenioso, es complicado que se lleve a la práctica fuera de un laboratorio.


Sergio de los Santos
ssantos@hispasec.com


Más información:

Attacking SMM Memory via Intel® CPU Cache Poisoning
http://invisiblethingslab.com/resources/misc09/smm_cache_fun.pdf

No hay comentarios:

Publicar un comentario en la entrada