Cloud security resource

Falha hollowbyte no openssl permite ddos eficiente com payload mínimo

7 минут чтения

Falha HollowByte transforma servidores OpenSSL em alvo fácil para DDoS de baixa complexidade

Uma vulnerabilidade recentemente detalhada por pesquisadores da Okta, batizada de HollowByte, expõe servidores que utilizam OpenSSL a ataques de negação de serviço extremamente eficientes. Com um payload malicioso de apenas 11 bytes, um invasor não autenticado é capaz de provocar consumo anormal de memória, degradar o desempenho e, em muitos cenários, derrubar serviços críticos.

Embora o problema tenha sido corrigido de forma discreta pela equipe do OpenSSL, sem atribuição de identificador CVE, o impacto potencial é relevante, já que a biblioteca está presente em praticamente toda a infraestrutura moderna de TI, de servidores web a bancos de dados.

Como o ataque HollowByte explora o handshake TLS

Durante o estabelecimento de uma conexão TLS (o famoso “handshake”), cliente e servidor trocam uma série de mensagens estruturadas. Cada uma delas possui um cabeçalho de 4 bytes, responsável por informar o tamanho do conteúdo que virá em seguida.

Nas versões vulneráveis do OpenSSL, existe um comportamento perigoso: o servidor confia nesse valor do cabeçalho e realiza a alocação de memória com base no tamanho declarado antes de receber o payload completo e sem validar adequadamente se a quantidade de dados recebidos corresponde ao que foi anunciado.

O ataque HollowByte aproveita justamente essa confiança excessiva. O invasor envia um pacote de apenas 11 bytes, mas com um cabeçalho que indica um corpo de mensagem muito maior. Ao receber esse cabeçalho inflado, o OpenSSL reserva uma quantidade significativa de memória para tratar aquela conexão. Em seguida, o servidor fica bloqueado, aguardando por dados adicionais que nunca virão, deixando o thread ocupado e a memória alocada.

Por que a memória não volta ao normal mesmo após o ataque?

À primeira vista, pode parecer que o problema se resolveria automaticamente após o encerramento das conexões. De fato, o OpenSSL libera os buffers quando a sessão é finalizada. O ponto crítico está em como o sistema operacional e a biblioteca padrão lidam com essa memória.

Em sistemas Linux com a GNU C Library (glibc), pequenas e médias alocações de memória não são devolvidas ao sistema operacional imediatamente. Em vez disso, são mantidas para possível reutilização pelo próprio processo. Em circunstâncias normais, isso aumenta o desempenho. No contexto do HollowByte, porém, torna-se um vetor de ataque.

Ao disparar ondas sucessivas de conexões malformadas, com tamanhos declarados aleatórios e exagerados, o atacante força o alocador de memória a criar diversos blocos que, embora tecnicamente liberados mais tarde, não são reaproveitados de forma eficiente. O resultado é a fragmentação do heap e um aumento constante do Resident Set Size (RSS), métrica que reflete a quantidade de memória física efetivamente ocupada pelo processo.

Mesmo após o término do ataque, o processo servidor permanece “inchado” em termos de consumo de memória. Em muitos casos, a única forma de recuperar integralmente o espaço desperdiçado é reiniciando o serviço ou o processo afetado, o que implica indisponibilidade planejada em um contexto que já é crítico.

Alcance do problema: onde o OpenSSL está presente

O risco da HollowByte é amplificado pela onipresença do OpenSSL no ecossistema de TI. A biblioteca é usada:

– Em servidores web como NGINX e Apache, responsáveis por hospedar sites, APIs e aplicações corporativas.
– Em runtimes de linguagens de programação, como Node.js, Python, Ruby e PHP, que dependem do OpenSSL para estabelecer conexões TLS seguras.
– Em bancos de dados como MySQL e PostgreSQL, que utilizam TLS para proteger comunicação entre cliente e servidor.
– Em sistemas operacionais baseados em Linux, onde o OpenSSL geralmente vem pré-instalado para gerenciamento de certificados e criptografia.

Nos testes conduzidos pela equipe da Okta, ambientes de baixa capacidade – por exemplo, servidores com pouca memória ou instâncias menores em nuvem – tiveram seus recursos esgotados com relativa facilidade. Já servidores de grande porte, embora não derrubados de imediato, chegaram a perder cerca de 25% de memória disponível, tudo isso com tráfego de ataque permanecendo abaixo de muitos limiares de alerta de segurança, o que torna o ataque silencioso e difícil de detectar em um primeiro momento.

Como foi feita a correção no OpenSSL

O time responsável pelo OpenSSL revisou a lógica de alocação usada durante o handshake TLS. Nas versões corrigidas, o comportamento mudou de forma essencial: o buffer de recepção só cresce conforme os dados de fato chegam, em vez de seguir cegamente a declaração de tamanho contida no cabeçalho.

