Identifique, mitigue e previna ataques de estouro de buffer em seus sistemas

Os patches do php2shell (CVE-2026-109618 e CVE-2026-109619) para o PHP em fim de vida (EOL) já estão disponíveis. Como as respostas do atendimento de vendas estão mais demoradas do que o normal devido à alta demanda, a maneira mais rápida de obter os pacotes corrigidos é adquirir o ELS para Runtimes on-line (abre em uma nova aba). Leia as perguntas frequentes sobre os patches

Vá direto para um resumo gerado por IA desta postagem do blog

  • Resuma esta postagem com o Perplexity
  • Resuma esta postagem com o Gemini

As vulnerabilidades de estouro de buffer continuam sendo uma via comum pela qual os criminosos cibernéticos obtêm acesso ilegal a sistemas de computador. Trata-se também de um problema crescente, já que há um aumento constante, ano a ano, no número dessas vulnerabilidades.

É um problema antigo também. Talvez você não saiba, mas os ataques de estouro de buffer são um dos os vetores de ataque mais antigos – os estouros de buffer foram identificados pela primeira vez como um risco à segurança em 1972.

Com dezenas de milhares de vulnerabilidades conhecidas de estouro de buffer em circulação, incluindo casos graves como o Heartbleed, desenvolvedores e administradores de sistemas devem ter um bom domínio sobre como detectar, mitigar e também prevenir ataques de estouro de buffer.

Continue lendo para saber o que é um ataque de estouro de buffer e o que sua organização pode fazer para impedir essas ameaças.

 

O que é um ataque de estouro de buffer?

 

Primeiro, é preciso entender o que é um buffer no contexto de software de computador. Os buffers são áreas de retenção de dados: áreas de armazenamento temporário onde os dados são mantidos enquanto um programa está em execução. Os buffers são necessários porque os sistemas interconectados, incluindo aplicativos, nem sempre estão sincronizados.

Em outras palavras, às vezes, quando uma informação é enviada de um ponto a outro, o destinatário ainda não está pronto — e a informação precisa ficar retida em algum lugar. É para isso que serve um buffer: os buffers facilitam a coordenação. Isso pode ocorrer porque os dois pontos operam em velocidades diferentes ou com prioridades distintas.

 

Entendendo o que é um estouro de buffer

 

A memória do computador é finita; portanto, os programadores devem definir espaços de armazenamento com tamanho finito — incluindo o tamanho de um buffer. Por exemplo, um programador definirá um buffer para armazenar uma senha de 8 caracteres como tendo 8 bytes. Quando a senha é gravada e enviada para o buffer, presume-se que ela não tenha mais de 8 caracteres — e, portanto, caiba no buffer.

Ocorre um estouro de buffer quando, em vez de uma senha de 8 caracteres, uma senha de 10 caracteres é enviada ao buffer. Quando isso acontece, o programa de computador é forçado a armazenar os dados em algum lugar – e, como resultado, os dados excedentes são armazenados em outro buffer. Em alguns casos, os dois caracteres adicionais podem acabar sendo armazenados em um local que sobrescreve dados importantes ou até mesmo o código do programa.

É claro que os programadores devem evitar que isso aconteça, projetando seu código de forma a verificar se as entradas excedem o comprimento do buffer – ou utilizando uma série de outras ferramentas de mitigação. No entanto, se o programador simplesmente partir do pressuposto de que a entrada sempre corresponderá ao tamanho do buffer, pode surgir uma vulnerabilidade de estouro de buffer – e isso poderia levar a um ataque de estouro de buffer.

 

Como funciona um ataque de estouro de buffer

 

Em termos simples, em um ataque de estouro de buffer, um hacker grava intencionalmente dados que excedem o tamanho do buffer em um buffer – provocando um estouro de buffer. A intenção pode ser travar o aplicativo ou gravar dados maliciosos (incluindo código executável) em um espaço de armazenamento de dados específico.

Por exemplo, se um invasor coordenar o estouro de buffer corretamente, ele poderá gravar código malicioso em um espaço específico que contenha código executável – e, em seguida, executar seu próprio código. Da mesma forma, o hacker pode usar um estouro de buffer para sobrescrever os dados do buffer e alterar o comportamento de um programa. 

