Um buffer overflow (ou transbordamento de dados) ocorre quando um programa em execução tenta gravar dados além do que o buffer de memória permite, sobrecarregando o sistema operacional. Este tipo de falha é usada por cibercriminosos para executar código arbitrário em um computador, de modo que em muitos casos eles conseguem obter o controle do dispositivo da vítima ou executar um ataque de Negação de Serviço (DoS).
Na verdade, um buffer overflow ocorre quando um aplicativo não conta com os controles de segurança necessários em seu código de programação. Deve-se destacar que, para realizar um transbordamento de dados, é necessário ter conhecimentos de programação, bem como noções básicas de arquitetura de sistemas operacionais.
O princípio operacional de um buffer overflow anda de mãos dadas com a arquitetura do processador no qual um aplicativo vulnerável é executada, seja ele de 32 bits ou 64 bits. Os dados inseridos em um aplicativo são armazenados na memória de acesso aleatório, em uma área conhecida como buffer. Um programa devidamente projetado estipula um tamanho máximo para os dados de entrada e garante que esse valor não seja excedido.
As instruções e os dados de um programa em execução são armazenados temporariamente na memória, em uma área chamada de pilha. Os dados que ficam depois do buffer contêm um endereço de retorno (chamado de ponteiro de instruções) que permite que o programa continue seu tempo de execução. Se o tamanho dos dados for maior que o buffer, o endereço de retorno é sobrescrito e o programa lerá um endereço de memória inválido, causando uma violação de segmento no aplicativo.
Qual é o risco de segurança nisso?
Um cibercriminoso com sólidos conhecimentos técnicos pode garantir que o endereço de memória sobrescrito corresponda a um endereço real, por exemplo, um que esteja localizado no mesmo buffer. Ao inserir as instruções no buffer (o código arbitrário), torna-se fácil executar essa instrução. Desta forma, é possível incluir instruções no buffer que permitem a abertura de um intérprete de comandos (como um shell), o que pode fazer com que um atacante assuma o controle do sistema. Este código arbitrário que permite a execução do intérprete de comandos é conhecido como código de shell ou shellcode.
Como vimos anteriormente, essa falha pode ser encontrada em sistemas operacionais, em outros tipos de aplicativos de terceiros e até mesmo em protocolos. Nestes casos, o ideal é realizar a leitura das falhas que são corrigidas através de atualizações dos aplicativos e sistemas operacionais - a instalação de atualizações corrige este tipo de erro, fechando brechas que podem facilitar a ocorrência de um vazamento de dados.
A adoção de uma política de atualizações, em conjunto com uma solução de segurança, ajuda a evitar a exploração desses bugs na programação de aplicativos.