Entendendo o Buffer Overflow
Em programação, buffer é uma variável (também conhecida como array
ou vetor), um local na memória que armazena uma quantidade X de bytes.
Por exemplo um buffer que tenha capacidade de armazenar 10 bytes,
só conseguiria guardar uma palavra de 9 caracteres (cada caracter sendo 1 byte)
já que o último precisa ser o caracter nulo para o programa saber que a palavra
termina ali.
Então esse código em C estaria correto:
char buffer[10] = {'S', 'E', 'G', 'U', 'R', 'A', 'N', 'Ç', 'A',
'\0'};
Uma variável denominada buffer que tem 10 bytes de capacidade de
armazenamento recebe uma palavra de 9 caracteres finalizando com o ('\0'). Isso
está correto.
Agora o que aconteceria se eu inserisse uma palavra com mais de 9
caracteres?
Eis o buffer overflow! A variável copia somente os 10
primeiros caracteres e o resto estoura, ou transborda, já que não cabe mais
nela.
E o resto da sequência após o 10º byte não é descartado, ele
sobrescreve o que tiver na memória após a varíavel. Vamos ver um programinha que
demonstra isso.
Esse é o código do programa em C:
#include
#include
int main(int argc, char *argv[]){
char buffer1[8] = {'B','U','F','F','E','R','1','\0'};
char buffer2[8] = {'B','U','F','F','E','R','2','\0'};
printf("\n[ANTES] Buffer2 contem: %s\n",buffer2);
printf("[ANTES] Buffer1 contem: %s\n\n",buffer1);
strcpy(buffer2,argv[1]);
printf("[DEPOIS] Buffer2 contem: %s\n",buffer2);
printf("[DEPOIS] Buffer1 contem: %s\n\n",buffer1);
return 0;
}
O programa cria uma variável denominada buffer1 com capacidade de
armazenamento de 8 bytes e atribui a ela a palavra “BUFFER1” com o caracter nulo
finalizando, o mesmo ocorre com a buffer2. Depois exibe o conteúdo de cada uma
com o printf.
Na sequência copia para a variável buffer2 o que for passando como
argumento na execução do programa e exibe novamente o conteúdo de cada
uma.
O programa foi salvo com o nome “overflow.c” e compilado no Linux
Debian 3.0 R4 com esse comando:
gcc -o overflow overflow.c
FONTE: http://www.crimesciberneticos.com/2011/02/entendendo-o-buffer-overflow.html
Buffer de dados (ou, simplesmente, buffer) é uma região de memória utilizada para armazenar temporariamente os dados enquanto eles estão sendo movidos de um lugar para outro. Normalmente, os dados são armazenados em um buffer enquanto eles são recuperados de um dispositivo de entrada ou pouco antes de serem enviados para um dispositivo de saída, também podendo ser utilizado quando os dados são movidos entre os processos dentro de um computador.
Enquanto o processador manipula o dado localizado no buffer, o dispositivo realiza outra operação de leitura no mesmo instante, ou seja, isso o faz ser dependente da arquitetura do processador.
Já o transbordamento de dados ou estouro de buffer (do inglês buffer overflow ou buffer overrun) é uma anomalia onde um programa, ao escrever dados em um buffer, ultrapassa os limites do buffer e sobrescreve a memória adjacente. Esse é um caso especial de violação de segurança de memória.
Gabarito:ERRADO!
Um BUFFER OVERFLOW ( transbordamento de dados) acontece quando um programa informático excede o uso de memória assignado a ele pelo sistema operacional, passando então a escrever no setor de memória contíguo.
O princípio de um transbordamento de buffer é baseado na arquitetura do processador onde o aplicativo vulnerável é executado, seja ele de 32 ou de 64 bits. Os dados inseridos em um aplicativo são armazenados na memória de acesso aleatório, em um setor conhecida como buffer. Um programa desenhado corretamente deveria estipular um tamanho máximo para dados recebidos e garantir que esses valores não sejam superados.
https://www.welivesecurity.com/br/2014/11/11/o-que-e-e-como-funciona-o-buffer-overflow/