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

Cuarta Protección: Ocultación de Información


 


Con las tecnologías vistas hasta el momento se ha pretendido, en primer lugar que no se produzcan los fallos en el código que originan los desbordamientos de buffer, que no se puedan sustituir las funciones de tratamiento de errores y que no se puedan meter códigos en la zona de memoria destinada a datos para evitar la inyección de programas no deseados dentro del sistema. Sin embargo un atacante no necesita inyectarte un troyano si puede abrir una conexión desde dentro del sistema que le conecte contra un socket en su equipo, es decir, si puede configurar una conexión reversa. Y para eso no necesita inyectar ningún código, le basta con invocar una función del sistema operativo para abrir un socket.


 



 


Imagen: Invocación de una función conocida del sistema


 


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


Pointer ofuscation


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


 


La primera tecnología de protección para evitar que se invoquen funciones conocidas se añadió en Windows XP SP2 y Windows Server 2003 SP1. Por supuesto esta tecnología también funciona en Windows Vista.


 


La idea es evitar que se vea la dirección de cualquier función que se usa en el cuerpo de un programa, por ello, se utilizan las funciones: EconcePointer / DecodePointer y EncodeSystemPointer / DecodeSystemPointer para ofuscar la información en el código.


 


Las funciones EncodePointer y EncodeSystemPointer generan una dirección ofuscada a partir de realizar un XOR entre la dirección real de la función que se desea invocar y un número dinámico generado por el sistema operativo.


 


Cuando se desea realizar la llamada a la función se hace mediante las funciones DecodePointer y DecodeSystemPointer. Si un atacante desea suplantar la llamada a una función por una suya debe saber como codificarla para que cuando sea decodificada corresponda con la función que él quiere llamar. Nada sencillo.


 


El uso de estas tecnologías no previene solo contra los ataques de desbordamiento de buffer sino contra todos aquellos que, no pudiendo modificar la dirección de retorno de la llamada buscan obtener el control mediante la modificación de cualquier llamada a función que vaya a ser invocada, ya que cogerá el control del programa.


 


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


ASLR (Address Space Layout Randomization)


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


 


Para evitar que el atacante sepa la dirección de memoria dónde se encuentra una función que desea invocar, la tecnología ASLR intenta cambiar en cada ejecución la posición exacta de la misma dentro de la memoria. Para ello se utiliza una función que se denomina de entropía (máximo desorden) que le asigna en cada ejecución de la aplicación una dirección diferente dentro de un rango de 256 posibles.


 


Es decir, se ejecuta el programa A y se carga en la dirección FF000FFF, se cierra el programa y se vuelve a ejecutar. Cuando se carga en memoria ASLR le asigna la dirección FF000ABB, por ejemplo.


 


Con esto se intenta que no se pueda predecir la dirección donde se pueden encontrar los programas que tiene en ejecución un determinado sistema.


 



 


Imagen: ASLR le asigna una dirección diferente en cada ejecución


 


Conclusión


 


Garantizar que un sistema no va a tener fallos de desbordamiento de buffer en alguna de los millones de líneas que conforman el sistema operativo es mucho decir, pero el uso de el SDL (Secure Development Lifecycle), la compilación con /FxCod y /SafeSEH, la aplicación de DEP (Data Execution Prevention) con el bit NX (Non Execute) por Hardware y por Software para la protección de integridad en el tratamiento de errores, la ofuscación de los punteros a funciones y la ejecución aleatoria con ASLR ayudan a que el sistema se encuentre mucho más fortificado contra los fallos de Buffer Overflow.


 


Referencias Externas


 


ASLR en Wikipedia


Blog Michael Howard: Address Space Layout Randomization in Windows Vista


Blog Michael Howard: Protecting Against Pointer Subterfuge


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)


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

2 comentarios sobre “La protección contra Desbordamientos de Buffer en Windows Vista (IV de IV)”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *