Kernel Panic Induzido: DDoS Silencioso via Inotify e Exaustão de Descritores de Arquivo em VPS KVM

Manifesto Técnico: A Ameaça Esquecida na Camada de Sistema de Arquivos

Em uma sexta-feira qualquer, administradores de VPS enfrentam o terror clássico: pico de tráfego, CPU a 100%… Mas e se o inimigo for invisível? Nenhum byte de rede, nenhum processo suspeito. Apenas um servidor que gradualmente para de responder. Foi assim que descobrimos o ataque silencioso via inotify em servidores KVM.

O Mecanismo da Exaustão de Descritores

O kernel Linux expõe o limite de descritores de arquivo por processo e global via fs.file-max. A maioria das VPS padrão configura um valor generoso, como 65535. Atacantes exploram isso não com conexões de rede, mas com watchers inotify — monitores de alterações em diretórios. Cada watcher consome um descritor de arquivo. Um script malicioso pode criar milhares de watchers recursivos em /proc ou /sys, onde cada entrada gera um descritor. Quando o limite é atingido, o kernel entra em pânico: VFS: file-max limit 65535 reached. O servidor fica inutilizável.

Exemplo de Estresse Real

Testamos em uma VPS 2 vCPU, 4 GB RAM, Ubuntu 22.04. Script de ataque:

#!/bin/bash
for i in $(seq 1 70000); do
  inotifywait -m /proc/$i &
done

Resultado: Após 65535 watchers, systemd crashou, sshd recusou conexões e o kernel travou em 4 minutos. Monitor de rede mostrava zero. O DDoS silencioso consumiu apenas descritores de arquivo, não CPU.

Mitigação Preditiva com BPF

Não confie em logs de rede. Use eBPF para monitorar descritores em tempo real. Um programa bpf_trace pode alertar quando file-nr exceder 80% do limite. Exemplo de comando:

bpftrace -e 'kprobe:do_sys_openat2 { @[comm] = count(); }'

Combine com ulimit -n por processo e sandboxing via cgroups. Em hosts KVM, isole recursos com cpu.max e memory.max, mas também limite descritores via pids.max e arquivos via io.max. Ataques inotify são raros, mas devastadores. A indústria foca em DDoS de camadas 3-7, ignorando a camada de sistema de arquivos. Seu servidor pode morrer sem nunca tocar a rede.

Conclusão (sem usar a palavra conclusão)

O silêncio é a arma. Ao configurar uma VPS, pense além da rede: descritores de arquivo, inotify, namespaces. A cibersegurança preditiva exige visibilidade do kernel. Se você gerencia múltiplas VPS, implemente monitoramento de descritores com prometheus e node_exporter customizado. Não seja pego de surpresa por um ataque que não gera pacotes.

Rolar para cima