EMET 5.5 incluye la posibilidad de bloquear la carga de fuentes. Cómo y por qué es útil

martes, 6 de octubre de 2015

EMET ha sacado la beta de su versión 5.5 con dos importantes mejoras. Una que acelera su integración con el directorio activo (en forma de exportación de políticas de grupo) y otra que pretende erradicar de raíz un grave problema que arrastra Windows desde hace años: los ataques y elevaciones de privilegios a través de la carga Fonts (tipos de letra).

La última "gran novedad" de EMET fue el ASR o "Attack Surface Reduction" del que ya hablamos en otra entrada. Resultaba una aproximación de lo más interesante (por su radicalidad) contra la carga de módulos no deseados en procesos. Ahora, la versión 5.5 trae algunas mejoras menores, pero sobre todo, la posibilidad de evitar la carga de fuentes no confiables.

En realidad, esto no es del todo cierto. Esta funcionalidad ya estaba presente en el registro desde que aparición Windows 10, pero EMET le aporta facilidad de uso y una interfaz más sencilla.

¿Y por qué es importante?

Desde que Windows decidió (cuando escaseaban los recursos) integrar algunas partes de su interfaz en el kernel, muchas funciones gráficas suponen un riesgo adicional. Desde entonces, son cientos las vulnerabilidades que han permitido elevar privilegios cargando fuentes mal formadas, debido a algún fallo al ser procesadas con el Graphics Device Interface (GDI). Esto permitía que, aunque se abriese un documento o se navegara a veces con los mínimos privilegios, al procesar una nueva fuente y aprovechando una vulnerabilidad, se llegase a ejecutar código con mayores privilegios.


La nueva funcionalidad de bloqueo de fuentes no confiables, puesta en modo "auditoría"

Esta aproximación introducida en Windows 10 (y solo para ese sistema), permite bloquear la carga de fuentes que no estén ya en el directorio de sistema %windir%/Fonts. Se bloquea todo por defecto, y luego se permite crear excepciones por programa. Atención: No impide la instalación de fuentes en el sistema, sino su carga desde directorios diferentes al oficial (donde ya se necesitan permisos de administrador para haber instalado fuentes).

En realidad, como decía, esta funcionalidad fue introducida en Windows 10, con la posibilidad de modificar el valor de la máscara "MitigationOptions" aquí HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel\MitigationOptions.

También es posible hacerlo a través de las políticas de grupo, en gpedit.msc.

Bloqueo de fuentes en Windows 10 a través de las políticas de grupo

Para crear excepciones por programa, en principio y según la documentación, basta con crear la rama correspondiente al binario en HKEY_LOCAL_MACHINE\ Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\

No olvidemos reiniciar tras cada cambio.

¿Cómo funciona por dentro?

En principio, a través de la funcionalidad descrita, se permite activar globalmente el sistema de bloqueo, y selectivamente permitir que ciertos programas que puedan tener problemas, queden "exentos". Con EMET queda un poco confuso, porque aunque se active la funcionalidad "Always on", no se activa visiblemente para el resto de programas en la  lista de monitorizados por EMET, quedando todos a "Off". Así, da la impresión de que con EMET se puede activar selectivamente la funcionalidad para ciertos programas, y no es así.


Aunque la funcionalidad esté "Always on", no aparece marcada en la columna correspondiente a cada programa protegido

Si comprobamos qué cambia en el registro cuando se activa la funcionalidad de bloqueo de fuentes para una aplicación concreta, se observa un cambio en el registro. Hasta ahora, el MitigationOptions de cada proceso estaba destinado a mitigar ataques SeHOP, mejorar el ASLR... Con EMET, activar la opción de bloqueo de fuentes hace que el valor MitigationOptions tome el valor 5000000000050, y al desactivarlo, pasa a 6000000000050. Algo que no parece estar documentado.


Según se cambie la configuración para un proceso concreto,
el valor MitigationOptions para ese proceso en concreto, cambiará

Un pequeño ejemplo


Este programa, es un simple ejecutable que carga un tipo de letra "Prince Valiant" alojado en el escritorio, y no en el el directorio oficial.


Ejemplo de programa que carga fuente desde un punto diferente al repositorio oficial de fuentes instaladas de Windows
Sin esta mitigación, el funcionamiento es el siguiente.


Un simple programa que muestra un tipo de letra, y Windows también en los iconos de los ficheros de las propias fuentes


Ahora, le hemos indicado a EMET que paralice la carga de fuentes que no estén instaladas. Con la mitigación en marcha, se observa que el simple formulario no es capaz de mostrar el tipo de letra, ni tampoco los iconos del escritorio. Además todo queda registrado en el visualizador de eventos.


El sistema ha bloqueado la carga de fuentes

Un ejemplo más de que EMET está aglutinando todos los métodos radicales (y por tanto, eficaces) de prevención de explotación de vulnerabilidades en Windows, integrando un sistema de protección en un solo punto, cada vez más útil, sencillo y eficaz.

Sergio de los Santos

ssantos@11paths.com



1 comentario: