
Suivi de la famille de botnets IoT sans lien entre eux partageant CVE-2021-35394 comme vecteur de livraison — découvertes, relations, méthodologie.
Ce dépôt existe parce qu'un exploit rend ces botnets visibles à un capteur passif — pas parce qu'ils sont liés les uns aux autres. CVE-2021-35394 (injection de commande du SDK Realtek, UDP/9034) est le critère d'entrée : une famille est dans le périmètre parce qu'elle a été observée tentant cet exploit contre un réseau surveillé. Une fois qu'une famille est dans le périmètre, le suivi suit l'infrastructure et le comportement propres à cette famille aussi loin qu'ils peuvent être atteints — serveurs de staging, scripts de dropper, autres échantillons — même lorsque aucune de ces activités n'est elle-même cette CVE. La vulnérabilité est la porte surveillée, pas une affirmation sur ce qui se trouve derrière.
Les résultats à ce jour couvrent six familles indépendantes au niveau du code partageant ce seul exploit : Condi, cling, goonbakk (alias lucy_meow), RondoDox, et deux encore sans nom (suivies comme « famille D » et « famille E » en attendant une décision de nommage — voir NAMING.md).
METHODOLOGY.md biais d'observation — à lire avant de tirer des conclusions
HANDOFF.md état de continuité de session
analysis/<family>/ fiche de référence RE, un document par famille
analysis/comparison.md diagramme inter-familles, confiance à trois niveaux
samples/manifest.csv index généré de la collection locale (hashes uniquement)
samples/README.md conventions du manifeste + ce qu'il montre à lui seul
tools/inventory.py régénère le manifeste depuis un répertoire de collection
Deux couches, délibérément séparées. analysis/ décrit ce que font les
binaires, écrit à la main depuis Ghidra. samples/ décrit ce que
contient la collection, généré en la scannant — en-têtes, hashes,
build IDs, provenance. La seconde est peu coûteuse à maintenir à jour
(python tools/inventory.py) et détecte ce que la première ne peut
pas : quels noms servis correspondent au même build, quels
« échantillons » ne sont pas des binaires du tout, quel programme
Ghidra correspond à quel fichier servi. Les résultats qui découlent de
l'inventaire sont promus dans le document analysis/ pertinent plutôt
que de rester dans le CSV.
Ajouter une famille consiste en un répertoire sous analysis/ et, une
fois son hôte de staging attribué sur preuves, une ligne dans
FAMILY_BY_HOST de tools/inventory.py plus une ligne dans le tableau
d'attribution de samples/README.md.
METHODOLOGY.md — ce jeu de données comporte un véritable biais
d'observation intégré (le vecteur d'exploit que nous pouvons voir est
UDP uniquement et ne nécessite aucun listener ; tous les autres
vecteurs utilisés par ces familles nécessitent une poignée de main TCP
complétée, ce que rien du côté de la collection ne fournissait jusqu'à
présent). Lisez-le avant de tirer des conclusions à partir de quoi que
ce soit d'autre dans ce dépôt.
goonbakk est primaire, lucy_meow un
alias (même famille — clé/nonce/compteur ChaCha20 et table de
configuration identiques). De vrais noms sont encore nécessaires pour
« famille D » et « famille E » (cette dernière déjà richement
caractérisée : Go, arborescence de modules Botnet/, C2 sur :9111,
sysd sur disque) — vérifiez si le rapport d'Akamai nomme E avant
d'en inventer un.docs/families/<family>.md — présentation en prose par famille
(capacités, IOCs, alias), la couche vers laquelle analysis/ pointehunts/ — requêtes Security Onion / NSM, maintenues exécutables
plutôt que citées en proseiocs/ — indicateurs réseau/hôte lisibles par machine par famille.
Partiellement subsumé par samples/manifest.csv pour les
indicateurs de fichiers ; le manque concerne les endpoints C2 et
l'empreinte du kit de livraisonyara/ — règles de détectionanalysis/comparison.md couvre la moitié
code/capacité de ceciÉtabli, à ne pas remettre en question (voir HANDOFF.md pour la liste
complète) : les échantillons sont hashes uniquement — aucun
malware fonctionnel n'entre dans l'historique git, appliqué par
.gitignore ; pas de « lignée Mirai » comme principe d'organisation ;
CVE-2021-35394 est le critère d'entrée, pas le périmètre.