Salto de protecciones de memoria en Windows Vista

Mucho se ha hablado sobre la presentación de Alexander Sotirov y Mark Dowd en las conferencias de Blackhat USA 2008. En ella, bajo el divertido título de “Cómo impresionar chicas saltándose las protecciones de memoria de Windows Vista” realizaban unos ejercicios técnicos de alto nivel en los qué demostraban los límites de las tecnologías de protección.

Cómo los propios autores explicaban, no se trata de ninguna vulnerabilidad y sólo de cómo se pueden saltar esos controles en entornos previamente vulnerados. Sin embargo, muchos fueron los medios sensacionalistas que aprovecharon para poner el enésimo falso mito sobre Windows Vista. Tanto fue así que el propio Alexander Sotirov puso en su Twitter:

“Lesson learned for next year: if you don’t pre-brief reporters, they’ll try to understand your research on their own, leading to epic FAIL!”

“Lección aprendida para el próximo año: Si tu no pre-informas a los periodistas ellos intentarán aprender tu investigación a su manera, concluyendo en un error épico.”

Dejando claro que NO se trata de una vulnerabilidad de Vista y su malestar contra los medios sensacionalistas. Además hay que tener en cuenta que muchas de las protecciones de memoria que trae Windows Vista no se encuentran en otros sistemas operativos.

Tras el análisis mediatico de la “prensa rosa”, algunos técnicos en España han realizado un análisis mucho más certero y sobre todo, bajo una perspectiva que parece que otros no han hecho: Leyéndose el documento publicado por los autores.

Referencias:

Twitter Alexander Sotirov
Paper Alexander Sotirov & Mark Dowd
[Hispasec] ¿La seguridad de Windows en Entredicho?
[Fluzo] Conclusiones sobre ‘Bypassing Browser Memory Protections’ (BH08)
Protección contra Desbordamientos de Buffer en Windows Vista [Parte I de IV]
Protección contra Desbordamientos de Buffer en Windows Vista [Parte II de IV]
Protección contra Desbordamientos de Buffer en Windows Vista [Parte III de IV]
Protección contra Desbordamientos de Buffer en Windows Vista [Parte IV de IV]

Saludos!

La protección contra Desbordamientos de Buffer en Windows Vista (III de IV)

Tercera Protección: No ejecución de Datos


—————————————————————-


DEP (Data Execution Prevention) Bit NX (Non Execute)


—————————————————————-


 


La tecnología DEP está disponible en Windows XP SP2, Windows Server SP1, Windows Server 2003 R2 y además viene incluida también en Windows Vista y puede aplicarse tanto por Software como por Hardware. ¿Qué quiere decir que puede aplicarse por Hardware o por Software? ¿Funcionan igual?


 


DEP por Hardware


 


Para activar DEP por hardware es necesario que el microprocesador que estemos utilizando venga con esta característica, ya que éste es un avance tecnológico de la industria de microprocesadores que es aprovechada por los sistemas operativos. El objetivo es evitar que un programa pueda ser inyectado en un sistema por medio de un desbordamiento de buffer. Para ello se dividen, en tiempo de ejecución, las páginas de la memoria en dos clases: Paginas de ejecución en las que se cargarán los procesos o páginas de NO ejecución donde se van a almacenar datos y/o parámetros de llamada a procedimientos. Para realizar esto las páginas de memoria llevan asociadas un NX (Non eXecute) que indica si se puede ejecutar lo que esté allí o sí por el contrario, nada que esté almacenado en esa zona de memoria puede ser ejecutado.


 


El realizar esta división y marcado de las páginas permite, que, aunque se produzca un desbordamiento de buffer, este nunca podrá ser utilizado para inyectar un código a través de un parámetro, con lo cual estamos garantizando que el sistema no ejecuta nada que no esté ya introducido previamente.


 



Imagen 1: Desbordamiento de Buffer


 


Aplicar DEP por hardware previene que se pueda introducir código inyectado, si el contador de programa se quedara apuntando a una zona de memoria marcada como NX el sistema intentaría recuperarse y si no pudiera se produciría una parada. Debido a esto, es posible que ciertas aplicaciones, que utilicen la inyección de código como forma normal de trabajar dejen de funcionar correctamente No es una práctica correcta de desarrollo pero en algunos casos se utiliza. Para intentar garantizar la compatibilidad de aplicaciones de este tipo se pueden crear listas blancas en Windows Vista.


 


DEP por Software


 


