sábado, 21 de mayo de 2011

Seguridad de ejecución basada en listas blancas

Como ya hemos mencionado anteriormente, los sistemas Windows no fueron diseñados originalmente para realizar labores de seguridad críticas, pero debido a su popularidad es habitual encontrarlos en estos entornos.

Para paliar esta carencia, algunos productos de seguridad intentan aumentar el nivel de protección del sistema mediante la aplicación de mecanismos que controlan con más rigor lo que ocurre en el equipo.

Una técnica utilizada habitualmente por este tipo de productos consiste en limitar que ejecutables pueden ser lanzados, mediante el uso de listas blancas que controlan que aplicaciones son legítimas.

La protección mediante listas blancas suele tomar una de estas formas:

  • Control basado en el path: El programa de control comprueba si la aplicación ha sido lanzada desde un directorio o desde una ruta confiable.

  • Control basado en el resumen (hash) del binario: El programa de control almacena un listado de los resúmenes de binarios conocidos y solo permite la ejecución de binarios que estén en esa lista.

  • Control basado en la firma del editor del binario: El programa de control comprueba que el binario está firmado por un editor de confianza antes de permitir su ejecución.

Este tipo de protección parece muy robusta y suficiente para garantizar que el sistema estará siempre libre de amenazas de malware. Ya que si prohibimos la ejecución de cualquier software que no sea de confianza, en teoría no habrá forma de que el sistema se infecte.

Sin embargo la realidad es más tozuda y existen multitud de técnicas de ataque que permiten evadir este tipo de controles para ejecutar código externo:


* Burlar el mecanismo de comprobación: Si el mecanismo de firma o de resumen utilizado es débil podría ser factible burlarlo.

Por ejemplo, si se usa el algoritmo MD5 para realizar la comprobación del resumen de los ejecutables, un atacante podría aprovechar las vulnerabilidades de colisión que presenta este algoritmo para generar un binario malicioso cuyo resumen MD5 coincida con el de otro legitimo.

* Explotar una vulnerabilidad en un binario del sistema: Si conseguimos encontrar un fallo en alguna aplicación del equipo que nos permita manipular su funcionamiento, podríamos aprovecharlo para inyectar nuestro código en el proceso correspondiente.

Por ejemplo, esta es la técnica habitual para ejecutar juegos no originales en algunas videoconsolas. Estos aparatos utilizan un mecanismo de listas blancas para controlar el uso de copias piratas de los juegos. Cuando existe una vulnerabilidad en algún juego original o en algún componente de la propia consola, esta puede ser aprovechada para lanzar juegos no originales.

* Instalar un ejecutable vulnerable: Si no existen binarios vulnerables en el equipo siempre podremos instalar uno externo que cumpla las condiciones del control de listas blancas.

Por ejemplo si estas se basan en comprobar la firma del editor, podemos buscar una versión antigua y vulnerable de algún producto de un editor de confianza para copiarlo en el sistema y explotarlo con el fin de ejecutar nuestro código.

* Forzar a que un binario legitimo cargue una DLL externa: Las librerías DLL contienen código ejecutable y pueden ser cargadas de forma dinámica por los procesos. Si conseguimos que un proceso legítimo cargue una DLL externa (mediante la manipulación de su configuración), podemos llegar a ejecutar nuestro código en su contexto.

Esto es evitado por algunos productos mediante el establecimiento de listas blancas también a nivel de librerías DLL.

* Utilizar ejecutables no protegidos. Algunas soluciones cubren solamente ejecutables en formato EXE y librerías DLL, pero no protegen del uso de otro tipo de binarios como applets Java, controles Activex, etc.

* Utilizar un lenguaje interpretado: Si no se permite la ejecución de ningún tipo de binarios, podemos intentar conseguir la funcionalidad que necesitamos mediante el uso de algún lenguaje de scripting disponible en el equipo como pueden ser:
  • Jscript y VBscript del Windows Script Host
  • Powershell
  • VBA de Microsoft Office

* Inyectar un shellcode en un proceso legítimo: Otra forma de ejecutar código en el contexto de un ejecutable consiste en inyectar un shellcode directamente en la memoria del proceso.

Para realizar esto normalmente necesitaremos herramientas específicas, que obviamente no estarán autorizadas por el sistema de listas blancas, aunque en algunos casos podemos hacerlo mediante un lenguaje interpretado como los ya vistos.


La principal conclusión es que los mecanismos basados en listas blancas tampoco son la solución mágica para los problemas de seguridad de los equipos. Aunque a pesar de sus carencias son un importante paso adelante.

No hay comentarios:

Publicar un comentario en la entrada