desenvolvimento de softaware seguro
Buffer é uma variável, array ou vetor, ou seja um lugar na memória que armazena uma quantidade de x de bytes;
Estouro de buffer, ou transbordamento de dados, consiste em quando a memória, recebe mais dados do que pode suportar, ou usa mais memória do que está disponível. Aplicativos na sua maioria, reservam finita quantidade de memória para um buffer, os estouros acontecem quando invasores enviam dados maiores do que o tamanho fixado, e não passam pela verificação de dados do aplicativo em questão, ocorrendo assim o estouro do buffer com o código do executável, apresentando ações inesperadas e na maioria das vezes maliciosas tendo todos os privilégios do aplicativo, ocorrendo assim uma violação da segurança da memória.
Existem algumas maneiras detectar e prevenir o estouro de buffer, onde tem suas vantagens e desvantagens.
Ataques baseados em heap: esse tipo de ataque inunda o espaço da memória reservado ao programa, mas são mais difíceis de serem executados.
A heap permite a alocação dinâmica de memória por meio de chamadas da família malloc(3). A área de heap cresce em sentido oposto à pilha e em direção como esta abaixo:
Ataques em pilha: usam objetos de memória de pilha para armazenar a entrada de dados de usuários e são bem comuns.
Descrição de alguns ataques de estouro de buffer em pilha:
Estouro de pilha: Quando um programa é desenvolvido, uma quantidade de espaço da memória é reservada para os dados. A pilha estoura se os dados gravados forem maiores que o espaço reservados para ela na pilha, sendo grave somente se combinado com dados maliciosos.
Execução de código malicioso: O comando não é executável automaticamente, por que excede o espaço do buffer de pilha, mas poderia se um endereço de retorno que aponte para um comando malicioso for fornecido pelo invasor. No começo o programa começa a travar pelo estouro do buffer, mas o programa tenta se recuperar usando o endereço de retorno fornecido pelo invasor, se o endereço