SUNBURST
Erkennung der SUNBURST-C2-Stufe-1 mithilfe der Shannon-Entropie
Über:
Verwendung der Shannon-Entropie zur Erkennung von Domain-Generierungsalgorithmen (DGA).
Es sollten nur FQDNs in die Funktion eingespeist oder aus einer CSV-Datei gelesen werden.
SYNTAX: Prefix_or_subdomain.Domain.TLD
Erstellt, da APTs DGA mit langen Zeichenfolgen für die Kill Chain: C2 nutzen.
Identifiziert lange URL-Zeichenfolgen mit hoher Entropie > 2 Standardabweichungen.
Betrachtet die oberen 2,5 % der URLs mit langen Präfixen/Subdomains.
Speichert zusätzliche Metadaten, falls CND-Analysten sie benötigen (z. B. Präfixlänge)
Anforderungen:
- Python 3.9+
- Python ist in der PATH-Variable vorhanden
- Alle aufgeführten Importe (pip install, falls erforderlich)
- Das Eingabe-DNS-Protokoll enthält 1x FQDN pro Zeile (keine andere Interpunktion)
- Cisco Top-1M (CSV, ZIP) oder Majestic (CSV) Top-1M sind im selben Ordner wie das Skript vorhanden.
So führen Sie es aus (INTERAKTIVER MODUS ist AKTIV, siehe VARIABLES):
- Installieren Sie Python 3.9.x
- Bereiten Sie alle Eingabedateien mit korrekter Formatierung vor (Domains in einer Textdatei, 1 pro Zeile, keine Interpunktion)
- Stellen Sie sicher, dass sich die Eingabedateien im selben Verzeichnis/Ordner wie dieses Skript befinden.
4a) (Windows) Öffnen Sie dieses Skript in Python IDLE oder Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
- Geben Sie die zu untersuchende DNS-Protokoll-Eingabedatei ein.
- Geben Sie die zu verwendende Cisco-Umbrella-Datei (CSV/ZIP) oder Majestic-Top-1M-Datei (CSV) ein.
- Warten Sie, bis die Frequenz- und Shannon-Entropiewerte generiert werden.
- Untersuchen Sie die Ausgabedateien.
So führen Sie es aus (INTERAKTIVER MODUS ist AUS, siehe VARIABLES):
- Installieren Sie Python 3.9.x
- Bereiten Sie alle Eingabedateien mit korrekter Formatierung vor (Domains in einer Textdatei, 1 pro Zeile, keine Interpunktion)
- Stellen Sie sicher, dass sich die Eingabedateien im selben Verzeichnis/Ordner wie dieses Skript befinden.
4a) (Windows) Öffnen Sie dieses Skript in Python IDLE oder Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
- Das zu analysierende Eingabeprotokoll ist "domains.txt", siehe VARIABLES.
- Wählen Sie die Top-N-Datei zum Aufbau der Wörterbuchwahrscheinlichkeit, siehe VARIABLES.
- Warten Sie, bis die Frequenz- und Shannon-Entropiewerte generiert werden.
- Untersuchen Sie die Ausgabedateien.
Annahmen:
- Groß- und Kleinbuchstaben haben die gleiche Auftrittswahrscheinlichkeit.
a) Vernachlässigt, dass TOR-Knoten die Groß-/Kleinschreibung in DNS-Abfragen und 0x20-Kodierung verändern.
- Das ETOAN-Zeichenhäufigkeitsdiagramm ist unzureichend, da Folgendes fehlt: 0-9, "-" und ""
a) Domains können Bindestriche (-), Unterstriche () und Zahlen enthalten.
- Nicht dafür entwickelt, der ExploderBot-DGA entgegenzuwirken.
- Eingabe: einfache Textdatei, jede URL in einer eigenen Zeile - sonst nichts.
- Die Eingabe besteht ausschließlich aus URL-Zeichenfolgen ohne verbotene Zeichen.
- Eingabe- und Ausgabedateien müssen sich im selben Ordner wie dieses Skript befinden.
- Python3 ist in der PATH-Variable.
Datensatz (Domains):
Der verwendete Datensatz stammt aus dem Pi-Hole-Abfrageprotokoll (12-Stunden-Fenster), das aus SQLite extrahiert wurde.
BASH:
$~: sqlite3 /etc/pihole/pihole-FTL.db "SELECT domain FROM queries WHERE timestamp >='$(($(date +%s) - 43200))'" > domains.txt
Die Daten wurden mit Excel > Daten > Duplikate entfernen dedupliziert.
Daten für Reverse-Lookups (PTR) in-addr.arpa wurden ebenfalls entfernt.
Datensatz (Wahrscheinlichkeiten):
Dieses Skript nutzt die Ergebnisse von RedCanary für die DGA-Analyse, nimmt eine URL und berechnet die Shannon-Entropie.
DevOps-Testphasenfolge:
- shannon.py (1.0) - Berechnungen mit dem statischen RedCanary-Wörterbuch zum Laufen bringen.
- shannon.py (1.1) - Geringfügige Tests in 1.0 zusammengeführt.
- dictionary.py (1.0) - Testen des Öffnens/Schließens von Cisco + Majestic Top-1M.
- shannon.py (2.0) - Kombination von 1.0 mit getesteten Funktionen von dictionary.py.
Referenz:
Splunk Shannon-Entropie - woher die Idee stammt*
https://www.splunk.com/en_us/blog/tips-and-tricks/when-entropy-meets-shannon.html
SANS Mark Baggett - Tool, mit dem RedCanary Alexa Top 1M analysierte
https://github.com/markbaggett/freq
RedCanary - Blog, aus dem die Wahrscheinlichkeitswerte stammen
https://redcanary.com/blog/threat-hunting-entropy/
Alexas Top-1M-Domains - Datenkorpus, der von RedCanary verwendet wurde
https://www.alexa.com/topsites
DGA-Detektor
https://github.com/exp0se/dga_detector
Shannon-Entropie - Formel
https://towardsdatascience.com/the-intuition-behind-shannons-entropy-e74820fe9800