SUNBURST
Обнаружение 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.
- dictionary.py (1.0) — проверка открытия/закрытия Cisco + Majestic Top-1M.
- shannon.py (2.0) — объединение проверенных функций 1.0 с dictionary.py.
Ссылки:
Splunk Shannon Entropy — откуда взялась идея*
https://www.splunk.com/en_us/blog/tips-and-tricks/when-entropy-meets-shannon.html
SANS Mark Baggett — инструмент, который RedCanary использовала для анализа Alexa Top 1M
https://github.com/markbaggett/freq
RedCanary — блог, из которого взяты оценки вероятности
https://redcanary.com/blog/threat-hunting-entropy/
Alexa's Top 1M Domains — корпус данных, использованный RedCanary
https://www.alexa.com/topsites
DGA Detector
https://github.com/exp0se/dga_detector
Shannon Entropy — формула
https://towardsdatascience.com/the-intuition-behind-shannons-entropy-e74820fe9800