O que é e como funciona o “Buffer Overflow”

O que é e como funciona o “Buffer Overflow”

Um buffer overflow (ou transbordamento de dados) acontece quando um programa informático excede o uso de memória assignado a ele pelo sistema operacional, passando então a escrever no setor de memória contíguo. Essas falhas são utilizadas por cibercriminosos para executar códigos arbitrários em um computador, o que possibilita muitas vezes aos atacantes controlar o PC

Um buffer overflow (ou transbordamento de dados) acontece quando um programa informático excede o uso de memória assignado a ele pelo sistema operacional, passando então a escrever no setor de memória contíguo. Essas falhas são utilizadas por cibercriminosos para executar códigos arbitrários em um computador, o que possibilita muitas vezes aos atacantes controlar o PC

buffer_overflow-2-623x432

Um buffer overflow (ou transbordamento de dados) acontece quando um programa informático excede o uso de memória assignado a ele pelo sistema operacional, passando então a escrever no setor de memória contíguo. Essas falhas são utilizadas por cibercriminosos para executar códigos arbitrários em um computador, o que possibilita muitas vezes aos atacantes controlar o PC da vítima ou executar um ataque de negação de serviço (DDoS).

Se analisarmos bem, um buffer overflow é causado em um aplicativo informático quando ele não possui os controles de segurança necessários em seu código de programação. É importante lembrar que para transbordar a memória, é preciso ter conhecimentos de programação e noções básicas de arquitetura de sistemas operacionais.

O princípio de um transbordamento de buffer é baseado na arquitetura do processador onde o aplicativo vulnerável é executado, seja ele de 32 ou de 64 bits. Os dados inseridos em um aplicativo são armazenados na memória de acesso aleatório, em um setor conhecida como buffer. Um programa desenhado corretamente deveria estipular um tamanho máximo para dados recebidos e garantir que esses valores não sejam superados.

As instruções e os dados de um programa em execução são armazenados temporariamente em forma contígua na memória em um setor que se chama pila (stack). Os dados localizados depois do buffer contêm um endereço de retorno (denominado ponteiro de instrução) que permite que o programa continue sendo executado. Se a quantidade de dados é superior ao buffer, o endereço de retorno se sobrescreve e o programa passa a ler um endereço de memória inválido, o que gera uma violação de segmento no aplicativo.

Então, qual é o risco de segurança?

Um cibercriminoso com conhecimentos técnicos sólidos pode certificar-se que o endereço de memória sobrescrita corresponda a um endereço real, por exemplo, um endereço que esteja localizado no mesmo buffer. Com isso, ao inserir as instruções no buffer (o código arbitrário), a sua execução é simples.

É possível incluir instruções no buffer que possibilitem a abertura de um interpretador de comandos (como um shell) que permitam ao atacante controlar esse sistema. Esse código arbitrário que possibilita a execução do interpretador de comandos é conhecido como código de shell, ou shellcode.

Esse tipo de vulnerabilidade pode ser encontrado em sistemas operacionais, em aplicativos de terceiros e até em protocolos. Por essa razão, o Laboratório de Investigações sempre recomenda a leitura das falhas corrigidas em atualizações de aplicativos e sistemas operacionais; a instalação de atualizações corrigem esses tipos de erros, eliminando a possibilidade de exploração dessas falhas.

Uma política de atualizações, em conjunto com uma solução de segurança, ajuda a prevenir a exploração desses erros de programação.

Imagem: ©Eddy Van 3000/Flickr

Autor Ignacio Pérez, ESET

Adaptação Ilya Lopes, ESET

 

Discussão