Como protección adicional, DEP en Windows Vista, tiene una versión basada solo en software que vino ya en XP SP2 y cuyo objetivo es garantizar la integridad de las funciones que son invocadas en el tratamiento de los mensajes de excepciones que deben ser gestionados por el sistema operativo. Para ello se comprueba la integridad de los binarios del sistema que se encargan del tratamiento de los mensajes de error.


 


—————————————————————-


/SafeSEH (Safe Exception Handler)


—————————————————————-


 


Esta es una opción del linkador que se puede usar en Visual C++ para poder comprobar, de forma segura, que las funciones de tratamiento de excepciones de un determinado programa son las correctas. Para ello el ejecutable lleva almacenada la tabla de las funciones con las referencias a las funciones que deben procesar cada uno de los mensajes de excepción. El sistema operativo comprobará si el manejador de esa excepción corresponde con el que marca el programa en la tabla de manejadores y si no es así, matará el proceso. Estas opciones son utilizadas en conjunción de la protección DEP por software.


 


 


Configuración en Vista


 


Para configurar las opciones de DEP en Windows Vista deberemos acceder a la opción de configuración en:



  1. Panel de Control

  2. Sistema y Mantenimiento

  3. Sistema

  4. Configuración Avanzada

  5. Avanzadas

  6. Opciones de Rendimiento

  7. Data Execution Prevention

Tras una petición de Microsoft y en concreto de Michael Howard, todos los equipos que vendrán con Windows Vista en versión OEM vendrán por defecto con DEP Activado.


 



Imagen 2: Prevención de Ejecución de Datos


 


 


Referencias Externas



 —————————————————————-


 


La protección contra Desbordamientos de Buffer en Windows Vista (I de IV)


La protección contra Desbordamientos de Buffer en Windows Vista (II de IV) 


DEP en Windows XP SP2 en Technet


Data Excution Prevention en la Wikipedia


Bit NX en la Wikipedia


 



Bueno, ya sólo queda un post más para terminar esta serie en el que veremos las técnicas de Ofuscación de  Punteros a Funciones y la tecnología ASLR (Address Space Layout Randomization).



 

La protección contra Desbordamientos de Buffer en Windows Vista (I de IV)

El problema de los desbordamientos de Buffer en las aplicaciones que corren sobre un sistema operativo ha sido un tema recurrente. Desde hace tiempo se intenta encontrar una forma eficiente de realizar comprobaciones en el código fuente que se programa para evitarlos. Muchos de los lenguajes de alto nivel que se utilizan hoy en día tienen este tipo de protecciones, pero cuando se desarrollan módulos en lenguajes de bajo nivel siguen apareciendo estas debilidades.


 


Desbordamiento de Buffer


——————————————————————————————-


 


El objetivo de una explotación de desbordamiento de buffer es sobrepasar la longitud de memoria reservada para los parámetros de una llamada a un procedimiento con el fin de sobrescribir la dirección de retorno del contador de programa. Es decir, se buscan parámetros en procedimientos que no son correctamente comprobados antes de ser utilizados.


 


Imaginemos este entorno de memoria:


 


Imagen 1: Memoria


 


En esta sección de memoria vemos como se ha apilado una dirección de retorno para cuando se acabe de ejecutar el procedimiento que tiene actualmente el control del programa y encima se ha reservado espacio para que se apilen los parámetros locales de dicho procedimiento. A la hora de cargar los parámetros en ese espacio reservado, estos deberían ser comprobados, si no se produjera esta comprobación tendríamos un problema de buffer overflow.


 


Explotación de un Desbordamiento de Buffer


——————————————————————————————-


 


El atacante introduce como parámetro el código que quiere que se ejecute y luego escribe información nula hasta que sobrepasa el espacio que tiene reservado. Una vez que ha llegado a la dirección de retorno escribe la dirección de memoria donde ha introducido su programa.


 




Imagen 2: Desbordamiento de Buffer


 


Con esto consigue haber introducido un programa que se va a ejecutar. Este es un ejemplo típico para los programas que devuelven una shell o crean un interfaz de comandos.


 


Tecnologías de protección


——————————————————————————————-


 


Las tecnologías para evitar que se produzca una explotación de una vulnerabilidad de buffer overflow son varias, pero hay dos que son especialmente significativas: DEP (Data Execution Prevention) y ASLR (Address Space Layout Randomization). Ambas incluidas en Windows Vista y …¡lo vemos en el próximo post!.


 


Referencias


——————————————————————————————-


 


La protección contra Desbordamientos de Buffer en Windows Vista (II de IV)


La protección contra Desbordamientos de Buffer en Windows Vista (III de IV)


Buffer Overflow en Wikipedia.org