Ataques por profusão de tampão (buffer overflow)

Junho 2017

Introdução à protecção overflow

Os ataques por profusão de tampão (em inglês Buffer overflow, às vezes também chamados 'superação de tampão') têm por princípio a execução de código arbitrário por um programa, enviando-lhe mais dados do que ele é suposto receber.

Os programas que aceitam dados em entrada, passados em parâmetro, armazenam-nos temporariamente em uma zona da memória chamada tampão (em inglês buffer). Ora, certas funções de leitura, como as funções strcpy da linguagem C (esta função permite copiar o conteúdo de uma string para outro), não gerem este tipo de profusão e provocam uma falha do aplicativo que pode conduzir à execução do código arbitrário e assim abrir acesso ao sistema.

A execução deste tipo de ataque é muito complicada porque exige um conhecimento aprofundado da arquitetura dos programas e dos processadores. No entanto, existem numerosas proezas capazes de automatizar este tipo de ataque e deixá-lo ao alcance dos neófitos.

Princípio de funcionamento

O princípio de funcionamento de uma profusão de tampão está fortemente ligado à arquitetura do processador no qual o aplicativo vulnerável é executado.

Os dados apreendidos em um aplicativo são armazenados na memória viva - RAM em uma zona chamada tampão. Um programa corretamente concebido deve prever uma dimensão máxima para os dados em entradas e verificar que os dados integrados não excedem 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 zona chamada pilha (em inglês stack). Os dados situados após o tampão contêm assim um endereço de regresso (chamado apontador de instrução) que permite ao programa continuar a sua execução. Se a dimensão dos dados for superior à dimensão do tampão, o endereço de regresso então é esmagado e o programa lerá um endereço de memória inválido, o que provoca uma falta de segmentação (em inglês segmentation fault) da aplicação.

Um pirata que tenha um bom conhecimento técnico pode assegurar-se de que o endereço da memória esmagado corresponde a um endereço real, por exemplo, situado no próprio tampão. Assim, escrevendo instruções no tampão (código arbitrário), é simples executá-lo.

Assim, é possível incluir, no tampão, as instruções que abrem um intérprete de comando (em inglês shell) que permite ao pirata pôr a mão no sistema. Este código arbitrário que permite executar o intérprete de comando chama-se shell code (conjunto de números hexadecimal que permitem controlar uma máquina atacada)

Proteger-se de um ataque overflow

Para proteger-se deste tipo de ataque, é necessário desenvolver aplicações com a ajuda de linguagens de programação evoluídas, assegurando uma gestão fina da memória atribuída ou com a ajuda de linguagem de baixo nível, utilizando bibliotecas de funções protegidas (por exemplo, as funções strncpy).

Boletins de alerta são regularmente publicados, anunciando a vulnerabilidade de certos aplicativos face os ataques por profusão de tampão. Na sequência destes boletins de alerta, os editores dos software tocados pela vulnerabilidade publicam geralmente correções (em inglês patchs) que permitem corrigir a falha. 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: 8 de maio de 2017 às 10:09 por ninha25.
Este documento, intitulado 'Ataques por profusão de tampão (buffer overflow)', 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.