Na prática, isso significa que um atacante não consegue mais forçar, apenas com um cabeçalho inflado, uma reserva massiva de memória. O código passou a desconfiar das informações declaradas e a validar o volume de dados efetivamente recebido antes de expandir os buffers.

A correção foi introduzida na versão 4.0.1 do OpenSSL e posteriormente backportada para versões ainda amplamente usadas: 3.6.3, 3.5.7, 3.4.6 e 3.0.21. Essas versões passam a tratar o problema na origem, impedindo o padrão de alocação abusiva explorado pela HollowByte.

O que as organizações devem fazer agora

A principal recomendação é inequívoca: atualizar imediatamente os pacotes OpenSSL em todos os servidores e serviços que dependem da biblioteca. Em ambientes corporativos, isso inclui:

– Servidores web (incluindo balanceadores de carga e proxies reversos).
– Aplicações backend escritas em linguagens que usam OpenSSL por padrão.
– Servidores de banco de dados com suporte a TLS.
– Componentes internos que realizam comunicação criptografada entre microserviços.

Além da mera atualização, é fundamental revisar o ciclo de gestão de vulnerabilidades:
– Mapear onde o OpenSSL está instalado e em quais versões.
– Automatizar verificações de versão em pipeline de CI/CD e em ferramentas de inventário de ativos.
– Estabelecer janelas regulares de manutenção para aplicação de patches de segurança.

Medidas adicionais de mitigação e monitoramento

Mesmo após a atualização, vale fortalecer os controles de detecção e resposta para esse tipo de ameaça:

1. Monitoramento de memória:
Configurar alertas baseados em aumento anômalo e persistente de RSS em processos que utilizam TLS, como NGINX, Apache e servidores de aplicação.

2. Limitação de conexões suspeitas:
Ajustar limites de conexões simultâneas, timeouts de handshake TLS e uso de filas no servidor web ou proxy reverso, reduzindo a janela para threads bloqueados por muito tempo.

3. Proteção de borda:
Utilizar firewalls de aplicação, rate limiting e, quando disponível, serviços de mitigação de DDoS, capazes de identificar padrões de conexões incompletas ou malformadas.

4. Observabilidade de TLS:
Incluir métricas específicas de handshake TLS em painéis de observabilidade, permitindo que equipes detectem picos anormais de tentativas de conexão parcial.

Por que ataques como o HollowByte são especialmente perigosos

Ataques DDoS clássicos costumam depender de grandes volumes de tráfego ou de botnets extensas. A HollowByte segue outro caminho: busca a eficiência no uso de recursos e a exploração de falhas lógicas no código. Com poucos bytes enviados, é possível desencadear uma sequência de eventos que consome memória e threads de forma desproporcional.

Esse tipo de ataque é atraente para criminosos porque:
– Exige menos infraestrutura maliciosa para ser efetivo.
– Pode ser disparado a partir de um número reduzido de máquinas.
– Tem maior chance de passar despercebido em sistemas que só monitoram volume bruto de tráfego.

Além disso, como o impacto permanece mesmo após o fim do ataque (devido ao inchaço de memória persistente), a organização pode experimentar instabilidade prolongada, com queda gradual de desempenho e falhas intermitentes difíceis de diagnosticar.

Integração com políticas de segurança e compliance

Para empresas sujeitas a normas e padrões de segurança, como ISO 27001 ou equivalentes, a HollowByte reforça a importância de práticas maduras de gestão de mudanças e correção de vulnerabilidades. A falha evidencia que:

– Atualizações de componentes de base (como bibliotecas criptográficas) são tão críticas quanto patches de sistemas operacionais.
– É necessário manter inventários precisos de software de terceiros integrado às aplicações.
– Equipes de segurança e desenvolvimento devem atuar de forma integrada, garantindo que patches sejam testados e implantados com rapidez.

Incorporar esse tipo de vulnerabilidade nos exercícios de análise de risco e nos testes de resiliência (incluindo testes de carga e cenários de DDoS) ajuda a antecipar impactos e a definir planos de contingência.

Caminho para uma postura mais resiliente

A HollowByte não é apenas mais uma falha em uma longa lista de problemas de segurança. Ela ilustra como pequenos detalhes na implementação de protocolos críticos, como o TLS, podem abrir portas para ataques de grandes proporções.

Organizações que desejam se proteger não devem encarar esse caso como um incidente isolado, mas como um alerta para:

– Reforçar processos de atualização contínua.
– Investir em observabilidade detalhada de recursos.
– Promover revisão periódica de componentes críticos de segurança.

Ao combinar correções técnicas – como a atualização imediata para as versões corrigidas do OpenSSL – com práticas de governança e monitoramento, é possível reduzir significativamente a superfície de ataque e aumentar a resiliência diante de novas vulnerabilidades que, inevitavelmente, continuarão surgindo.