Existem, essencialmente, dois tipos de ataques de estouro de buffer:

  • Ataques de estouro de buffer da pilha são o tipo mais comum de ataque de estouro de buffer e envolvem a sobrescrita da memória da pilha utilizada durante a execução de um programa. Ao gravar dados em excesso no buffer, o hacker quase sempre consegue corromper os dados no buffer adjacente.
  • Estouros de heap envolvem um ataque em que o hacker tenta sobrecarregar o espaço de memória alocado a um programa, ultrapassando o limite utilizado pelas operações em execução no momento. Isso corrompe os dados de tal forma que o aplicativo em execução sobrescreve suas estruturas internas.

Ambas essas estratégias de ataque podem resultar em sistemas comprometidos, perda de dados e interrupção dos serviços.

 

Quais são os riscos de um ataque de estouro de buffer?

 

Os estouros de buffer são apenas um dos muitos vetores de ataque existentes, e suas intenções se assemelham às de muitas outras explorações de vulnerabilidades.

Vale ressaltar que, mesmo nos casos em que a execução remota de código seja muito difícil por meio de um ataque de estouro de buffer, os hackers ainda assim podem causar estragos utilizando esses estouros de buffer simplesmente para provocar falhas nas aplicações — e uma condição de Negação de Serviço (DoS) —, o que, por sua vez, levará a outras consequências.

Além disso, pode-se argumentar que um ataque de estouro de buffer costuma ser apenas o primeiro passo de um plano de ataque muito mais complexo — seja o objetivo final a execução remota de código, a escalada de privilégios ou qualquer outra coisa.

É claro que os ataques de estouro de buffer apresentam características específicas, mas, de modo geral, podemos afirmar que os hackers utilizariam um ataque de estouro de buffer para atingir qualquer um dos seguintes objetivos:

  • Interrupção do serviço: Por meio de um ataque de estouro de buffer, um hacker poderia provocar uma interrupção no serviço. Pode ser relativamente fácil explorar uma vulnerabilidade de estouro de buffer para causar a falha de um aplicativo, derrubando os serviços que ele suporta.
  • Acesso não autorizado: Um agente mal-intencionado pode usar uma vulnerabilidade de estouro de buffer para obter acesso ilícito à infraestrutura de TI – o que poderia abrir as portas para uma série interminável de violações.
  • Execução de código: Por meio de um ataque de estouro de buffer, um invasor pode usar seus sistemas para executar código que ele mesmo criou com o objetivo de obter ganhos ilícitos.
  • Perda de dados: Ataques de estouro de buffer podem ser usados para extrair dados, manipulando o comportamento do aplicativo para, em seguida, redirecionar as saídas e capturar ilegalmente os fluxos de dados.

De modo geral, os riscos associados às vulnerabilidades de estouro de buffer são semelhantes aos da maioria das vulnerabilidades e, sem dúvida, são igualmente graves.

 

Exemplos reais de vulnerabilidades de estouro de buffer

 

No início deste artigo, destacamos o fato de que as vulnerabilidades de estouro de buffer foram identificadas pela primeira vez em 1972. Embora alguns casos de ataques bem-sucedidos tenham surgido logo em seguida, o mundo da computação de cerca de 50 anos atrás não era tão difundido, nem tão exposto, como é hoje.

O primeiro exemplo importante de um ataque generalizado de estouro de buffer é o worm Morris. Em 1988, esse worm se espalhou pela internet, que ainda estava em seus primórdios, e derrubou 10% da “internet” da época em apenas dois dias. Ao longo de dois anos, esse worm afetou 60.000 computadores.

Talvez a vulnerabilidade de estouro de buffer mais conhecida seja a Heartbleed. Ela veio à tona em 2014 como uma vulnerabilidade crítica em um software amplamente utilizado: o OpenSSL. Inúmeros servidores da internet operados por empresas de destaque, como o Yahoo, utilizavam a biblioteca de criptografia OpenSSL para implementar o protocolo TLS (segurança da camada de transporte).

Essa vulnerabilidade de estouro de buffer também foi causada por um erro simples. Tudo se resumiu a uma clássica falta de verificação de limites no código-fonte do OpenSSL. É claro que o OpenSSL acabou sendo corrigido por meio de um patch , mas só depois que a vulnerabilidade causou alarme generalizado – e danos.

