Привет, хабр!  Уже многое было рассказано об анализе сетевого трафика, например, с помощью 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 трафике и пр.) Подробнее можно прочитать тут   Хорошенько погуглив, нам удалось найти opensource NTA - Arkime. К сожалению, русскоязычных статей или опыта использования инструмента найти не удалось. Поэтому мы расскажем Вам, что же это такое и зачем оно надо. Итак, как говорилось ранее, Arkime – opensource NTA решение, которое парсит и складывает трафик в Elasticsearch и pcap’ы. Это позволяет анализировать сетевой трафик из веб-интерфейса, что очень и очень удобно. Для безопасников предусмотрена интеграция c Suricata – Arkime умеет сопоставлять алерт с сессией и отображать это в интерфейсе.  Таким образом, мы очень плавно переходим к обзору функциональности и начнем, разумеется, с обертки  веб-морды. По умолчанию, нас приветствует вкладка Sessions.  На этой вкладке осуществляется поиск сессий, синтаксис поисковых запросов интуитивно понятен, хорошо задокументирован (в самом интерфейсе есть ЧАВо и документация по языку запросов) и подсказывает поля при вводе (пример на скрине ниже). Из приятного, что можно найти, копаясь в сессиях: Все файлы, которые передавались по сети (например, по smb) Аутентификационные данные (например, http basic или в ldap-трафике) Хакера, если сработали сигнатуры по делу и это видно в трафике View таблицы настраиваемые, можно в любом порядке включить в отображение любое индексируемое поле (например на скрине выше я добавил название сработавшей сигнатуры в конец), и это можно выгружать в файл (в csv или прям в pcap): Так же можно сохранить поисковый запрос и сделать его периодичным (а потом еще и оповещалку прикрутить). Из важного - текущий поисковый запрос сохраняется при переходе между различными вкладками Arkime (сделал запрос на вкладке sessions, и для дальнейшего анализа идешь на вкладку SPIView например). Следующая вкладка - SPIView. Это своего рода группировки по индексируемым полям. На наш взгляд, очень удобно и хорошо реализовано - можно из интерфейса накликать фильтр, который интересен. В повседневном мониторинге самое интересное - это сработавшие сигнатуры. Ниже представлен пример группировок по имени и важности сигнатуры (практически, это каскадные группировки). Примерный сценарий, который мы реализовываем каждый день: Смотрим сработавшие уникальные сигнатуры Выбираем заинтересовавшую нас (для примера использую любую)   На этой же вкладке (SPIView) смотрим уникальные адреса источников атаки и цели Внутренние адреса - точно наш сканер, это смотреть не интересно, а вот внешний уже интереснее. Давайте посмотрим, успешная ли атака с этого адреса? Добавим его в фильтр и вернемся на вкладку sessions Итак, анализируя сработку в самом интерфейсе - стало очевидно, что сработка по делу, но атака неуспешная - соединение дропнуто и атакуемый адрес ничем не ответил, кроме RST. Следующая вкладка - SPIGraph. Это функционал дашбордиков, табличек и графов.  Дашбордики пока сыроваты (можно только один на одну страницу)  Далее - вкладка Connections. Эта вкладка строит граф взаимодействия адресов и проставляем вес линкам (чем жирнее линк - тем больше данных передано во взаимодействии). Немного забегая вперед, расскажем о вкладке Upload. Тут можно загрузить свой pcap, он будет проиндексирован и отобразится в интерфейсе. Рекомендуем тегировать файл с целью упрощения его дальнейшего поиска. Однако есть значительный минус - при загрузке pcap через интерфейс, он не прогоняется по сигнатурам suricata, соответственно алертов мы не увидим.     «Как же быть?» спросите вы. А мы ответим - «есть два варианта» Проиграть pcap на интерфейсах захвата (например tcpliveplay). Он будет получен как обычный трафик, прогонится по сигнатурам и отобразится в интерфейсе, но присвоить ему тэг не выйдет. Искать активность хацкеров c помощью функционала вкладки Hunt. Здесь можно осуществлять поиск по raw-данным (т.е. прямо по содержимому пакета, вне индексированных полей). По своей сути, это - движок для ретроспективного поиска.   Так как трафик из добавленных 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