Estouros de Heap são problemáticos pelo fato de que não são necessariamente protegidos pro CPU capazes de usar pilhas não-executáveis. Um Heap é uma área da memória alocada pela aplicação em tempo de execução para armazenar dados. O seguinte exemplo, em C, mostra um exploração de Heap overflow.
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define BSIZE 16 #define OVERSIZE 8 /* overflow buf2 by OVERSIZE bytes */ void main(void) { u_long b_diff; char *buf0 = (char*)malloc(BSIZE); // create two buffers char *buf1 = (char*)malloc(BSIZE); b_diff = (u_long)buf1 - (u_long)buf0; // difference between locations printf("Initial values: "); printf("buf0=%p, buf1=%p, b_diff=0x%x bytes\n", buf0, buf1, b_diff); memset(buf1, 'A', BUFSIZE-1), buf1[BUFSIZE-1] = '\0'; printf("Before overflow: buf1=%s\n", buf1); memset(buf0, 'B', (u_int)(diff + OVERSIZE)); printf("After overflow: buf1=%s\n", buf1); } [root /tmp]# ./heaptest Initial values: buf0=0x9322008, buf1=0x9322020, diff=0xff0 bytes Before overflow: buf1=AAAAAAAAAAAAAAA After overflow: buf1=BBBBBBBBAAAAAAA
Este simples programa acima, mostra dois buffers sendo alocados no heap.
- O primeiro buffer é "estourado" para sobrescrever o conteúdo do segundo buffer.
Como determinar se você é vulnerável e como se proteger:
É preciso utilizar das mesmas dicas de como se proteger de Stack Overflow, veja o post anterior.
É preciso utilizar das mesmas dicas de como se proteger de Stack Overflow, veja o post anterior.
Fonte:
https://www.owasp.org/index.php/Buffer_Overflows#Heap_Overflow
https://www.owasp.org/index.php/Buffer_Overflows#Heap_Overflow
Nenhum comentário:
Postar um comentário