OpenSource NTA для безопасника
Привет, хабр!
Уже многое было рассказано об анализе сетевого трафика, например, с помощью Suricata или Snort, но что делать, если контекста алертов IDS\IPS все еще не хватает для полноценного анализа?
Под катом — обзор opensource NTA — Arkime (в прошлом Moloch).
Немного теории
Что же такое этот ваш NTA? Это система анализа трафика (network traffic analysis), которая позволяет в удобном для аналитики виде представить сетевой трафик (например распарсит его и пололжит в Elasticsearch). В англоязычных ресурсах это так же называют FPC (Full Packet Capture).
В странах СНГ, анализ трафика как правило, ограничивается IDS/IPS от вендоров сетевого оборудования или коммерческим NTA.
Почему NTA так мало распространено? Все очень просто — для этих продуктов необходимо мощное железо и, желательно, TAP (например такой). В виртуальной среде NTA, к сожалению, работает хуже, чем bare metal.
Сам по себе трафик для безопасника может быть интересен только в ходе расследования, но никак не на стадии обнаружения нелегитимной активности. Это связано с тем, что вручную искать иголку в стоге HEX-сена очень и очень непростая задача.
Такое утверждение справедливо для чистого трафика, даже если он индексирован, однако если к этому трафику прикрутить детекты (например от PTSecurity и\или ET Open), то применение NTA преображается в инструмент обнаружения, threat hunting«а и расследования инцидентов ИБ.
Подводя черту, можем сформулировать несколько основных задач NTA для безопасника следующим образом:
Поиск хакерских атак по сигнатурам в трафике (Вредоносное ПО, шеллы, SYN-flood и т.д.)
Мониторинг и выявление аномалий (в сетевом взаимойдействии, в работе протоколов, выгружаемых данных, в наименовании хостов и д.р.) в т.ч. со сбором метаданных на сети и использованием в последующем машинного обучения.
Выявление нелегитимного взаимодействия по управляющим протоколам
Обнаружение туннелей
Нахождение мисконфигов и потенциальных уязвимостей в сетевом трафике (например, простые пароли в LDAP/HTTP трафике и пр.)
Подробнее можно прочитать тут
Подробнее о Arkime
Хорошенько погуглив, нам удалось найти opensource NTA — Arkime. К сожалению, русскоязычных статей или опыта использования инструмента найти не удалось. Поэтому мы расскажем Вам, что же это такое и зачем оно надо.
Итак, как говорилось ранее, Arkime — opensource NTA решение, которое парсит и складывает трафик в Elasticsearch и pcap«ы. Это позволяет анализировать сетевой трафик из веб-интерфейса, что очень и очень удобно. Для безопасников предусмотрена интеграция c Suricata — Arkime умеет сопоставлять алерт с сессией и отображать это в интерфейсе.
Вкладка Sessions, пример интеграции с Suricata
Таким образом, мы очень плавно переходим к обзору функциональности и начнем, разумеется, с обертки веб-морды.
По умолчанию, нас приветствует вкладка Sessions.
Вкладка Sessions
На этой вкладке осуществляется поиск сессий, синтаксис поисковых запросов интуитивно понятен, хорошо задокументирован (в самом интерфейсе есть ЧАВо и документация по языку запросов) и подсказывает поля при вводе (пример на скрине ниже).
Подсказка при написании фильтра
Из приятного, что можно найти, копаясь в сессиях:
Все файлы, которые передавались по сети (например, по smb)
Аутентификационные данные (например, http basic или в ldap-трафике)
Хакера, если сработали сигнатуры по делу и это видно в трафике
View таблицы настраиваемые, можно в любом порядке включить в отображение любое индексируемое поле (например на скрине выше я добавил название сработавшей сигнатуры в конец), и это можно выгружать в файл (в csv или прям в pcap):
Кнопка и меню выгрузки сессий
Так же можно сохранить поисковый запрос и сделать его периодичным (а потом еще и оповещалку прикрутить).
Из важного — текущий поисковый запрос сохраняется при переходе между различными вкладками Arkime (сделал запрос на вкладке sessions, и для дальнейшего анализа идешь на вкладку SPIView например).
Следующая вкладка — SPIView. Это своего рода группировки по индексируемым полям. На наш взгляд, очень удобно и хорошо реализовано — можно из интерфейса накликать фильтр, который интересен.
вкладка SPIView
В повседневном мониторинге самое интересное — это сработавшие сигнатуры. Ниже представлен пример группировок по имени и важности сигнатуры (практически, это каскадные группировки).
группировка по сигнатурам и их критичностью
Кейс 1. Разбор сработавшей сигнатуры
Примерный сценарий, который мы реализовываем каждый день:
Смотрим сработавшие уникальные сигнатуры
Выбираем заинтересовавшую нас (для примера использую любую)
Выбираем сигнатуру Log4j
На этой же вкладке (SPIView) смотрим уникальные адреса источников атаки и цели
Смотрим группировки по IP адресам и протоколам на той же вкладке SPIView
Внутренние адреса — точно наш сканнер, это смотреть не интересно, а вот внешний уже интереснее. Давайте посмотрим, успешная ли атака с этого адреса? Добавим его в фильтр и вернемся на вкладку sessions
Вкладка Sessions с примененным ранее фильтромИтак, анализируя сработку в самом интерфейсе — стало очевидно, что сработка по делу, но атака неуспешная — соединение дропнуто и атакуемый адрес ничем не ответил, кроме RST.
Следующая вкладка — SPIGraph. Это функционал дашбордиков, табличек и графов.
Дашбордики пока сыроваты (можно только один на одну страницу)
Пример бублика с группировкой по странам
Далее — вкладка Connections. Эта вкладка строит граф взаимодействия адресов и проставляем вес линкам (чем жирнее линк — тем больше данных передано во взаимодействии).
Немного забегая вперед, расскажем о вкладке Upload. Тут можно загрузить свой pcap, он будет проиндексирован и отобразится в интерфейсе. Рекомендуем тегировать файл с целью упрощения его дальнейшего поиска.
Однако есть значительный минус — при загрузке pcap через интерфейс, он не прогоняется по сигнатурам suricata, соответственно алертов мы не увидим.
«Как же быть?» спросите вы. А мы ответим — «есть два варианта»
Проиграть pcap на интерфейсах захвата (например tcpliveplay). Он будет получен как обычный трафик, прогонится по сигнатурам и отобразится в интерфейсе, но присвоить ему тэг не выйдет.
Искать активность хацкеров c помощью функционала вкладки Hunt.
Здесь можно осуществлять поиск по raw-данным (т.е. прямо по содержимому пакета, вне индексированных полей). По своей сути, это — движок для ретроспективного поиска.
Кейс 2. Hunt«им
Так как трафик из добавленных pcap, можно искать по указанным тегам. Для демонстрации функционала Hunt мы загрузили из интернета файл с записью трафика, содержащую активность хацкеров и протегировали «Habr».
Отфильтровали загруженный PCAP
Сделаем несколько простых запросов, посмотрим есть ли в трафике команды «net use» или что-то со словом «base64» в загруженном pcap?
Поисковый запрос HUNT для net useПоисковый запрос HUNT для base64
После создания и запуска ханта происходит поиск внутри сессий, подпадающих под текущий фильтр. Так как мы хотим искать только в загруженном pcap, наш фильтр «tags == Habr». После завершения поиска нам будет предложено посмотреть результаты, нажимаем кнопку «open» и в фильтр добавляется id нашего ханта. Переходим на вкладку Sessions и смотрим сессии.
Результаты выполнения HUNT запросов
Так как же использовали ли утилиту net? Смотрим в пакеты.
Сессия по результатам Hunt «Habr_Hunt_1» (net use)
Ого! Кто-то создал пользователя с правами администратора.
Идем дальше. Base64.
Сессия по результатам Hunt «Habr_Hunt_2» (base64)
Так, мы видим Get-запрос, который возвращает powershell скрипт с элементами, кодированными base64. Как же здорово, что под капотом есть функционал CyberChief. Будем декодировать. Однако, данный текст почему-то не читабельный даже после base64-decode. Круто, что есть функционал «Magic» — это модуль, комбинирущий различные варианты декодирования. Благодаря нему мы видим, что это на самом деле сжатый Base64.
Используем magic в CyberChief
Декодируем дальше, смотрим в скрипт, а в нем…
Base64 в Base64
А в нем еще base64. Ну ничего, вкладок у нас много. Поехали дальше.
Декодируем следующий Base64
Это что сон во сне base64 в base64gzip? Получается так. Зачем так сложно? Тут уже забирают скрипт для создания dns-туннелей.
Вот так вот мы нашли в нашем тестовом pcap-файле несколько атак.
С помощью такого функционала можно делать и более сложные ханты, шарить другим пользователям и делать их периодичными. Однако, если запустить hunt по всем сессиям, то это будет крайне медленно и ресурсозатратно. Хантами нельзя заменить функционал сурикаты, но можно его дополнить поиском «в прошлом». Как пример:
Вышел 0-day
На следующий день после публикации 0-day, обновились сигнатуры suricata
Устанавливаем сигнатуру и, с момента установки, будем мониторить сработки
С помощью функционала Hunt, можно проверить, атаковались ли мы в период между выходом 0-day и установкой сигнатуры.
Если это переложить на Time-Line:
Вкладки Files и Stats больше служебные — отображение pcap файлов что есть в системе, а также данные по эластику\нодам захвата.
Вкладки Files\Stats
История поисковых запросов сохраняется и к ним можно вернуться, правда это находится в другой вкладке — History. Не очень удобно, но важен сам факт наличия такого функционала.
Вкладка History
Вкладки Settings и User особо комментировать не станем, из интересного — можно выбрать тему веб-интерфейса под себя (не все коммерческие NTA умеют в темную тему