
Verfolgung der Familie unabhängiger IoT-Botnets, die CVE-2021-35394 als Verbreitungsvektor nutzen — Erkenntnisse, Beziehungen, Methodik.
Dieses Repo existiert, weil ein Exploit diese Botnets zufällig für einen passiven Sensor sichtbar macht — nicht weil sie miteinander verwandt sind. CVE-2021-35394 (Realtek SDK Command Injection, UDP/9034) ist das Einschlusskriterium: Eine Familie ist im Scope, weil beobachtet wurde, wie sie diesen Exploit gegen ein überwachtes Netzwerk versuchte. Sobald eine Familie im Scope ist, folgt die Verfolgung der eigenen Infrastruktur und dem Verhalten dieser Familie, soweit sie erreichbar ist — Staging-Server, Dropper-Skripte, andere Samples — selbst dort, wo keine dieser Aktivitäten selbst diese CVE ist. Die Schwachstelle ist die Tür, die überwacht wird, keine Aussage darüber, was sich dahinter befindet.
Die bisherigen Erkenntnisse umfassen sechs codeunabhängige Familien, die sich diesen einen Exploit teilen: Condi, cling, goonbakk (alias lucy_meow), RondoDox und zwei noch unbenannte (geführt als „Familie D" und „Familie E", bis eine Namensentscheidung getroffen wird — siehe NAMING.md).
METHODOLOGY.md Beobachtungsbias — vor dem Ziehen von Schlussfolgerungen lesen
HANDOFF.md Zustand der Sitzungskontinuität
analysis/<family>/ RE-Referenzaufzeichnung, ein Dokument pro Familie
analysis/comparison.md familienübergreifendes Diagramm, dreistufige Konfidenz
samples/manifest.csv generierter Index der lokalen Sammlung (nur Hashes)
samples/README.md Manifest-Konventionen + was es für sich genommen zeigt
tools/inventory.py regeneriert das Manifest aus einem Sammlungsverzeichnis
Zwei Schichten, bewusst getrennt. analysis/ beschreibt, was die Binaries tun, von Hand aus Ghidra geschrieben. samples/ beschreibt, was die Sammlung enthält, generiert durch Scannen derselben — Header, Hashes, Build-IDs, Provenienz. Letzteres ist günstig aktuell zu halten (python tools/inventory.py) und fängt Dinge ab, die Ersteres nicht kann: welche ausgelieferten Namen derselbe Build sind, welche „Samples" gar keine Binaries sind, welches Ghidra-Programm welcher ausgelieferten Datei entspricht. Erkenntnisse, die aus dem Inventar hervorgehen, werden in das relevante analysis/-Dokument übernommen, statt in der CSV zu verbleiben.
Eine Familie hinzuzufügen bedeutet ein Verzeichnis unter analysis/ und, sobald ihr Staging-Host auf Evidenzbasis zugeordnet ist, eine Zeile in FAMILY_BY_HOST in tools/inventory.py plus eine Zeile in der Attribuierungstabelle in samples/README.md.
METHODOLOGY.md — diesem Datensatz ist ein realer Beobachtungsbias eingeschrieben (der Exploit-Vektor, den wir sehen können, ist UDP-only und benötigt keinen Listener; jeder andere Vektor, den diese Familien nutzen, benötigt einen abgeschlossenen TCP-Handshake, den nichts auf der Sammlungsseite bis jetzt bereitstellte). Lies es, bevor du aus irgendetwas anderem in diesem Repo Schlussfolgerungen ziehst.
goonbakk ist primär, lucy_meow ein Alias (dieselbe Familie — identischer ChaCha20-Schlüssel/Nonce/Counter-Quirk und identische Konfigurationstabelle). Echte Namen werden noch für „Familie D" und „Familie E" benötigt (letztere ist bereits reichhaltig charakterisiert: Go, Botnet/-Modulbaum, C2 auf :9111, on-disk sysd) — prüfe, ob Akamais Bericht E benennt, bevor du einen erfindest.docs/families/<family>.md — Prosa-Überblick pro Familie
(Fähigkeiten, IOCs, Aliase), die Schicht, in die analysis/ hineinverlinkthunts/ — Security Onion / NSM-Abfragen, lauffähig gehalten statt
in Prosa zitiertiocs/ — maschinenlesbare Netzwerk-/Host-Indikatoren pro Familie.
Teilweise durch samples/manifest.csv für Dateiindikatoren abgedeckt; die
Lücke sind C2-Endpunkte und der Delivery-Kit-FingerprintGeklärt, nicht neu aufrollen (siehe HANDOFF.md für die vollständige Liste):
Samples sind nur Hashes — keine funktionale Malware gelangt in die Git-
Historie, durchgesetzt per .gitignore; keine „Mirai-Linie" als Ordnungs-
prinzip; CVE-2021-35394 ist das Einschlusskriterium, nicht der Scope.
yara/ — Erkennungsregelnanalysis/comparison.md deckt die Code-/Fähigkeitshälfte davon ab