SUNBURST
Détection du C2 Stage-1 de SUNBURST à l'aide de l'entropie de Shannon
À propos :
Utilisation de l'entropie de Shannon pour détecter les algorithmes de génération de domaines (DGA).
Seuls des FQDN doivent être fournis à la fonction ou lus à partir d'un fichier CSV.
SYNTAXE : Prefix_or_subdomain.Domain.TLD
Conçu en raison des APT exploitant les DGA à chaîne longue pour la Kill Chain : C2.
Identifier les URL à chaîne longue qui présentent une entropie élevée > 2 écarts-types.
En examinant la limite supérieure de 2,5 % des URL avec de longs préfixes/sous-domaines.
Enregistrement de métadonnées supplémentaires si les analystes CND en ont besoin (c.-à-d. la longueur du préfixe).
Prérequis :
- Python 3.9+
- Python existe dans la variable PATH
- Toutes les importations répertoriées (pip install, si nécessaire)
- Le journal DNS d'entrée contient 1 FQDN par ligne (aucune autre ponctuation)
- Les fichiers Cisco Top-1M (CSV, ZIP) ou Majestic Top-1M (CSV) doivent exister dans le même dossier que le script.
- Installer Python 3.9.x
- Préparer tous les fichiers d'entrée avec le format correct (domaines dans un fichier texte, 1 par ligne, sans ponctuation)
- S'assurer que les fichiers d'entrée se trouvent dans le même répertoire/dossier que ce script.
4a) (Windows) Ouvrir ce script dans Python IDLE ou Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
- Saisir le fichier journal DNS d'entrée à examiner.
- Saisir le fichier Cisco Umbrella (CSV/ZIP) ou Majestic Top-1M (CSV) à utiliser.
- Attendre que les valeurs de fréquence et d'entropie de Shannon soient générées.
- Examiner les fichiers de sortie.
- Installer Python 3.9.x
- Préparer tous les fichiers d'entrée avec le format correct (domaines dans un fichier texte, 1 par ligne, sans ponctuation)
- S'assurer que les fichiers d'entrée se trouvent dans le même répertoire/dossier que ce script.
4a) (Windows) Ouvrir ce script dans Python IDLE ou Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
- Le journal d'entrée à analyser est « domains.txt », voir VARIABLES.
- Choisir le fichier Top-N pour construire la probabilité du dictionnaire, voir VARIABLES.
- Attendre que les valeurs de fréquence et d'entropie de Shannon soient générées.
- Examiner les fichiers de sortie.
Hypothèses :
- Les lettres majuscules et minuscules ont la même probabilité d'apparition.
a) En négligeant le fait que les nœuds TOR modifient la sensibilité à la casse dans les requêtes DNS et l'encodage 0x20.
- Le tableau de fréquence des caractères ETOAN est insuffisant car il manque : 0-9, « - » et « _ »
a) Les domaines peuvent contenir des traits d'union (-), des underscores (_) et des chiffres.
- Non conçu pour contrer le DGA d'ExploderBot.
- Entrée : simple fichier texte, chaque URL est sur sa propre ligne - rien d'autre.
- L'entrée est composée strictement de chaînes URL sans caractères interdits.
- Les fichiers d'entrée et de sortie doivent se trouver dans le même dossier que ce script.
- Python3 est dans la variable PATH.
Jeu de données (Domaines) :
Le jeu de données utilisé a été dérivé du journal des requêtes Pi-Hole (fenêtre de 12 heures) extrait de SQLite.
BASH:
$~: sqlite3 /etc/pihole/pihole-FTL.db "SELECT domain FROM queries WHERE timestamp >='$(($(date +%s) - 43200))'" > domains.txt
Les données ont été dédupliquées à l'aide d'Excel > Données > Supprimer les doublons.
Les données pour les recherches inverses (PTR) in-addr.arpa ont également été supprimées.
Jeu de données (Probabilités) :
En s'appuyant sur les résultats de RedCanary pour l'analyse des DGA, ce script prend une URL et calcule l'entropie de Shannon.
Étapes de test DevOps :
- shannon.py (1.0) - Faire fonctionner les calculs avec le dictionnaire statique de RedCanary.
- shannon.py (1.1) - Tests mineurs fusionnés dans la 1.0.
- dictionary.py (1.0) - Tester l'ouverture/fermeture de Cisco + Majestic Top-1M.
- shannon.py (2.0) - Combinaison de la 1.0 avec les fonctions testées de dictionary.py.
Références :
Entropie de Shannon selon Splunk - d'où vient l'idée*
https://www.splunk.com/en_us/blog/tips-and-tricks/when-entropy-meets-shannon.html
SANS Mark Baggett - Outil utilisé par RedCanary pour analyser Alexa Top 1M
https://github.com/markbaggett/freq
RedCanary - Blog d'où proviennent les scores de probabilité
https://redcanary.com/blog/threat-hunting-entropy/
Top 1M d'Alexa - Corpus de données utilisé par RedCanary
https://www.alexa.com/topsites
Détecteur de DGA
https://github.com/exp0se/dga_detector
Entropie de Shannon - Formule
https://towardsdatascience.com/the-intuition-behind-shannons-entropy-e74820fe9800