Os riscos não se limitam aos recantos técnicos da internet. Aplicativos populares também correm o risco de sofrer ataques de estouro de buffer: o popular aplicativo de bate-papo WhatsApp apresenta uma vulnerabilidade de estouro de buffer, registrada como CVE-2019-3568 em maio de 2019. Nesse caso, os invasores conseguiram usar a vulnerabilidade para executar código malicioso no dispositivo móvel de um usuário, manipulando pacotes logo no início de uma chamada de voz.

Outros exemplos incluem:

  • O worm Stuxnet em 2010: Tendo como alvo o programa nuclear iraniano, o ataque explorou uma vulnerabilidade de estouro de buffer no sistema operacional Windows.
  • O ataque cibernético à Sony Pictures em 2014: Os invasores utilizaram uma vulnerabilidade de estouro de buffer na rede da empresa para obter acesso a informações confidenciais e causar perturbações generalizadas.
  • O ataque do ransomware WannaCry em maio de 2017: Esse ataque afetou mais de 200 mil computadores em 150 países ao explorar uma vulnerabilidade de estouro de buffer no Microsoft Windows.
  • O ataque à cadeia de suprimentos da SolarWinds em dezembro de 2020: Os invasores utilizaram uma vulnerabilidade de estouro de buffer no software de gerenciamento de rede SolarWinds Orion, obtendo acesso às redes de várias organizações.
  • A exploração de vulnerabilidade “zero-day” da Zscaler em novembro de 2021: Esse ataque afetou os serviços de segurança baseados em nuvem da Zscaler ao utilizar uma vulnerabilidade de estouro de buffer para executar código arbitrário.

 

Mitigação e prevenção de ataques de estouro de buffer

 

O panorama dos estouros de buffer mudou um pouco ao longo do tempo: de certa forma, os riscos mais elementares relacionados a estouros de buffer agora são mitigados automaticamente. Os fornecedores de sistemas operacionais e de software, assim como os programadores, tendem a adotar práticas que limitam os estouros de buffer, mesmo quando existe uma vulnerabilidade subjacente.

Tanto os fornecedores de software quanto os usuários de seus produtos precisam estar atentos aos riscos de estouro de buffer – e tomar as medidas necessárias para mitigá-los. Dito isso, há um limite para o que os usuários podem fazer para proteger seus ambientes contra ataques de estouro de buffer. Cabe ao fornecedor programar o software de forma segura e disponibilizar correções rapidamente quando necessário.

 

Prevenção por parte do fornecedor

 

Os fornecedores de software são, em última instância, responsáveis por prevenir vulnerabilidades de estouro de buffer. A existência de oportunidades para explorar limitações de buffer geralmente se resume às características do software.

Pode ser algo tão simples quanto estar ciente das limitações da linguagem de programação utilizada e dos riscos inerentes a ela: C e C++ não possuem proteção integrada contra estouros de buffer, enquanto Java, PERL e C# contam com alguns mecanismos de segurança. 

Aqui estão algumas abordagens específicas que os fornecedores podem adotar:

  • Cuidado com as suposições: Os programadores costumam partir de certas suposições sobre o funcionamento de um aplicativo, mas os invasores podem explorar essas suposições. Em vez disso, os programadores devem programar tendo em mente que essas suposições podem ser violadas. A verificação de limites, que envolve conferir se uma entrada não excede o tamanho do buffer, é um exemplo importante.
  • Randomização do Layout do Espaço de Endereços (ASLR): Muitos ataques de estouro de buffer dependem do conhecimento da localização do espaço de endereços. Ao randomizar o layout do espaço de endereços, fica mais difícil coordenar um estouro de buffer, já que a localização do alvo muda continuamente e de forma aleatória.
  • Limitar a execução: Configurar pilhas como não executáveis significa que invasores não podem usar estouros de buffer para executar código malicioso em uma pilha.
  • Evite erros de programação: As vulnerabilidades de estouro de buffer, na maioria das vezes, decorrem de um código de computador específico. Os programadores devem agir com responsabilidade e evitar cometer erros que possam ser explorados por invasores.

Os pontos acima podem mitigar os riscos de ataques de estouro de buffer, mas, no fim das contas, é inevitável que ocorram erros.

 

