Привет, хабр!

Уже многое было рассказано об анализе сетевого трафика, например, с помощью 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, пример интеграции с Suricata

Таким образом, мы очень плавно переходим к обзору функциональности и начнем, разумеется, с обертки  веб-морды.

По умолчанию, нас приветствует вкладка Sessions.

Вкладка Sessions
Вкладка Sessions

На этой вкладке осуществляется поиск сессий, синтаксис поисковых запросов интуитивно понятен, хорошо задокументирован (в самом интерфейсе есть ЧАВо и документация по языку запросов) и подсказывает поля при вводе (пример на скрине ниже).

Подсказка при написании фильтра
Подсказка при написании фильтра

Из приятного, что можно найти, копаясь в сессиях:

  1. Все файлы, которые передавались по сети (например, по smb)

  2. Аутентификационные данные (например, http basic или в ldap-трафике)

  3. Хакера, если сработали сигнатуры по делу и это видно в трафике

View таблицы настраиваемые, можно в любом порядке включить в отображение любое индексируемое поле (например на скрине выше я добавил название сработавшей сигнатуры в конец), и это можно выгружать в файл (в csv или прям в pcap):

Кнопка и меню выгрузки сессий
Кнопка и меню выгрузки сессий

Так же можно сохранить поисковый запрос и сделать его периодичным (а потом еще и оповещалку прикрутить).

Из важного - текущий поисковый запрос сохраняется при переходе между различными вкладками Arkime (сделал запрос на вкладке sessions, и для дальнейшего анализа идешь на вкладку SPIView например).

Следующая вкладка - SPIView. Это своего рода группировки по индексируемым полям. На наш взгляд, очень удобно и хорошо реализовано - можно из интерфейса накликать фильтр, который интересен.

вкладка SPIView
вкладка SPIView

В повседневном мониторинге самое интересное - это сработавшие сигнатуры. Ниже представлен пример группировок по имени и важности сигнатуры (практически, это каскадные группировки).

группировка по сигнатурам и их критичностью
группировка по сигнатурам и их критичностью

Кейс 1. Разбор сработавшей сигнатуры

Примерный сценарий, который мы реализовываем каждый день:

  1. Смотрим сработавшие уникальные сигнатуры

  2. Выбираем заинтересовавшую нас (для примера использую любую)

 

Выбираем сигнатуру Log4j
Выбираем сигнатуру Log4j
  1. На этой же вкладке (SPIView) смотрим уникальные адреса источников атаки и цели

Смотрим группировки по IP адресам и протоколам на той же вкладке SPIView
Смотрим группировки по IP адресам и протоколам на той же вкладке SPIView
  1. Внутренние адреса - точно наш сканер, это смотреть не интересно, а вот внешний уже интереснее. Давайте посмотрим, успешная ли атака с этого адреса? Добавим его в фильтр и вернемся на вкладку sessions

    Вкладка Sessions с примененным ранее фильтром
    Вкладка Sessions с примененным ранее фильтром
    1. Итак, анализируя сработку в самом интерфейсе - стало очевидно, что сработка по делу, но атака неуспешная - соединение дропнуто и атакуемый адрес ничем не ответил, кроме RST.


Следующая вкладка - SPIGraph. Это функционал дашбордиков, табличек и графов.

Дашбордики пока сыроваты (можно только один на одну страницу)

Пример бублика с группировкой по странам
Пример бублика с группировкой по странам

Далее - вкладка Connections. Эта вкладка строит граф взаимодействия адресов и проставляем вес линкам (чем жирнее линк - тем больше данных передано во взаимодействии).

Немного забегая вперед, расскажем о вкладке Upload. Тут можно загрузить свой pcap, он будет проиндексирован и отобразится в интерфейсе. Рекомендуем тегировать файл с целью упрощения его дальнейшего поиска.

Однако есть значительный минус - при загрузке pcap через интерфейс, он не прогоняется по сигнатурам suricata, соответственно алертов мы не увидим.

«Как же быть?» спросите вы. А мы ответим - «есть два варианта»

  1. Проиграть pcap на интерфейсах захвата (например tcpliveplay). Он будет получен как обычный трафик, прогонится по сигнатурам и отобразится в интерфейсе, но присвоить ему тэг не выйдет.

  2. Искать активность хацкеров c помощью функционала вкладки Hunt.

Здесь можно осуществлять поиск по raw-данным (т.е. прямо по содержимому пакета, вне индексированных полей). По своей сути, это - движок для ретроспективного поиска. 


Кейс 2. Hunt’им

Так как трафик из добавленных pcap, можно искать по указанным тегам. Для демонстрации функционала Hunt мы загрузили из интернета файл с записью трафика, содержащую активность хацкеров и протегировали «Habr».

