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

Maio 2015

Introdução à protecção overflow


Os ataques por “profusão de tampão” (em inglês “Buffer overflow”, às vezes igualmente 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.

Com efeito, os programas que aceitam dados em entrada, passados em parâmetro, armazenam-nos temporariamente numa 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, não gerem este tipo de profusão e provocam uma falha da aplicação que pode conduzir à execução do código arbitrário e assim dar um acesso ao sistema.

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

Princípio de funcionamento


O princípio de funcionamento de uma profusão de tampão está fortemente ligado à arquitectura do processador sobre o qual a aplicação vulnerável é executada.
Os dados apreendidos numa aplicação são armazenados em memória viva numa zona chamada tampão. Um programa correctamente concebido deve prever uma dimensão máxima para os dados em entradas e verificar que os dados apreendidos não excedem este valor.

As instruções e os dados de um programa em execução são armazenados provisoriamente em 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 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), é-lhe simples executá-lo.

É assim possível incluir no tampão as instruções que abrem um intérprete de comando (em inglês shell)) e permitindo ao pirata pôr a mão no sistema. Este código arbitrário que permite executar o intérprete de comando chama-se shellcode.

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 certas aplicações a ataques por profusão de tampão. Na sequência destes boletins de alerta, os editores dos "software" tocados pela vulnerabilidade publicam geralmente correcções (patchs) que permitem corrigir a falha. Qualquer administrador sistema e rede deve estar informados sobre os alertas de segurança e aplicar o mais depressa possível as correcções.

Mais informações

Para uma leitura offline, é possível baixar gratuitamente este artigo no formato PDF:
Ataques-por-profusao-de-tampao-buffer-overflow .pdf

A ver igualmente


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
Este documento, intitulado « Ataques por profusão de tampão (buffer overflow) »a partir de Kioskea (pt.kioskea.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.