stringtranslate.com

Pulverización en montón

En seguridad informática , la pulverización de montón 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 llama heap spray . [1] En general, el código que rocía el montón 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 montón del proceso y llenando los bytes en estos bloques con los valores correctos.

Operación

En realidad, un heap spray no explota ningún problema de seguridad, pero puede usarse para hacer que una vulnerabilidad sea más fácil de explotar. Un heap spray por sí solo no se puede utilizar para romper ningún límite de seguridad: se necesita una cuestión de seguridad separada.

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

Los exploits suelen utilizar bytes específicos para distribuir 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 a ejecutar. Si el exploit puede obligar a la aplicación a leer esta dirección del montón esparcido, puede controlar el flujo de ejecución cuando el código usa esa dirección como puntero de función y la redirige al montón esparcido. Si el exploit logra redirigir el flujo de control al montón rociado, los bytes allí se ejecutarán, permitiendo que el exploit realice cualquier acción que desee el atacante. Por lo tanto, los bytes en el montón están restringidos para representar direcciones válidas dentro del propio montón, que contienen instrucciones válidas para la arquitectura de destino, por lo que la aplicación no fallará. Por lo tanto, es común distribuir un solo byte que se traduce tanto en una dirección válida como en un NOP o una instrucción 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 usa 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 tener un uso generalizado en exploits para navegadores web en el verano de 2005 después del lanzamiento de varios exploits de este tipo que utilizaban la técnica contra un Amplia gama de errores en Internet Explorer . [5] [6] [7] [8] [9] Los heap sprays utilizados en todos estos exploits fueron muy similares, lo que demostró 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 piratas informáticos novatos escribir rápidamente exploits confiables para muchos tipos de vulnerabilidades en navegadores web y complementos de navegadores web . Muchos exploits de navegador web que utilizan la pulverización de montón consisten únicamente en una pulverización de montón 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 sprays de montón para navegadores web se implementan comúnmente en JavaScript y rocían el montón 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 secuencias de comandos . Dependiendo de cómo el navegador implemente las cadenas, se pueden utilizar caracteres ASCII o Unicode en la cadena. El código de dispersión del montón hace copias de la cadena larga con código de shell y las almacena en una matriz, hasta el punto en que se ha distribuido 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 esparcir el montón en Adobe Flash . [10] [11]

Imágenes

Aunque se ha demostrado que la pulverización en montón se puede realizar por otros medios, por ejemplo cargando archivos de imágenes en el proceso, [12] esto no ha tenido un uso generalizado (hasta 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 montón se puede rociar con una granularidad de asignación muy alta mediante el uso de tecnologías introducidas con HTML5 . Específicamente, utilizaron la interfaz de mapa de bits de bajo nivel que ofrece la API de lienzo y los trabajadores web para hacerlo más rápidamente.

Detección y prevención

Ver también

Referencias

  1. ^ John Hays, ingeniero de formación en seguridad (2 de septiembre de 2016). "Título de Youtube: Técnica de explotación de Heap Spray". 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 tituló "Heap Spray Exploit Technique".
  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}}: Mantenimiento CS1: nombres numéricos: lista de autores ( enlace )
  3. ^ "cami": código de explotación de telnetd
  4. ^ Seguridad digital eEye - Investigación
  5. ^ InternetExploiter 1: exploit BoF del parámetro MSIE IFRAME src y nombre
  6. ^ InternetExploiter 3: exploit BoF del encabezado "anih" del archivo MSIE .ANI
  7. ^ InternetExploiter 2: exploit de condición de carrera de manejo de objetos MSIE DHTML
  8. ^ "FrSIRT: vulnerabilidad/explotación de objetos 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 - Microsoft Internet Explorer" Msdds.dll "Ejecución/explotación remota de código (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. ^ "Laboratorio de inteligencia de malware FireEye: pulverización de montón 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 Shellcode a plena vista, Black Hat 2006
  13. ^ Aerosol de montón HTML5. EUSecOeste 2012
  14. ^ El proyecto de boquilla de Microsoft Research tiene como objetivo detectar y prevenir la fumigación en montón
  15. ^ BuBBle: una contramedida a nivel de motor Javascript contra ataques de pulverización de montón