Detección para SUNBURST C2 Stage-1 usando la entropía de Shannon
Acerca de:
Usando la entropía de Shannon para detectar algoritmos de generación de dominios (DGA).
Solo se deben introducir FQDNs en la función o leerse desde un archivo CSV.
SYNTAX: Prefix_or_subdomain.Domain.TLD
Hecho debido a que los APTs aprovechan DGA de cadenas largas para la Kill Chain: C2.
Identificar URLs de cadenas largas que tengan alta entropía > 2 desviaciones estándar.
Observando el límite superior del 2.5% de URLs con prefijos/subdominios largos.
Guardando metadatos adicionales por si los analistas de CND los necesitan (p. ej., longitud del prefijo).
Requisitos:
Python 3.9+
Python existe en la variable PATH
Todos los imports indicados (pip install, si es necesario)
El registro DNS de entrada tiene 1 FQDN por línea (sin otra puntuación)
Los archivos Cisco Top-1M (CSV, ZIP) o Majestic (CSV) Top-1M existen en la misma carpeta que el script.
Cómo ejecutar (MODO INTERACTIVO está ACTIVADO, consulte VARIABLES):
Instalar Python 3.9.x
Preparar todos los archivos de entrada con el formato correcto (dominios en un archivo de texto, 1 por línea, sin puntuación)
Asegurarse de que los archivos de entrada estén en el mismo directorio/carpeta que este script.
4a) (Windows) Abrir este script en Python IDLE o Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
Ingresar el archivo de registro DNS de entrada para examinar.
Ingresar el archivo Cisco Umbrella (CSV/ZIP) o Majestic Top-1M (CSV) a utilizar.
Esperar a que se generen los valores de Frecuencia y Entropía de Shannon.
Examinar los archivos de salida.
Cómo ejecutar (MODO INTERACTIVO está DESACTIVADO, consulte VARIABLES):
Instalar Python 3.9.x
Preparar todos los archivos de entrada con el formato correcto (dominios en un archivo de texto, 1 por línea, sin puntuación)
Asegurarse de que los archivos de entrada estén en el mismo directorio/carpeta que este script.
4a) (Windows) Abrir este script en Python IDLE o Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
El registro de entrada a analizar es "domains.txt", consulte VARIABLES.
Seleccionar el archivo Top-N para construir la probabilidad del diccionario, consulte VARIABLES.
Esperar a que se generen los valores de Frecuencia y Entropía de Shannon.
Examinar los archivos de salida.
Supuestos:
Las letras mayúsculas y minúsculas tienen la misma probabilidad de aparición.
a) Ignorando que los nodos TOR alteran la sensibilidad a mayúsculas/minúsculas en las consultas DNS y la codificación 0x20.
La tabla de frecuencia de caracteres ETOAN es insuficiente porque faltan: 0-9, "-", y ""
a) Los dominios pueden tener guiones (-), guiones bajos () y números.
No está diseñado para contrarrestar el DGA de ExploderBot.
Entrada: archivo de texto simple, cada URL en su propia línea; nada más.
La entrada se compone estrictamente de cadenas URL sin caracteres prohibidos.
Los archivos de entrada y salida deben estar en la misma carpeta que este script.
Python3 está en la variable PATH.
Conjunto de datos (Dominios):
El conjunto de datos utilizado se derivó del registro de consultas de Pi-Hole (ventana de 12 horas) extraído de SQLite.
BASH:
$~: sqlite3 /etc/pihole/pihole-FTL.db "SELECT domain FROM queries WHERE timestamp >='$(($(date +%s) - 43200))'" > domains.txt
Los datos se deduplicaron usando Excel > Datos > Quitar duplicados
También se eliminaron los datos de búsquedas inversas (PTR) in-addr.arpa.
Conjunto de datos (Probabilidades):
Utilizando los resultados de RedCanary para el análisis de DGA, este script toma la URL y calcula la entropía de Shannon.
Línea de fases de pruebas DevOps:
shannon.py (1.0) - Hacer que los cálculos funcionen con el diccionario estático de RedCanary.
shannon.py (1.1) - Pruebas menores fusionadas en la 1.0.
dictionary.py (1.0) - Probar la apertura/cierre de Cisco + Majestic Top-1M.
shannon.py (2.0) - Combinando la 1.0 con las funciones probadas de dictionary.py.