Todos os dias, hackers em todo o mundo estão descobrindo e explorando novas vulnerabilidades em sites, aplicativos e até mesmo na arquitetura do sistema. Uma coisa comum em todos os dispositivos eletrônicos, antigos ou novos, é que eles são executados por programas armazenados na memória. Os hackers exploraram isso e encontraram vulnerabilidades conhecidas como estouro de buffer.

Embora não sejam novos, os ataques de estouro de buffer e vulnerabilidades têm causado estragos no ciberespaço. Aqui, explicaremos a você o que são ataques de estouro de buffer e como você pode evitá-los.

Noções básicas sobre buffers e memória do sistema

Para entender o que é um ataque de estouro de buffer e como ele funciona, você precisa saber o que é um buffer e como funciona a memória de um computador.

Pilha e memória heap são duas características principais da memória de um computador. São estruturas de dados usadas para alocação de memória. Embora sejam semelhantes, pilha e memória heap diferem de várias maneiras.

A pilha, que usa o conceito Last-in, First-out (LIFO), é usada na RAM (memória de acesso aleatório) para armazena execuções de programa temporariamente, enquanto o heap atribui memória usando alocação dinâmica para global variáveis. Mas a única coisa que eles têm em comum é um buffer.

O que é um tampão?

Um buffer é uma região da memória usada para armazenar dados, provavelmente na RAM de um computador, enquanto está sendo movido de um local para outro. Esses dados geralmente são programas que precisam ser executados. Os buffers são armazenados na pilha ou heap. Eles otimizam a execução dos dados.

O que é um estouro de buffer?

Um estouro de buffer ocorre quando o buffer recebe mais dados do que sua capacidade de armazenamento. Como ele não consegue processar essa quantidade de dados, ele transborda.

Agora, na memória de um computador, logo após um buffer ou espaço de buffer é um endereço de retorno. Esse endereço de retorno é, na verdade, chamado de Extended Instruction Pointer (EIP). Sua função é apontar o computador para um programa especificado quando preenchido. Quando um buffer tem mais dados do que pode conter e transborda, ele transborda para o endereço de retorno.

Para entender isso, vamos supor que você tenha um espaço de buffer que pode conter apenas cinco letras. Portanto, se você preencher palavras como "açúcar" ou "paz", o fluxo de buffer poderá contê-lo. Mas quando você tem uma palavra como "autenticação", ela inevitavelmente vai transbordar. Isso leva a um bug ou falha no sistema. Mas os hackers podem explorar essa vulnerabilidade para iniciar um ataque de estouro de buffer.

O que é um ataque de estouro de buffer e como ele funciona?

Os ataques de estouro de buffer acontecem quando o hacker assume o controle do endereço de retorno ou EIP. Quando o invasor sabe o tamanho da memória de um sistema, ele pode gravar dados intencionalmente nesse sistema apenas para transbordar. Em seguida, eles certificam-se de que o EIP ou endereço de retorno esteja escrito para apontar para um programa que possa dar acesso ao sistema ou revelar informações confidenciais armazenadas no sistema.

O invasor pode até gravar alguns dados que contêm código malicioso e fazer com que o buffer estoure. O EIP é então escrito para redirecionar o sistema de volta ao código malicioso e é feito para ser executado. Então, o hacker obtém o controle do sistema.

Existem cinco etapas principais nos ataques de estouro de buffer:

  1. cravando
  2. Fuzzing
  3. Encontrando o deslocamento
  4. Substituindo o EIP ou endereço de retorno
  5. Explorando a vulnerabilidade

Piscar é o primeiro passo. Aqui, os hackers encontram a parte da memória do programa que é vulnerável a estouros de buffer. Em seguida, vem o fuzzing, que é semelhante ao spiking, mas aqui, o hacker envia caracteres para o programa para ver se ele pode ser quebrado. Uma vez bem-sucedido, o invasor prossegue para encontrar o deslocamento, que é onde o buffer estourou. Isso é feito para saber o tamanho do buffer e o endereço de retorno. Em seguida, o hacker insere um código de shell malicioso e controla o sistema.

Quais são os tipos de ataques de estouro de buffer?

Existem dois tipos principais de ataques de estouro de buffer: ataques baseados em pilha e baseados em heap.

1. Ataques de estouro de buffer baseado em pilha

Os ataques de estouro de buffer baseados em pilha são o tipo mais popular de ataques de estouro de buffer. Eles ocorrem quando a memória da pilha do sistema é sobrecarregada e explorada. Também é conhecido como quebra de pilha.

2. Ataques de estouro de buffer baseados em heap

Esse tipo de estouro de pilha não é muito comum, pois é difícil de implementar e explorar. Ocorre quando a memória alocada para um programa estoura. Em janeiro de 2021, o Google descobriu um estouro de buffer baseado em heap vulnerabilidade no componente V8 do Chrome.

Como você pode evitar ataques de estouro de buffer?

Os ataques de estouro de buffer podem ser mitigados usando proteções de tempo de execução do SO, linguagens de programação seguras, randomização de layout de espaço de endereço e garantia de medidas gerais de segurança adequadas.

1. Usando a proteção de tempo de execução do SO

A proteção de tempo de execução também é conhecida como verificação de limites de matriz de tempo de execução. Isso garante que cada programa executado esteja dentro do espaço de buffer ou memória disponível. E verifica todos os dados gravados na memória do sistema. Isso dificulta que os hackers sobrescrevam dados no sistema e explorem a vulnerabilidade.

2. Usando linguagens de programação seguras

Linguagens de programação como C e C++ não implementam a verificação de limites de matriz de tempo de execução porque é necessário código extra para verificar cada programa escrito no sistema e reduz a velocidade. Portanto, eles são mais suscetíveis a ataques de estouro de buffer. Usar linguagens mais seguras como C#, Java e Python é melhor porque eles correm um risco menor de ataques de estouro de buffer.

3. Use a randomização de layout de espaço de endereço (ASLR)

Essa medida de segurança atribui aleatoriamente os endereços de programas e funções na memória de um sistema a diferentes regiões de dados. Isso dificulta a navegação de um invasor por funções confidenciais na memória.

4. Garanta políticas de segurança rígidas

Isso envolve manter o sistema atualizado regularmente, validar todos os dados gravados no sistema e atribuir o mínimo de privilégios aos usuários. Com as políticas de segurança adequadas, você não precisa se preocupar com um ataque de estouro de buffer.

Manter sua segurança rígida é essencial para combater ataques de estouro de buffer

De acordo com um ditado popular em segurança, “enquanto um sistema for usado por humanos, existe uma vulnerabilidade”, o que é verdadeiro e inevitável. No entanto, sempre é possível reduzir as chances de ataque, garantindo que as medidas de segurança adequadas estejam em vigor e sejam rigorosamente cumpridas.

Lembre-se de que os hackers estão constantemente encontrando novas maneiras de explorar vulnerabilidades como esta. Portanto, cabe a você ficar à frente deles, mantendo-se atento aos mais recentes avanços no campo da segurança cibernética.