O que é um estouro de buffer?

Em um programa de computador, as variáveis são alocadas em blocos de memória de tamanho fixo. Depois que essa memória for alocada, o programa poderá armazenar e recuperar dados desses locais. Estouros de buffer ocorrem quando a quantidade de dados gravados em um desses blocos de memória excede seu tamanho. Como resultado, a memória alocada para outras finalidades é sobrescrita, o que pode ter vários efeitos no programa.

Download the eBook Solicite uma demo

O que é um estouro de buffer?

Um ataque de estouro de buffer

Um ataque de buffer overflow é um ataque cibernético comum que explora deliberadamente uma vulnerabilidade de buffer overflow onde dados controlados pelo usuário são gravados na memória. Ao enviar mais dados do que cabem no bloco de memória alocado, o invasor pode sobrescrever dados em outras partes da memória.

Os invasores podem realizar ataques de buffer overflow por vários motivos, como substituir códigos ou dados críticos para travar o programa, injetar código malicioso para ser executado no programa ou modificar valores críticos, alterando o fluxo de execução do programa.

Ameaça de estouro de buffer

Ataques de buffer overflow podem ser usados para atingir vários objetivos, incluindo:

  • Denial of Service (DoS) Attacks: dentro do espaço de memória de um aplicativo estão ponteiros, código e outros dados que são essenciais para a capacidade de execução do programa. A substituição desses dados pode causar falha no programa, resultando em um ataque DoS.
  • Execução de código: Um objetivo comum das explorações de buffer overflow é forçar o aplicativo vulnerável a executar o código fornecido pelo invasor. Isso permite que o invasor execute código no sistema afetado com o mesmo acesso e permissões do aplicativo explorado.
  • Desvios de controle de acesso: a exploração de buffer overflows para executar código pode elevar o acesso de um invasor a um sistema de destino. Esse acesso expandido pode então ser usado para realizar ataques subsequentes.

Tipos de ataques de buffer overflow

Um ataque de buffer overflow pode ser executado de algumas maneiras diferentes, mas alguns dos exemplos mais comuns incluem:

  • Estouro de buffer baseado em pilha: A pilha do programa contém dados críticos de fluxo de controle para um aplicativo — como ponteiros de retorno de função — e é um alvo comum de ataques de estouro de buffer. A substituição de um ponteiro de retorno pode fazer com que o programa salte para dados controlados pelo invasor e os execute como código, permitindo que o invasor execute código com as mesmas permissões do aplicativo.
  • Estouro de buffer baseado em heap: O heap do programa é usado para alocar memória dinamicamente para variáveis cujo tamanho não é definido quando o programa é compilado. Ao explorar uma vulnerabilidade de buffer overflow e inundar o heap do sistema, um invasor pode sobrescrever dados críticos do aplicativo.
  • Ataques de string de formato: funções da família printf em C/C++ podem usar strings de formato, que permitem leitura e gravação de memória. Se os dados fornecidos pelo usuário forem interpretados como uma sequência de formato, eles poderão ser usados para vazar ou modificar valores confidenciais.

Exemplos de ataques de estouro de buffer

Vulnerabilidades de estouro de buffer são comuns em C/C++ e ocorrem quando um programa aloca um pedaço de memória de tamanho fixo e depois copia dados nele de forma insegura. O exemplo de código a seguir contém uma vulnerabilidade de buffer overflow:

char buf[BUFSIZE]; 

 obtém(buf);

Neste exemplo de código, a variável buf tem um tamanho fixo de BUFSIZE. No entanto, a função get irá ler os dados e armazená-los em buf até atingir um terminador nulo (0x00). Um invasor pode explorar isso para substituir dados além do final de buf.

Os ataques de string de formato são um caso especial de buffer overflow. O exemplo de código a seguir contém uma vulnerabilidade de cadeia de formato.

#include <stdio.h>

void main(int argc, char **argv) 

 { 

 printf(argv[1]); 

 }

Neste exemplo, o programa pega a entrada fornecida pelo usuário de argv[1] e a imprime no terminal. No entanto, se a entrada do usuário contiver uma sequência de formato, isso poderá permitir que um invasor leia ou edite a memória no sistema.

Como evitar estouros de buffer

A vulnerabilidade de buffer overflow pode ser evitada por:

  • Executando validação de entrada: A vulnerabilidade de buffer overflow ocorre quando um programa faz suposições sobre entradas fornecidas pelo usuário sem validar essas suposições. Verificar o comprimento dos dados ou copiar apenas um determinado número de bytes para um local de memória pode ajudar a evitar estouros de buffer.
  • Habilitando proteção de memória em tempo de execução: A maioria dos computadores possui proteções integradas contra estouros de buffer, como ASLR (Address Space Layout Randomization), Prevenção de Execução de Dados (DEP) e Proteção contra Sobregravação de Tratamento de Exceções Estruturadas. A ativação dessas proteções torna os ataques de buffer overflow muito mais difíceis de executar.
  • Evitando funções vulneráveis: estouros de buffer são possíveis por funções vulneráveis, como get, scanf e strcpy em C/C++. A vulnerabilidade de buffer overflow pode ser evitada usando adequadamente as versões seguras dessas funções.
  • Usando linguagens com proteção de memória: estouros de buffer ocorrem em linguagens de programação com variáveis de tamanho fixo e sem proteção de memória. O uso de outras linguagens de programação, como Python, Java ou C#, dificulta ou impossibilita os buffer overflows.
  • Prevenindo a exploração de vulnerabilidade: As soluções de firewall de aplicativo da web (aplicativo de firewall da web, WAF) (WAFs) e de aplicativo da web e proteção de API (WAAP) podem identificar e bloquear tentativas de exploração de vulnerabilidade de buffer overflow. Isso reduz o risco que ataques de buffer overflow representam para a segurança de aplicativos corporativos (AppSec).

Proteção contra estouro de buffer com CloudGuard AppSec

A exploração da vulnerabilidade de buffer overflow pode causar travamentos de programas, vazamento de dados ou execução de código malicioso nos sistemas de uma organização. Saiba como o CloudGuard AppSec pode ajudar a proteger contra ataques de buffer overflow e outras ameaças neste e-book. Em seguida, inscreva-se para uma demogratuita para ver por si mesmo como o CloudGuard AppSec pode melhorar a segurança do seu aplicativo em nuvem.

×
  Opinião
Este site usa cookies para sua funcionalidade e para fins de análise e marketing. Ao continuar a usar este site, você concorda com o uso de cookies. Para mais informações, leia o nosso Aviso de Cookies.
OK