Привет, хабр!
Уже многое было рассказано об анализе сетевого трафика, например, с помощью 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.
На этой вкладке осуществляется поиск сессий, синтаксис поисковых запросов интуитивно понятен, хорошо задокументирован (в самом интерфейсе есть ЧАВо и документация по языку запросов) и подсказывает поля при вводе (пример на скрине ниже).
Из приятного, что можно найти, копаясь в сессиях:
Все файлы, которые передавались по сети (например, по smb)
Аутентификационные данные (например, http basic или в ldap-трафике)
Хакера, если сработали сигнатуры по делу и это видно в трафике
View таблицы настраиваемые, можно в любом порядке включить в отображение любое индексируемое поле (например на скрине выше я добавил название сработавшей сигнатуры в конец), и это можно выгружать в файл (в csv или прям в pcap):
Так же можно сохранить поисковый запрос и сделать его периодичным (а потом еще и оповещалку прикрутить).
Из важного - текущий поисковый запрос сохраняется при переходе между различными вкладками Arkime (сделал запрос на вкладке sessions, и для дальнейшего анализа идешь на вкладку SPIView например).
Следующая вкладка - SPIView. Это своего рода группировки по индексируемым полям. На наш взгляд, очень удобно и хорошо реализовано - можно из интерфейса накликать фильтр, который интересен.
В повседневном мониторинге самое интересное - это сработавшие сигнатуры. Ниже представлен пример группировок по имени и важности сигнатуры (практически, это каскадные группировки).
Кейс 1. Разбор сработавшей сигнатуры
Примерный сценарий, который мы реализовываем каждый день:
Смотрим сработавшие уникальные сигнатуры
Выбираем заинтересовавшую нас (для примера использую любую)
На этой же вкладке (SPIView) смотрим уникальные адреса источников атаки и цели
-
Внутренние адреса - точно наш сканер, это смотреть не интересно, а вот внешний уже интереснее. Давайте посмотрим, успешная ли атака с этого адреса? Добавим его в фильтр и вернемся на вкладку sessions
Итак, анализируя сработку в самом интерфейсе - стало очевидно, что сработка по делу, но атака неуспешная - соединение дропнуто и атакуемый адрес ничем не ответил, кроме RST.
Следующая вкладка - SPIGraph. Это функционал дашбордиков, табличек и графов.
Дашбордики пока сыроваты (можно только один на одну страницу)
Далее - вкладка Connections. Эта вкладка строит граф взаимодействия адресов и проставляем вес линкам (чем жирнее линк - тем больше данных передано во взаимодействии).
Немного забегая вперед, расскажем о вкладке Upload. Тут можно загрузить свой pcap, он будет проиндексирован и отобразится в интерфейсе. Рекомендуем тегировать файл с целью упрощения его дальнейшего поиска.
Однако есть значительный минус - при загрузке pcap через интерфейс, он не прогоняется по сигнатурам suricata, соответственно алертов мы не увидим.
«Как же быть?» спросите вы. А мы ответим - «есть два варианта»
Проиграть pcap на интерфейсах захвата (например tcpliveplay). Он будет получен как обычный трафик, прогонится по сигнатурам и отобразится в интерфейсе, но присвоить ему тэг не выйдет.
Искать активность хацкеров c помощью функционала вкладки Hunt.
Здесь можно осуществлять поиск по raw-данным (т.е. прямо по содержимому пакета, вне индексированных полей). По своей сути, это - движок для ретроспективного поиска.
Кейс 2. Hunt’им
Так как трафик из добавленных pcap, можно искать по указанным тегам. Для демонстрации функционала Hunt мы загрузили из интернета файл с записью трафика, содержащую активность хацкеров и протегировали «Habr».
Сделаем несколько простых запросов, посмотрим есть ли в трафике команды «net use» или что-то со словом «base64» в загруженном pcap?
После создания и запуска ханта происходит поиск внутри сессий, подпадающих под текущий фильтр. Так как мы хотим искать только в загруженном pcap, наш фильтр «tags == Habr». После завершения поиска нам будет предложено посмотреть результаты, нажимаем кнопку «open» и в фильтр добавляется id нашего ханта. Переходим на вкладку Sessions и смотрим сессии.
Так как же использовали ли утилиту net? Смотрим в пакеты.
Ого! Кто-то создал пользователя с правами администратора.
Идем дальше. Base64.
Так, мы видим Get-запрос, который возвращает powershell скрипт с элементами, кодированными base64. Как же здорово, что под капотом есть функционал CyberChef. Будем декодировать. Однако, данный текст почему-то не читабельный даже после base64-decode. Круто, что есть функционал «Magic» - это модуль, комбинирующий различные варианты декодирования. Благодаря нему мы видим, что это на самом деле сжатый Base64.
Декодируем дальше, смотрим в скрипт, а в нем…
А в нем еще base64. Ну ничего, вкладок у нас много. Поехали дальше.
Это что сон во сне base64 в base64gzip? Получается так. Зачем так сложно? Тут уже забирают скрипт для создания dns-туннелей.
Вот так вот мы нашли в нашем тестовом pcap-файле несколько атак.
С помощью такого функционала можно делать и более сложные ханты, шарить другим пользователям и делать их периодичными. Однако, если запустить hunt по всем сессиям, то это будет крайне медленно и ресурсозатратно. Хантами нельзя заменить функционал сурикаты, но можно его дополнить поиском «в прошлом». Как пример:
Вышел 0-day
На следующий день после публикации 0-day, обновились сигнатуры suricata
Устанавливаем сигнатуру и, с момента установки, будем мониторить сработки
С помощью функционала Hunt, можно проверить, атаковались ли мы в период между выходом 0-day и установкой сигнатуры.
Если это переложить на Time-Line:
Вкладки Files и Stats больше служебные - отображение pcap файлов что есть в системе, а также данные по эластику\нодам захвата.
История поисковых запросов сохраняется и к ним можно вернуться, правда это находится в другой вкладке - History. Не очень удобно, но важен сам факт наличия такого функционала.
Вкладки Settings и User особо комментировать не станем, из интересного - можно выбрать тему веб-интерфейса под себя (не все коммерческие NTA умеют в темную тему????)
Что внутри?
Итак, мы осмотрели интерфейс. Самое время заглянуть “под капот”.
А под капотом крутится ElasticSearch, Suricata и CyberChef на RHEL\centos 8 (список поддерживаемых ОС намного шире). Все настройки в нескольких файлах конфигураций (suricata.yml, config.ini, arkime.rules), которые хорошо задокументированы.
Из интересных возможностей:
Есть возможность очень тонко фильтровать запись трафика (например, можно записать только первые n пакетов tls сессии - хранить шифрованный трафик дорогая и бесполезная идея, а вот факт установления такой сессии может быть интересен). Для такого функционала есть bpf + arkime.rules (https://arkime.com/rules)
Интеграция Suricata -> Arkime работает очень просто - они смотрят в одинаковые интерфейсы захвата и анализируют одинаковый трафик. Suricata пишет алерты в файл, который потом читает Arkime.
Есть возможность тегировать определенный трафик налету с помощью тех же arkime.rules
ВендоромРазработчиками заявлена возможность распределенной установки с несколькими нодами захвата и индексации, с объединением в один viewer.
Кажется, самое время подвести промежуточные плюсы и минусы:
Pro’s |
Con’s |
1. OpenSource 2. Хорошая поддержка community через Slack (сравнима с вендорской). Отдельное спасибо создателю - Andy Wick (самый быстрый ответ - 3 минуты) 3. Возможность аккуратно отрезать запись трафика (например, шифрованного). 4. Удобство аналитики: в интерфейсе отображаются пикапы, можно на одной вкладке полностью анализ проводить, нет необходимости выкачивать и прыгать между вкладками 5. Есть возможность фильтровать\искать по содержимому пакетов 6. Интеграция с suricata (стоит рядом, из ее данных происходит обогащение сессий) 7. Распределенная High-load инсталяция 8. Сохранение фильтров запросов, возможность делиться ими 9. Сохранение конфигурации филдов, группировок, возможно делиться ей 10. Есть простые, но удобные группировки с возможностью добавления в фильтр и открытия на вкладке Сессий |
1. OpenSource 2. Не резолвит ip в dns имя 3. Нет обновляемых коммерческих сигнатур (Только ET Open + github (например открытые сигнатуры PTSecurity) + собственные) 4. Парсит имена файлов, но выкачать отдельно файл нельзя (только если из pcap выдергивать отдельно) 5. Отсутствие репутационных списков 6. Нет карточки актива (например с информацией по ip адресу за последние n часов) 7. Вайтлистинг правил Suricata - надо прикручивать что-то сбоку, чтобы из веб-интерфейса работало 8. Не умеет в определение DGA доменов 9. Сложности с анализом PCAP-файла по сигнатурам suricata с последующей индексацией. |
Вместо заключения
Arkime - малоизвестный в СНГ продукт, который имеет полное право занять свое место на пьедистале ИТ\ИБ в классе NTA. Для opensource имеет невероятно широкий функционал из коробки, а так же очень хорошую базу знаний как на самом сайте, так и в сообществе в Slack.
На этом первая часть обзорной статьи заканчивается. Читайте в следующих сериях (сценарии приблизительные):
Масштабирование Arkime - добавление новых нод захвата, их интеграция с одним view
Обновление на 4+ версию, прикручивание доменной аутентификации
Вайтлист правил Suricata для Arkime
Подробный hunt атак в разных дампах трафика.
Stay tuned!
Авторы текста или систему настраивали:
Дьячков Иван, tg: @Roosevelt_Rus
Советкин Иван tg: @ivanovivanivanovich