SUNBURST
Detecção para SUNBURST C2 Estágio-1 usando Entropia de Shannon
Sobre:
Usando Entropia de Shannon para detectar Algoritmos de Geração de Domínios (DGA).
Deve receber apenas FQDNs na função ou ler de um arquivo CSV.
SYNTAX: Prefixo_ou_subdomínio.Domínio.TLD
Feito devido a APTs que utilizam DGA de strings longas para Kill Chain: C2.
Identificar URLs de strings longas que tenham alta entropia > 2x Desvios Padrão.
Observando o limite superior de 2,5% das URLs com prefixos/subdomínios longos.
Salvando metadados extras caso analistas de CND precisem (ex.: Comprimento do Prefixo)
Requisitos:
- Python 3.9+
- Python existente na variável PATH
- Todas as importações listadas (pip install, se necessário)
- O log DNS de entrada tem 1x FQDN por linha (sem outra pontuação)
- Cisco Top-1M (CSV, ZIP) ou Majestic (CSV) Top-1M existem na mesma pasta que o script.
Como-Executar (MODO INTERATIVO está LIGADO, veja VARIÁVEIS):
- Instale Python 3.9.x
- Prepare todos os arquivos de entrada com a formatação correta (domínios em um arquivo de texto, 1 por linha, sem pontuação)
- Garanta que os arquivos de entrada estejam no mesmo diretório/pasta que este script.
4a) (Windows) Abra este script no Python IDLE ou Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
- Informe o arquivo de log DNS de entrada para examinar.
- Informe o arquivo Cisco Umbrella (CSV/ZIP) ou Majestic Top-1M (CSV) a ser usado.
- Aguarde a geração dos valores de Frequência e Entropia de Shannon.
- Examine os arquivos de saída.
Como-Executar (MODO INTERATIVO está DESLIGADO, veja VARIÁVEIS):
- Instale Python 3.9.x
- Prepare todos os arquivos de entrada com a formatação correta (domínios em um arquivo de texto, 1 por linha, sem pontuação)
- Garanta que os arquivos de entrada estejam no mesmo diretório/pasta que este script.
4a) (Windows) Abra este script no Python IDLE ou Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
- O Log de entrada para analisar é "domains.txt", veja VARIÁVEIS.
- Escolha o arquivo Top-N para construir a probabilidade do dicionário, veja VARIÁVEIS.
- Aguarde a geração dos valores de Frequência e Entropia de Shannon.
- Examine os arquivos de saída.
Suposições:
- Letras maiúsculas e minúsculas têm igual probabilidade de aparecimento.
a) Desconsiderando que nós TOR alteram a sensibilidade a maiúsculas/minúsculas em consultas DNS e codificação 0x20.
- O gráfico de frequência de caracteres ETOAN é insuficiente devido à ausência de: 0-9, "-" e ""
a) Domínios podem ter hífens (-), sublinhados () e números.
- Não foi projetado para combater o DGA do ExploderBot.
- Entrada: arquivo de texto simples, cada URL em sua própria linha - nada mais.
- A entrada é composta estritamente por strings de URL sem caracteres proibidos.
- Os arquivos de entrada e saída devem estar na mesma pasta que este script.
- Python3 está na variável PATH.
Conjunto de Dados (Domínios):
O conjunto de dados usado foi derivado do log de consultas do Pi-Hole (janela de 12 horas) extraído do SQLite.
BASH:
$~: sqlite3 /etc/pihole/pihole-FTL.db "SELECT domain FROM queries WHERE timestamp >='$(($(date +%s) - 43200))'" > domains.txt
Os dados foram deduplicados usando Excel > Dados > Remover Duplicatas
Dados para consultas reversas (PTR) em in-addr.arpa também foram removidos.
Conjunto de Dados (Probabilidades):
Utilizando os resultados da RedCanary para análise de DGA, este script pega a URL e calcula a entropia de Shannon.
Linha de Testes de DevOps:
- shannon.py (1.0) - Fazer os cálculos funcionarem com o Dicionário estático da RedCanary.
- shannon.py (1.1) - Testes menores mesclados na 1.0.
- dictionary.py (1.0) - Testar abertura/fechamento do Cisco + Majestic Top-1M.
- shannon.py (2.0) - Combinando a 1.0 com as funções testadas do dictionary.py.
Referência:
Splunk Shannon Entropy - de onde a ideia veio*
https://www.splunk.com/en_us/blog/tips-and-tricks/when-entropy-meets-shannon.html
SANS Mark Baggett - Ferramenta que a RedCanary usou para analisar o Alexa Top 1M
https://github.com/markbaggett/freq
RedCanary - Blog de onde vêm as pontuações de Probabilidade
https://redcanary.com/blog/threat-hunting-entropy/
Alexa's Top 1M Domains - Corpus de Dados usado pela RedCanary
https://www.alexa.com/topsites
DGA Detector
https://github.com/exp0se/dga_detector
Shannon Entropy - Fórmula
https://towardsdatascience.com/the-intuition-behind-shannons-entropy-e74820fe9800