
Rastreando a família de botnets de IoT não relacionadas que compartilham a CVE-2021-35394 como vetor de entrega — descobertas, relações, metodologia.
Este repositório existe porque um exploit específico torna esses botnets visíveis para um sensor passivo — não porque eles estejam relacionados entre si. CVE-2021-35394 (injeção de comando no SDK Realtek, UDP/9034) é o critério de entrada: uma família está no escopo porque foi observada tentando esse exploit contra uma rede monitorada. Uma vez que uma família está no escopo, o rastreamento segue a própria infraestrutura e o comportamento dessa família até onde for possível alcançá-los — servidores de staging, scripts dropper, outras amostras — mesmo quando nada dessa atividade é, por si só, este CVE. A vulnerabilidade é a porta que está sendo vigiada, não uma afirmação sobre o que há atrás dela.
Os achados até agora cobrem seis famílias independentes de código que compartilham esse único exploit: Condi, cling, goonbakk (também conhecida como lucy_meow), RondoDox, e duas ainda sem nome (rastreadas como "família D" e "família E" até uma decisão de nomenclatura — veja NAMING.md).
METHODOLOGY.md viés de observação — leia antes de tirar conclusões
HANDOFF.md estado de continuidade da sessão
analysis/<family>/ registro de referência de RE, um doc por família
analysis/comparison.md diagrama entre famílias, confiança em três níveis
samples/manifest.csv índice gerado da coleção local (apenas hashes)
samples/README.md convenções do manifesto + o que ele mostra por si só
tools/inventory.py regenera o manifesto a partir de um diretório de coleção
Duas camadas, deliberadamente separadas. analysis/ é o que os binários
fazem, escrito à mão a partir do Ghidra. samples/ é o que a coleção
contém, gerado ao escaneá-la — cabeçalhos, hashes, build IDs,
proveniência. A segunda é barata de manter atualizada (python tools/inventory.py) e captura coisas que a primeira não consegue: quais
nomes servidos são o mesmo build, quais "amostras" não são binários de
forma alguma, qual programa do Ghidra corresponde a qual arquivo servido.
Achados que surgem do inventário são promovidos para o doc relevante em
analysis/ em vez de ficarem no CSV.
Adicionar uma família é um diretório sob analysis/ e, uma vez que seu
host de staging seja atribuído com base em evidências, uma linha no
FAMILY_BY_HOST de tools/inventory.py mais uma linha na tabela de
atribuição em samples/README.md.
METHODOLOGY.md — este conjunto de dados tem um viés de observação real
embutido nele (o vetor de exploit que conseguimos ver é apenas UDP e não
precisa de listener; todos os outros vetores que essas famílias usam
precisam de um handshake TCP completo, o que nada do lado da coleção
fornecia até agora). Leia antes de tirar conclusões de qualquer outra
coisa neste repositório.
goonbakk é primário, lucy_meow um
alias (mesma família — chave/nonce/peculiaridade de contador ChaCha20 e
tabela de configuração idênticas). Nomes reais ainda são necessários
para "família D" e "família E" (esta última já ricamente caracterizada:
Go, árvore de módulos Botnet/, C2 em :9111, sysd em disco) — verifique
se o relatório da Akamai nomeia E antes de inventar um.docs/families/<family>.md — visão geral em prosa por família
(capacidades, IOCs, aliases), a camada para a qual analysis/ apontahunts/ — consultas Security Onion / NSM, mantidas executáveis em vez
de citadas em prosaiocs/ — indicadores de rede/host legíveis por máquina por família.
Parcialmente absorvido por samples/manifest.csv para indicadores de
arquivo; a lacuna são endpoints C2 e a impressão digital do kit de
entregayara/ — regras de detecçãoanalysis/comparison.md cobre a metade
de código/capacidade dissoResolvido, não reabra o debate (veja HANDOFF.md para a lista completa):
amostras são apenas hashes — nenhum malware funcional entra no
histórico do git, imposto por .gitignore; nada de "linhagem Mirai" como
princípio organizador; CVE-2021-35394 é o critério de entrada, não o
escopo.