Ataques por transbordamento de buffer

Agosto 2017

Introdução ao ataque por profusão de buffer

Os ataques por transbordamento de buffer (buffer overflow) têm por princípio a execução de um código arbitrário em um programa, enviando-lhe mais dados do que ele pode receber.

Os programas que admitem dados de entrada com parâmetros, os armazenam temporariamente em uma zona da memória chamada buffer. Ora, certas funções de leitura, como as strcpy da linguagem C (esta função permite copiar o conteúdo de uma string em outra), não admitem este tipo de transbordamento e causam o bloqueio do aplicativo, o que pode provocar à execução do código arbitrário e, assim, permitir o acesso ao sistema.

A implementação deste tipo de ataque é muito complicada porque exige um conhecimento aprofundado da arquitetura dos programas e do processador. No entanto, existem vários pontos vulneráveis capazes de automatizar este tipo de ataque e torna-los acessíveis para os iniciantes.

Princípio operacional

O princípio operacional de um transbordamento de buffer está fortemente ligado à arquitetura do processador no qual o aplicativo vulnerável é executado.

Os dados inseridos em um aplicativo são armazenados na memória viva (RAM) em uma área chamada buffer. Um programa corretamente concebido deveria estipular um tamanho máximo para os dados de entrada e garantir que os dados integrados não superem este valor.

As instruções e os dados de um programa em execução são armazenados provisoriamente na memória de maneira contígua numa área chamada pilha (stack). Os dados situados depois do buffer contêm assim um endereço de retorno (chamado ponto de instrução) que permite ao programa continuar o seu tempo de execução. Se o tamanho dos dados for superior ao do buffer, o endereço de retorno é substituído e o programa lerá um endereço de memória inválido, gerando uma violação de segmento na aplicação.

Um hacker que tenha um bom conhecimento técnico pode garantir que o endereço de memória substituído corresponde a um endereço real, por exemplo, que está localizado no mesmo buffer. Assim, ao inserir as instruções no buffer (código arbitrário), é simples para ele executar este procedimento.

Portanto, é possível inserir instruções no buffer para abrir um intérprete de comandos (shell) que permite ao hacker assumir o controle do sistema. Este código arbitrário que permite executar o intérprete de comandos chama-se shell code (conjunto de números hexadecimal que permite controlar uma máquina atacada).

Como se proteger do transbordamento de buffer

Para se proteger contra tais ataques, é necessário desenvolver aplicações que utilizem linguagens de programação avançadas, que garantem uma gestão específica da memória atribuída ou que usem uma linguagem de baixo nível com bibliotecas de funções protegidas (ex: as funções strncpy()).


Os boletins de alerta são regularmente publicados, anunciando a vulnerabilidade de certos aplicativos aos ataques por transbordamento de buffer. Depois da publicação destes boletins de alerta, os editores dos software afetados pela vulnerabilidade geralmente publicam revisões (patchs) para corrigir o problema. Qualquer administrador de sistema de rede deve estar informado sobre os alertas de segurança e aplicar, o mais depressa possível, as correções devidas.

Veja também


Buffer overflow attacks
Buffer overflow attacks
Ataques por desbordamiento de búfer
Ataques por desbordamiento de búfer
Angriffe durch Pufferüberlauf (buffer overflow)
Angriffe durch Pufferüberlauf (buffer overflow)
Attaques par débordement de tampon (buffer overflow)
Attaques par débordement de tampon (buffer overflow)
Attacchi buffer overflow
Attacchi buffer overflow
Última modificação: 21 de julho de 2017 às 11:15 por pintuda.
Este documento, intitulado 'Ataques por transbordamento de buffer ', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.