SUNBURST
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.
Referencia:
Entropía de Shannon de Splunk: de donde surgió la idea*
https://www.splunk.com/en_us/blog/tips-and-tricks/when-entropy-meets-shannon.html
SANS Mark Baggett: herramienta que RedCanary usó para analizar Alexa Top 1M
https://github.com/markbaggett/freq
RedCanary: blog de donde provienen las puntuaciones de probabilidad
https://redcanary.com/blog/threat-hunting-entropy/
Dominios Top 1M de Alexa: corpus de datos utilizado por RedCanary
https://www.alexa.com/topsites
DGA Detector
https://github.com/exp0se/dga_detector
Entropía de Shannon: fórmula
https://towardsdatascience.com/the-intuition-behind-shannons-entropy-e74820fe9800