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.