Отфильтровали загруженный PCAP
Отфильтровали загруженный PCAP

Сделаем несколько простых запросов, посмотрим есть ли в трафике команды «net use» или что-то со словом «base64» в загруженном pcap?

Поисковый запрос HUNT для net use
Поисковый запрос HUNT для net use
Поисковый запрос HUNT для base64
Поисковый запрос HUNT для base64

После создания и запуска ханта происходит поиск внутри сессий, подпадающих под текущий фильтр. Так как мы хотим искать только в загруженном pcap, наш фильтр «tags == Habr». После завершения поиска нам будет предложено посмотреть результаты, нажимаем кнопку «open» и в фильтр добавляется id нашего ханта. Переходим на вкладку Sessions и смотрим сессии.

Результаты выполнения HUNT запросов
Результаты выполнения HUNT запросов

Так как же использовали ли утилиту net? Смотрим в пакеты.

Сессия по результатам Hunt "Habr_Hunt_1" (net use)
Сессия по результатам Hunt "Habr_Hunt_1" (net use)

Ого! Кто-то создал пользователя с правами администратора.
Идем дальше. Base64.

Сессия по результатам Hunt "Habr_Hunt_2" (base64)
Сессия по результатам Hunt "Habr_Hunt_2" (base64)

Так, мы видим Get-запрос, который возвращает powershell скрипт с элементами, кодированными base64. Как же здорово, что под капотом есть функционал CyberChef. Будем декодировать. Однако, данный текст почему-то не читабельный даже после base64-decode. Круто, что есть функционал «Magic» - это модуль, комбинирующий различные варианты декодирования. Благодаря нему мы видим, что это на самом деле сжатый Base64.

Используем magic в CyberChef
Используем magic в CyberChef

Декодируем дальше, смотрим в скрипт, а в нем…

Base64 в Base64
Base64 в Base64

А в нем еще base64.  Ну ничего, вкладок у нас много. Поехали дальше.

Декодируем следующий Base64
Декодируем следующий Base64

Это что сон во сне base64 в base64gzip? Получается так. Зачем так сложно? Тут уже забирают скрипт для создания dns-туннелей.

Вот так вот мы нашли в нашем тестовом pcap-файле несколько атак.


С помощью такого функционала можно делать и более сложные ханты, шарить другим пользователям и делать их периодичными. Однако, если запустить hunt по всем сессиям, то это будет крайне медленно и ресурсозатратно. Хантами нельзя заменить функционал сурикаты, но можно его дополнить поиском «в прошлом». Как пример:

  1. Вышел 0-day

  2. На следующий день после публикации 0-day, обновились сигнатуры suricata

  3. Устанавливаем сигнатуру и, с момента установки, будем мониторить сработки

  4. С помощью функционала Hunt, можно проверить, атаковались ли мы в период между выходом 0-day и установкой сигнатуры.

Если это переложить на Time-Line:

Вкладки Files и Stats больше служебные - отображение pcap файлов что есть в системе, а также данные по эластику\нодам захвата.

Вкладки Files\Stats
Вкладки Files\Stats

История поисковых запросов сохраняется и к ним можно вернуться, правда это находится в другой вкладке - History.  Не очень удобно, но важен сам факт наличия такого функционала.

Вкладка History
Вкладка History

Вкладки Settings и User особо комментировать не станем, из интересного - можно выбрать тему веб-интерфейса под себя (не все коммерческие NTA умеют в темную тему????)

Выбираем тему веб-интерфейса
Выбираем тему веб-интерфейса

Что внутри?

Итак, мы осмотрели интерфейс. Самое время заглянуть “под капот”.

А под капотом крутится ElasticSearch, Suricata и CyberChef на RHEL\centos 8 (список поддерживаемых ОС намного шире). Все настройки в нескольких файлах конфигураций (suricata.yml, config.ini, arkime.rules), которые хорошо задокументированы.

Из интересных возможностей:

  1. Есть возможность очень тонко фильтровать запись трафика (например, можно записать только первые n пакетов tls сессии - хранить шифрованный трафик дорогая и бесполезная идея, а вот факт установления такой сессии может быть интересен). Для такого функционала есть bpf + arkime.rules (https://arkime.com/rules)

  2. Интеграция Suricata -> Arkime работает очень просто - они смотрят в одинаковые интерфейсы захвата и анализируют одинаковый трафик. Suricata пишет алерты в файл, который потом читает Arkime.

  3. Есть возможность тегировать определенный трафик налету с помощью тех же arkime.rules

  4. Вендором Разработчиками заявлена возможность распределенной установки с несколькими нодами захвата и индексации, с объединением в один 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

Комментарии (0)