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

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

Última modificação do dia Sábado 13 de Junho de 2009 às 17:32:20 por owliance.pt_004
Este documento, intitulado « Ataques por profusão de tampão (buffer overflow) »a partir de Kioskea.net (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.
Scanne das portas (Port scanning)
Spam