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