stringtranslate.com

Pulverización de pilas

En seguridad informática , el heap spraying es una técnica utilizada en exploits para facilitar la ejecución de código arbitrario . La parte del código fuente de un exploit que implementa esta técnica se denomina heap spray . [1] En general, el código que rocía el heap intenta colocar una determinada secuencia de bytes en una ubicación predeterminada en la memoria de un proceso de destino haciendo que asigne bloques (grandes) en el heap del proceso y rellene los bytes de estos bloques con los valores correctos.

Operación

En realidad, un Heap Spray no explota ningún problema de seguridad, pero puede utilizarse para que una vulnerabilidad sea más fácil de explotar. Un Heap Spray por sí solo no puede utilizarse para romper ningún límite de seguridad: se necesita un problema de seguridad independiente.

A menudo, explotar problemas de seguridad es difícil porque varios factores pueden influir en este proceso. Las alineaciones aleatorias de memoria y tiempo introducen mucha aleatoriedad (desde el punto de vista del atacante). Se puede utilizar un rociado de montón para introducir una gran cantidad de orden para compensar esto y aumentar las posibilidades de una explotación exitosa. Los rociados de montón aprovechan el hecho de que en la mayoría de las arquitecturas y sistemas operativos, la ubicación de inicio de grandes asignaciones de montón es predecible y las asignaciones consecutivas son aproximadamente secuenciales. Esto significa que el montón rociado estará aproximadamente en la misma ubicación cada vez que se ejecute el rociado de montón.

Los exploits suelen utilizar bytes específicos para rociar el montón, ya que los datos almacenados en el montón cumplen múltiples funciones. Durante la explotación de un problema de seguridad, a menudo se puede hacer que el código de la aplicación lea una dirección desde una ubicación arbitraria en la memoria. Luego, el código utiliza esta dirección como la dirección de una función para ejecutar. Si el exploit puede obligar a la aplicación a leer esta dirección desde el montón rociado, puede controlar el flujo de ejecución cuando el código utiliza esa dirección como un puntero de función y lo redirige al montón rociado. Si el exploit tiene éxito en redirigir el flujo de control al montón rociado, se ejecutarán los bytes allí, lo que permite que el exploit realice cualquier acción que desee el atacante. Por lo tanto, los bytes en el montón están restringidos a representar direcciones válidas dentro del propio rociado del montón, que contienen instrucciones válidas para la arquitectura de destino, por lo que la aplicación no se bloqueará. Por lo tanto, es común rociar con un solo byte que se traduce tanto en una dirección válida como en una instrucción NOP o similar a NOP en la arquitectura de destino. Esto permite que el heap spray funcione como un trineo NOP muy grande (por ejemplo, 0x0c0c0c0c se utiliza a menudo como NOP no canónico [2] ).

Historia

Los heap sprays se han utilizado ocasionalmente en exploits desde al menos 2001, [3] [4] pero la técnica comenzó a verse ampliamente utilizada en exploits para navegadores web en el verano de 2005 después del lanzamiento de varios de estos exploits que usaban la técnica contra una amplia gama de errores en Internet Explorer . [5] [6] [7] [8] [9] Los heap sprays utilizados en todos estos exploits eran muy similares, lo que mostraba la versatilidad de la técnica y su facilidad de uso, sin necesidad de modificaciones importantes entre exploits. Resultó lo suficientemente simple de entender y usar para permitir a los hackers novatos escribir rápidamente exploits confiables para muchos tipos de vulnerabilidades en navegadores web y complementos de navegadores web . Muchos exploits de navegadores web que utilizan heap spraying consisten solo en un heap spray que se copia y pega de un exploit anterior combinado con un pequeño fragmento de script o HTML que activa la vulnerabilidad.

Implementación

JavaScript

Los heap sprays para navegadores web se implementan comúnmente en JavaScript y rocían el heap creando cadenas grandes . La técnica más común utilizada es comenzar con una cadena de un carácter y concatenarla consigo misma una y otra vez. De esta manera, la longitud de la cadena puede crecer exponencialmente hasta la longitud máxima permitida por el motor de scripting . Dependiendo de cómo implemente el navegador las cadenas, se pueden usar caracteres ASCII o Unicode en la cadena. El código de heap spraying hace copias de la cadena larga con shellcode y las almacena en una matriz, hasta el punto en que se ha rociado suficiente memoria para garantizar que el exploit funcione.

VBScript

Ocasionalmente, VBScript se utiliza en Internet Explorer para crear cadenas mediante la función String .

Script de acción

En julio de 2009, se descubrió que los exploits utilizaban ActionScript para difundir el heap en Adobe Flash . [10] [11]

Imágenes

Aunque se ha demostrado que la pulverización de heap se puede realizar a través de otros medios, por ejemplo, cargando archivos de imágenes en el proceso, [12] esto no ha tenido un uso generalizado (a agosto de 2008). [ necesita actualización ]

HTML5

En septiembre de 2012, se presentó una nueva técnica en EuSecWest 2012. [13] Dos investigadores de CORE, Federico Muttis y Anibal Sacco, demostraron que el heap se puede rociar con una granularidad de asignación muy alta mediante el uso de tecnologías introducidas con HTML5 . En concreto, utilizaron la interfaz de mapa de bits de bajo nivel que ofrece la API canvas y trabajadores web para hacerlo más rápidamente.

Detección y prevención

Véase también

Referencias

  1. ^ John Hays, ingeniero de capacitación en seguridad (2 de septiembre de 2016). "Título de YouTube: Heap Spray Exploit Technique". Comunidad en vivo de Palo Alto Networks . Consultado el 14 de noviembre de 2018 .del canal oficial de YouTube "Palo Alto Networks Live Community" se titulaba "Técnica de explotación de Heap Spray".
  2. ^ corelanc0d3r (31 de diciembre de 2011). "Tutorial de escritura de exploits, parte 11: Heap Spraying desmitificado". Equipo Corelan. Archivado desde el original el 25 de abril de 2015. Consultado el 15 de enero de 2014 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  3. ^ "cami": código de explotación de telnetd
  4. ^ eEye Digital Security – Investigación
  5. ^ InternetExploiter 1: Explotación de BoF con parámetro de origen y nombre MSIE IFRAME
  6. ^ InternetExploiter 3: exploit BoF del encabezado "anih" del archivo MSIE .ANI
  7. ^ InternetExploiter 2: vulnerabilidad de condición de carrera en el manejo de objetos DHTML MSIE
  8. ^ "FrSIRT - Vulnerabilidad/explotación del objeto COM javaprxy.dll de Microsoft Internet Explorer (avisos de seguridad)". Archivado desde el original el 27 de marzo de 2008. Consultado el 25 de marzo de 2008 .
  9. ^ "FrSIRT - Ejecución remota de código/explotación de "Msdds.dll" en Microsoft Internet Explorer (avisos de seguridad)". Archivado desde el original el 19 de diciembre de 2007. Consultado el 25 de marzo de 2008 .
  10. ^ Roee Hay: Explotación de CVE-2009-1869
  11. ^ "FireEye Malware Intelligence Lab: Heap Spraying con Actionscript". Archivado desde el original el 1 de mayo de 2014. Consultado el 22 de abril de 2014 .
  12. ^ Michael Sutton y Greg MacManus, Punk Ode: Ocultar el código Shell a simple vista, Black Hat 2006
  13. ^ HTML5 Heap Spray. EUSecWest 2012
  14. ^ El proyecto Nozzle de Microsoft Research tiene como objetivo detectar y prevenir la pulverización de material en pilas
  15. ^ BuBBle: una contramedida a nivel de motor de Javascript contra ataques de heap-spraying