Для анализа сетевого трафика чаще всего выбирают Wireshark. В нем можно сказать есть все : и хороший интерфейс, и и подробнейшее заключение о каждом пакете ну и документация. Правда в нем имеются недостатки самый серьезный из которых тормознутость при обработке больших дампов. В этой статье мы рассмотрим как анализирвать трафик с помощью ZUI.
Пользовательский интерфейс Zed (ранее Brim), впервые выпущенный для сообщества IB в 2018 году, был разработан с использованием Electron и React. Внутри используется движок ZED, который в свою очередь написан на Go и состоит из нескольких компонентов:
- Zed data model — общее название для лежащих в основе проекта типов данных и семантики;
- Zed lake — коллекция выборочно индексированных данных Zed;
- Zed language — язык для выполнения запросов, поиска, аналитики;
- Zed shaper — модуль, который приводит входные данные к формату Zed data model;
- Zed formats — семейство последовательных (ZNG), столбцовых (ZST) и человекочитаемых (ZSON) форматов;
- Zed query — скрипт, который выполняет поиск и аналитику;
- Zeek и Suritcata — сигнатурные системы (intrusion detection systems).
Главные отличия ZUI от Wireshark — это скорость работы, поддержка сигнатур и анализа логов. Из минусов можно отметить невозможность декодировать пакеты и экспортировать найденные в трафике файлы.
СКОРОСТЬ
Изначально ZUI назывался Brim и специализировался исключительно на анализе сетевого трафика и логов. Но из-за универсальности движка ZED он стал развиваться и в других направлениях, а именно в направлении аналитики данных.
Идея механизма ZED, который позволяет ZUI обрабатывать файлы PCAP намного быстрее, чем Wireshark, состоит в том, чтобы избавиться от концепции таблиц из базовой модели данных. Они были заменены современной системой типов, в которой каждое значение может иметь свой собственный тип независимо от сложной схемы, как в настоящее время реализовано в более старых моделях. Получается, что ZED не является ни полуструктурированным, ни табличным. Создатели называют эту концепцию дополнением.
Для примера можно привести формат из Zed data model под названием ZSON. Это привычный нам JSON с собственными типами значений.
Этих знаний нам достаточно, чтобы использовать ZUI в самом интересном, на наш взгляд, приложении — анализе трафика.
Схема работы
УСТАНОВКА
Linux
Для установки ZUI в Linux используй следующие команды:
wget "https://github.com/brimdata/brim/releases/download/v0.31.0/Brim-0.31.0.deb"
sudo chmod +x ./Brim-0.31.0.deb; apt install ./Brim-0.31.0.deb
Обязательно поменяй версию приложения в команде, чтобы пользоваться самым новым релизом.
Windows и macOS
Для них суть та же: достаточно скачать установщик с официального сайта приложения и запустить его.
ИНТЕРФЕЙС
Во-первых, давайте полюбуемся минималистичным пользовательским интерфейсом и посмотрим, насколько он функционален. Вы можете отправлять файлы и других форматов в качестве входных данных для программы, но нас больше JSON, CSV, ZSON, ZNG интересует передача файла ZUI PCAP или структурированного журнала, такого как журнал Zeek.
Главная страница утилиты
В пуле хранится преобразованный PCAP. Вы можете загрузить сразу несколько файлов в пул, и все содержащиеся в них данные будут доступны в единой поисковой строке. На временной шкале вы можете выбрать временной диапазон, который хотите изучить сейчас. В деталях вы можете увидеть наиболее ценную информацию, такую как поля корреляции.
Меня поразил тот факт, что особенно интересен ресурс с небольшой схемой взаимодействия между двумя хостами. Отображается, если вы открываете журнал с зеленым тегом conn. Кнопка открытия потока данных в Wireshark тоже очень полезная, но о ней уже упоминалось выше.
Небольшая диаграмма взаимодействия хостов
ПРИМЕНЯЕМ ZUI НА ПРАКТИКЕ И ПИШЕМ ЗАПРОСЫ
Начать стоит с того, что писать запросы с помощью ZQL-запроса совсем не сложно. Просто найдите нужные поля в логах и отфильтруйте логи по ним. Строка запроса будет переполнена новыми условиями поиска. Лично я постоянно забываю, как найти ту или иную информацию с помощью фильтров Wireshark.
Создание фильтрующего правила с помощью выбора полей
Я подготовил для тебя примеры запросов поиска, которые покроют основные юзкейсы при работе с ZUI.
Количество каждой категории тегов:
count() by _path | sort -r
Все уникальные DNS queries:
_path=="dns" | count() by query | sort -r
SMB- и RPC-трафик в системах Windows:
_path matches smb* OR _path=="dce_rpc"
HTTP-запросы и фильтрация самых полезных колонок:
_path=="http" | cut id.orig_h, id.resp_h, id.resp_p, method, host, uri | uniq -c
Уникальные коннекты и их количество:
_path=="conn" | cut id.orig_h, id.resp_p, id.resp_h | sort | uniq
Количество переданных байтов на один коннект:
_path=="conn" | put total_bytes := orig_bytes + resp_bytes | sort -r total_bytes | cut uid, id, orig_bytes, resp_bytes, total_bytes
Поиск передаваемых файлов:
filename!=null | cut _path, tx_hosts, rx_hosts, conn_uids, mime_type, filename, md5, sha1
Все запросы HTTP Post:
method=="POST" | cut ts, uid, id, method, uri, status_code
Все IP-подсети:
_path=="conn" | put classnet := network_of(id.resp_h) | cut classnet | count() by classnet | sort -r
Ну и в завершение парада самые, на мой взгляд, классные.
Демонстрация всех срабатываний сигнатур Suricata и их количество:
event_type=="alert" | count() by alert.severity,alert.category | sort count
Демонстрация всех срабатываний сигнатур Suricata, отфильтрованных по Source IP и Destination IP:
event_type=="alert" | alerts := union(alert.category) by src_ip, dest_ip
СПИДРАН ПО ПОИСКУ EMOTET C2
Emotet был впервые обнаружен в 2014 году, когда исследователи безопасности классифицировали его как банковский троян. Emotet вызвал в свое время целую эпидемию и успел серьезно навредить многим пользователям. Однако позже эта тройка мутировала в дроппер и стала продаваться в даркнете по принципу CaaS (Cybercrime as a Service). Новой особенностью зловреда стала загрузка других вредоносных программ в систему жертвы.
Одним из распространяемых Emotet’ом вредоносов был банковский троян TrickBot. Эту связку мы сейчас и найдем с помощью ZUI.
Начинаем
Найдем все вхождения DNS в файле PCAP. Для этого используем один из ранее приведенных запросов.
_path=="dns" | count() by query | sort -r
Поиск всех вхождений DNS
Больше всего выделяются два адреса: 112.
и t-privat.
. Первый относится к платформе threat-intelligence под названием Spamhaus. А вот второй нам стоит проверить на VirusTotal. Для этого вызовем контекстное меню и выберем VirusTotal Lookup.
VirusTotal в меню
VirusTotal проводит проверку и сообщает нам, что домен вредоносный и ранее использовался для хостинга малвари.
Результаты проверки на VirusTotal
Давайте найдем запись типа A и используем более старую дату разрешения, которая ближе к дате публикации PCAP. Это будет адрес 81.169.145.161. Попробуем найти совпадения в нашем файле PCAP.
Узнаем адрес, и наше внимание обращает на то, что с него идет передача файла во внутреннюю сеть. Это очень подозрительно и требует дальнейшего расследования.
Охота на адрес
Откроем вкладку с этим коннектом и достанем оттуда MD5-хеш 997d6f2e3879bb725fb4747b0046bb50
. Теперь нам надо проверить его на вредоносность.
Файл на VirusTotal
Что ж, сомнения отпали, хост 10.
— это наш первый зараженный.
С2 под прицелом
Нам нужно найти все программные файлы, содержащиеся в этом дампе. Для этого используйте следующую строку поиска:
filename!=null | cut _path, tx_hosts, rx_hosts, conn_uids, mime_type, filename, md5, sha1
Мы видим другой IP-адрес. Запускаем его на VirusTotal и убеждаемся, что он вреден.
Новый подозрительный адрес
Чтобы удостовериться, что это управляющий сервер, проверим остальные коннекты на этот адрес. Сразу становится очевидно: имеют место «маячковые отстукивания».
Новый подозрительный адрес
Масштаб заражения
Давайте отсортируем трафик по тегам, чтобы представить наиболее распространенные типы взаимодействия между хостами.
Общая картина по трафику
Можно сказать, что здесь нет ничего, что указывало бы на продолжающееся распространение вредоносных программ. В таких опросах вы обычно ожидаете увидеть активность SMB и DCE/RPC.
Для уверенности, что заражение не пошло дальше, можно посмотреть коннекты, которые совершал первый (и, надеемся, последний) инфицированный хост.
Масштабного заражения нет
Нам интересны коннекты только из той же подсети. Ничего подозрительного не наблюдается.
Итоги спидрана
Мы нашли несколько IOC, первый зараженный хост, С2-сервер, а также выяснили, что дальше хоста 10.
заражение не пошло.
ВЫВОДЫ
Довольно много времени требовалось Wireshark, чтобы отобразить список записей после фильтрации при разборе большого файла PCAP. Для многих это было довольно сложной задачей. Но теперь появился ZUI, и работа во много крат упрстилась. Все же ZUI не может стать полноценной заменой Wireshark, но превращает довольно утомительный и нервотрепный процесс в нормальную работу и и дает возможность прдуктивно работать. Но в анализе трафика он все же оказывает неоценимую помощь.