Rilevamento per C2 Stage-1 di SUNBURST utilizzando l'Entropia di Shannon
Informazioni:
Utilizzo dell'Entropia di Shannon per rilevare algoritmi di generazione di domini (DGA).
Dovrebbero essere inseriti solo FQDN nella funzione o letti da un file CSV.
SYNTAX: Prefisso_o_sottodominio.Dominio.TLD
Creato a causa di APT che sfruttano DGA a stringhe lunghe per la Kill Chain: C2.
Identifica URL a stringhe lunghe con alta entropia > 2 Deviazioni Standard.
Osservando il limite superiore del 2.5% degli URL con prefissi/sottodomini lunghi.
Salvataggio di metadati extra se gli analisti CND ne hanno bisogno (es. Lunghezza del Prefisso)
Requisiti:
Python 3.9+
Python presente nella variabile PATH
Tutte le importazioni elencate (pip install, se necessario)
Il log DNS di input ha 1 FQDN per riga (nessuna altra punteggiatura)
Cisco Top-1M (CSV, ZIP) o Majestic (CSV) Top-1M presenti nella stessa cartella dello script.
Come Eseguire (MODALITÀ INTERATTIVA ATTIVA, vedi VARIABILI):
Installare Python 3.9.x
Preparare tutti i file di input con la formattazione corretta (domini in un file di testo, 1 per riga, senza punteggiatura)
Assicurarsi che i file di input siano nella stessa directory/cartella di questo script.
4a) (Windows) Aprire questo script in Python IDLE o Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
Inserire il file di log DNS da esaminare.
Inserire il file Cisco Umbrella (CSV/ZIP) o Majestic Top-1M (CSV) da utilizzare.
Attendere la generazione dei valori di Frequenza ed Entropia di Shannon.
Esaminare i file di output.
Come Eseguire (MODALITÀ INTERATTIVA DISATTIVATA, vedi VARIABILI):
Installare Python 3.9.x
Preparare tutti i file di input con la formattazione corretta (domini in un file di testo, 1 per riga, senza punteggiatura)
Assicurarsi che i file di input siano nella stessa directory/cartella di questo script.
4a) (Windows) Aprire questo script in Python IDLE o Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
Il log di input da analizzare è "domains.txt", vedi VARIABILI.
Scegliere il file Top-N per costruire la probabilità del dizionario, vedi VARIABILI.
Attendere la generazione dei valori di Frequenza ed Entropia di Shannon.
Esaminare i file di output.
Assunzioni:
Lettere maiuscole e minuscole hanno uguale probabilità di comparsa.
a) Trascurando che i nodi TOR alterano la sensibilità alle maiuscole/minuscole nelle query DNS e la codifica 0x20.
La tabella di frequenza dei caratteri ETOAN è insufficiente a causa della mancanza di: 0-9, "-" e ""
a) I domini possono contenere trattini (-), underscore () e numeri.
Non progettato per contrastare la DGA di ExploderBot.
Input: semplice file di testo, ogni URL sulla propria riga - nient'altro.
L'input è composto esclusivamente da stringhe URL senza caratteri proibiti.
I file di input e output devono essere nella stessa cartella di questo script.
Python3 è nella variabile PATH.
Set di Dati (Domini):
Il set di dati utilizzato è stato derivato dal log delle query di Pi-Hole (finestra di 12 ore) estratto da SQLite.
BASH:
$~: sqlite3 /etc/pihole/pihole-FTL.db "SELECT domain FROM queries WHERE timestamp >='$(($(date +%s) - 43200))'" > domains.txt
I dati sono stati deduplicati utilizzando Excel > Data > Remove Duplicates
Sono stati rimossi anche i dati per i Reverse Lookup (PTR) in-addr.arpa.
Set di Dati (Probabilità):
Sfruttando i risultati di RedCanary per l'analisi DGA, questo script prende l'URL e calcola l'entropia di Shannon.
Fase di Testing DevOps:
shannon.py (1.0) - Far funzionare i calcoli con il Dizionario statico di RedCanary.
shannon.py (1.1) - Test minori integrati nella 1.0.
dictionary.py (1.0) - Test di apertura/chiusura di Cisco + Majestic Top-1M.
shannon.py (2.0) - Combinazione della 1.0 con le funzioni testate di dictionary.py.