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.
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.