Обнаружение C2 Stage-1 SUNBURST с использованием энтропии Шеннона
О программе:
Использование энтропии Шеннона для обнаружения алгоритмов генерации доменов (DGA).
В функцию должны подаваться только FQDN либо считываться из CSV-файла.
Синтаксис: Prefix_or_subdomain.Domain.TLD
Создано из-за использования APT-группами длиннострочных DGA для Kill Chain: C2.
Идентификация длиннострочных URL с высокой энтропией > 2 стандартных отклонений.
Анализ верхних 2,5% URL с длинными префиксами/поддоменами.
Сохранение дополнительных метаданных на случай, если аналитикам CND они понадобятся (например, длина префикса).
Требования:
Python 3.9+
Python присутствует в переменной PATH
Все импорты указаны (pip install, при необходимости)
Входной DNS-журнал содержит 1x FQDN в строке (без прочей пунктуации)
Cisco Top-1M (CSV, ZIP) или Majestic (CSV) Top-1M находятся в той же папке, что и скрипт.
Как запустить (ИНТЕРАКТИВНЫЙ РЕЖИМ ВКЛЮЧЁН, см. ПЕРЕМЕННЫЕ):
Установите Python 3.9.x
Подготовьте все входные файлы с правильным форматированием (домены в текстовом файле, по одному в строке, без пунктуации)
Убедитесь, что входные файлы находятся в том же каталоге/папке, что и этот скрипт.
4a) (Windows) Откройте этот скрипт в Python IDLE или Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
Введите имя входного DNS-журнала для анализа.
Введите файл Cisco Umbrella (CSV/ZIP) или Majestic Top-1M (CSV) для использования.
Дождитесь генерации значений частотности и энтропии Шеннона.
Изучите выходные файлы.
Как запустить (ИНТЕРАКТИВНЫЙ РЕЖИМ ВЫКЛЮЧЕН, см. ПЕРЕМЕННЫЕ):
Установите Python 3.9.x
Подготовьте все входные файлы с правильным форматированием (домены в текстовом файле, по одному в строке, без пунктуации)
Убедитесь, что входные файлы находятся в том же каталоге/папке, что и этот скрипт.
4a) (Windows) Откройте этот скрипт в Python IDLE или Visual Studio Code.
4b) (Linux) $~: python3 shannon.py
Анализируемый входной журнал — «domains.txt», см. ПЕРЕМЕННЫЕ.
Выберите файл Top-N для построения словарной вероятности, см. ПЕРЕМЕННЫЕ.
Дождитесь генерации значений частотности и энтропии Шеннона.
Изучите выходные файлы.
Допущения:
Заглавные и строчные буквы имеют равную вероятность появления.
a) Пренебрегаем тем, что узлы TOR изменяют чувствительность к регистру в DNS-запросах и 0x20-кодирование.
Таблицы частотности символов ETOAN недостаточно из-за отсутствия: 0-9, "-" и ""
a) Домены могут содержать дефисы (-), подчёркивания () и цифры.
Не предназначен для противодействия DGA ExploderBot.
Входные данные: простой текстовый файл, каждый URL в отдельной строке — ничего больше.
Входные данные состоят строго из строк URL без запрещённых символов.
Входные и выходные файлы должны находиться в той же папке, что и этот скрипт.
Python3 находится в переменной PATH.
Набор данных (домены):
Используемый набор данных был получен из журнала запросов Pi-Hole (окно 12 часов), извлечённого из SQLite.
BASH:
$~: sqlite3 /etc/pihole/pihole-FTL.db "SELECT domain FROM queries WHERE timestamp >='$(($(date +%s) - 43200))'" > domains.txt
Данные были дедублицированы с помощью Excel > Данные > Удалить дубликаты.
Данные для обратных просмотров (PTR) in-addr.arpa также были удалены.
Набор данных (вероятности):
Используя результаты RedCanary для анализа DGA, этот скрипт принимает URL и вычисляет энтропию Шеннона.
План этапов тестирования DevOps:
shannon.py (1.0) — добиться работы вычислений со статическим словарём RedCanary.
shannon.py (1.1) — незначительные тесты объединены в 1.0.