Tutoriais

ENTENDENDO BUFFER OVERFLOW PARTE 1 By ThorKing

Bem amigos vamos começar a colocar nessa área avançada assuntos avançados, então decidi começar a escrever sobre Buffer Overflow.

DEFINIÇÃO:
Buffer Overflow é um estouro de memória, programas que manipulam variáveis necessitam de buffers ( locais na memora onde são guardados os dados recebidos pela variável).
Todo programador sabe que quando se declara uma variável tem que declaram um tamanho para a mesma.
Mas o usuário ou qualquer pessoa que use o programa colocar o valor da variável maior do que ela suporta acaba ocasionando o chamado Buffer Overflow que é um estouro de memória como disse acima.
Isso acaba complicando quando um hacker ou melhor dizermos um cracker descobre esse bug do programa e se aproveita pra reescrever no espaço interno da pilha e colocar o que quiser geralmente códigos prejudiciais na a´rea de armazenamento de memória, que poderá ser executado como parte de argumento (variável) passado ao programa.

Você poderá ver exemplos de códigos Buffer Overflow nos links abaixos:
http://en.wikipedia.org/wiki/Buffer_overflow
http://www.cic.unb.br/docentes/pedro/trabs/buffer_overflow.htm

Abaixo vamos analisar um código que é feito na plataforma Linux
Obs: pra compilar na shell execute o seguinte comando gcc –o buffer buffer.c

#include <stdio>
#include (stdlib.h>

Main ( int argc, char *argv{} ) {
Char buffer[10];
if (argc <2){
printf(“programa de teste de buffer overflow !! \n”);
printf(“uso: %s<vari>\n”,ardv[0]);
exit (0); }
strcpy (buffer,argv[1]);
printf (“ voce digitou %s !!\n”,buffer);
return 0;
}

Depois de compilado é só executar
# ./buffer AAAAA
Você digitou AAAA

Até o momento ta tudo normal pois declaramos o tamanho da variável buffer de 10 bytes e usamos apenas 5 bytes pra quem não sabe 1 caracter é igual a 1 byte independente do caracter que você colocar ele vai tratar como “char” .

Agora vamos obeservar o que ocorre se colocarmos mais de 10 bytes na variável buffer.

#./buffer AAAAAAAAAA
Você digitou AAAAAAAAAAA
Segmentation Fault
#

O programa terminou de forma estranha,somente porque ultrapassamos op limite de 10 bytes e colocamos 11 bytes 1 bytes a mais é suficiente para um buffer overflow e acabamos escreverndo em outro lugar na memória onde não era pra ser.

Essa foi a parte 1 da matéria sobre buffer overflow espero que vocês tenham gostado em em breve estarei postando a parte 2.

Abraço a todos!

parte 2