Medidas de mitigação do lado do usuário

 

Ao discutirmos as opções que os fornecedores podem utilizar para fortalecer seus softwares contra ataques de estouro de buffer, deixamos de mencionar um ponto fundamental: as vulnerabilidades de estouro de buffer muitas vezes só são descobertas depois que o software já foi lançado ao público.

Esse cenário não é incomum e reflete o que geralmente acontece quando se descobre uma vulnerabilidade. A solução é simples: o fornecedor lança um patch que corrige a vulnerabilidade de estouro de buffer, e o usuário final instala o patch para mitigar a vulnerabilidade.

Quando os usuários finais estão motivados a proteger suas cargas de trabalho contra vulnerabilidades de estouro de buffer, a opção de longe mais eficaz será sempre a aplicação regular e consistente de patches. No entanto, a aplicação eficaz de patches é mais fácil na teoria do que na prática, pois esse processo pode causar interrupções e exigir muitos recursos.

A aplicação automatizada de patches, sem necessidade de reinicialização, por meio de ferramentas como o KernelCare ajuda – ao reduzir os requisitos de recursos e eliminar a necessidade de interrupções no servidor. No entanto, às vezes as vulnerabilidades de estouro de buffer são desconhecidas ou simplesmente não há uma correção eficaz. Algumas opções que os usuários podem utilizar incluem:

  • Fique atento a comportamentos incomuns: Acompanhe de perto o desempenho do servidor e da rede, bem como os logs, para detectar atividades de invasores, da mesma forma que você ficaria atento a qualquer outro tipo de ataque.
  • Gerenciar privilégios: Os invasores costumam se aproveitar de permissões e privilégios mal gerenciados. Certifique-se de que seus aplicativos e usuários operem com o mínimo de permissões de acesso, para garantir que os invasores não tenham a oportunidade de escalar seus privilégios.
  • Ferramentas de prevenção de ameaças: Vulnerabilidades de dia zero podem ser rapidamente exploradas, mas ferramentas automatizadas, como firewalls de aplicativos web, podem impedir alguns ataques ao monitorar padrões de comportamento suspeitos e simplesmente bloquear o tráfego proveniente de fontes suspeitas.

Por fim, sugerimos que os usuários finais protejam suas cargas de trabalho escolhendo cuidadosamente seus fornecedores de sistemas operacionais e de software. Faça perguntas essenciais: qual é a reputação do fornecedor no que diz respeito à segurança de software? O fornecedor lança patches rapidamente quando uma vulnerabilidade é identificada?

Como as vulnerabilidades de estouro de buffer são, essencialmente, um problema de programação, cabe aos fornecedores gerenciar a vulnerabilidade e — como usuário final — você pode se proteger avaliando cuidadosamente com quais fornecedores trabalha.

 

A conclusão

Os fornecedores de software são, em última instância, responsáveis por mitigar as vulnerabilidades de estouro de buffer. Afinal, tudo se resume ao código do aplicativo. Felizmente, os fornecedores costumam responder lançando patches que eliminam as oportunidades de explorar estouros de buffer.

Para as organizações, a rápida implementação de novos patches é fundamental. Ferramentas automatizadas, como o KernelCare Enterprise, , ajudam a eliminar os obstáculos no processo de aplicação de patches. No entanto, assim como acontece com qualquer outra ameaça cibernética, as empresas também devem implementar medidas mais amplas de higiene cibernética para limitar os riscos de vulnerabilidades de estouro de buffer — e de vulnerabilidades em geral.

Resumo
Identifique, mitigue e previna ataques de estouro de buffer em seus sistemas
Nome do artigo
Identifique, mitigue e previna ataques de estouro de buffer em seus sistemas
Descrição
Continue lendo para saber quais são, basicamente, os dois tipos de ataque por estouro de buffer e o que sua organização pode fazer para impedir essas ameaças.
Autor
Nome da editora
TuxCare
Logotipo da editora

Junte-se a mais de 4.500 profissionais de Linux e código aberto!

2 vezes por mês. Sem spam.

Índice
Obtenha as respostas sobre segurança de código aberto de que você precisa

Junte-se a mais de 4.500 profissionais de Linux e código aberto!

2 vezes por mês. Sem spam.