Desbordamiento de montón

Anomalía de software

Un desbordamiento de montón , desbordamiento de montón o destrucción de montón es un tipo de desbordamiento de búfer que ocurre en el área de datos del montón . Los desbordamientos de montón se pueden explotar de una manera diferente a la de los desbordamientos basados ​​en pila . La memoria en el montón se asigna dinámicamente en tiempo de ejecución y normalmente contiene datos del programa. La explotación se realiza corrompiendo estos datos de formas específicas para hacer que la aplicación sobrescriba estructuras internas como punteros de lista enlazada . La técnica de desbordamiento de montón canónico sobrescribe el enlace de asignación de memoria dinámica (como metadatos) y utiliza el intercambio de puntero resultante para sobrescribir un puntero de función del programa .malloc

Por ejemplo, en versiones anteriores de Linux , dos buffers asignados uno al lado del otro en el montón podrían dar como resultado que el primer buffer sobrescribiera los metadatos del segundo buffer. Al establecer el bit en uso en cero del segundo buffer y establecer la longitud en un valor negativo pequeño que permite copiar bytes nulos, cuando el programa llama free()al primer buffer intentará fusionar estos dos buffers en un solo buffer. Cuando esto sucede, se espera que el buffer que se supone que se libera contenga dos punteros FD y BK en los primeros 8 bytes del buffer asignado anteriormente. BK se escribe en FD y se puede usar para sobrescribir un puntero.

Consecuencias

Un desbordamiento accidental puede provocar la corrupción de datos o un comportamiento inesperado por parte de cualquier proceso que acceda al área de memoria afectada. En sistemas operativos sin protección de memoria , esto podría ocurrir con cualquier proceso del sistema.

Por ejemplo, una vulnerabilidad de desbordamiento de búfer JPEG GDI+ de Microsoft podría permitir la ejecución remota de código en la máquina afectada. [1]

El jailbreak de iOS a menudo utiliza desbordamientos de montón para lograr la ejecución de código arbitrario .

Detección y prevención

Al igual que con los desbordamientos de búfer, existen principalmente tres formas de protegerse contra los desbordamientos de montón. Varios sistemas operativos modernos , como Windows y Linux, ofrecen alguna implementación de las tres.

  • Evite la ejecución de la carga útil separando el código y los datos, generalmente con funciones de hardware como NX-bit
  • Introduzca la aleatorización para que el montón no se encuentre en un desplazamiento fijo, generalmente con características del núcleo como ASLR ( aleatorización del diseño del espacio de direcciones ).
  • Introducir comprobaciones de cordura en el administrador de montón

Desde la versión 2.3.6, la GNU libc incluye protecciones que pueden detectar desbordamientos de pila después de que se produzcan, por ejemplo, comprobando la consistencia del puntero al llamar a unlink. Sin embargo, casi inmediatamente se demostró que esas protecciones contra exploits anteriores también eran explotables. [2] [3] Además, Linux ha incluido soporte para ASLR desde 2005, aunque PaX introdujo una mejor implementación años antes. También Linux ha incluido soporte para NX-bit desde 2004.

Microsoft ha incluido protecciones contra desbordamientos de búfer residentes en el montón desde abril de 2003 en Windows Server 2003 y agosto de 2004 en Windows XP con Service Pack 2. Estas mitigaciones fueron la desvinculación segura y las cookies de encabezado de entrada del montón. Las versiones posteriores de Windows como Vista , Server 2008 y Windows 7 incluyen: eliminación de estructuras de datos comúnmente atacadas, aleatorización de metadatos de entrada del montón, función expandida de la cookie de encabezado del montón, dirección base del montón aleatoria, codificación de puntero de función , terminación de corrupción del montón y variación de algoritmo. La Prevención de ejecución de datos normal (DEP) y ASLR también ayudan a mitigar este ataque. [4]

El método de detección más común para desbordamientos de pila es el análisis dinámico en línea. Este método observa la ejecución de los programas en tiempo de ejecución para identificar vulnerabilidades mediante la detección de brechas de seguridad. [5]

Véase también

Referencias

  1. ^ "Boletín de seguridad de Microsoft MS04-028: El desbordamiento del búfer en el procesamiento de JPEG (GDI+) podría permitir la ejecución de código (833987)". Microsoft . 14 de septiembre de 2004 . Consultado el 29 de marzo de 2016 .
  2. ^ "El Malloc Maleficarum". Oct 2005 . Consultado el 24 de abril de 2017 .
  3. ^ "MALLOC DES-MALEFICARUM". 2009 . Consultado el 29 de marzo de 2016 .
  4. ^ "Prevención de la explotación de vulnerabilidades de corrupción de montón en modo usuario". Blog de Technet, Microsoft Security Research & Defense. 4 de agosto de 2009. Consultado el 29 de marzo de 2016 .
  5. ^ USENIX Association, ed. (2005). Actas del segundo taller sobre sistemas reales distribuidos de gran tamaño: 13 de diciembre de 2005, San Francisco, CA, EE. UU . USENIX Association. ISBN 978-1-931971-40-9.
  • Trucos de Vudo Malloc
  • Artículo sobre desbordamiento de pila en Heise Security
  • Cómo vencer la protección de montón y la omisión de DEP de Microsoft Windows XP SP2 Archivado el 1 de noviembre de 2013 en Wayback Machine
Obtenido de "https://es.wikipedia.org/w/index.php?title=Desbordamiento_de_montón&oldid=1250526387"