Хакер - ZUI. Анализируем трафик с помощью нового быстрого инструмента
hacker_frei
Михаил Онищенко
Содержание статьи
- Скорость
- Установка
- Linux
- Windows и macOS
- Интерфейс
- Применяем ZUI на практике и пишем запросы
- Спидран по поиску Emotet C2
- Начинаем
- С2 под прицелом
- Масштаб заражения
- Итоги спидрана
- Выводы
Для анализа сетевого трафика чаще всего выбирают Wireshark. Тут тебе и фильтры, и хороший интерфейс, и документация, и подробнейший вывод о каждом пакете. Но у этого инструмента есть недостатки, главный из которых — медлительность при анализе больших дампов. Я расскажу об опенсорсном приложении ZUI, которое может стать надежным помощником в анализе трафика.
Zed User Interface (ранее Brim), первая версия которого стала доступна комьюнити ИБ в 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 и Suricata — сигнатурные системы (intrusion detection systems).
Главные отличия ZUI от Wireshark — это скорость работы, поддержка сигнатур и анализа логов. Из минусов можно отметить невозможность декодировать пакеты и экспортировать найденные в трафике файлы.
INFO
Все это можно не считать реальными минусами, потому что любой найденный поток данных в ZUI открывается одним нажатием кнопки в Wireshark, где отображается вся недостающая информация.
СКОРОСТЬ
Изначально ZUI назывался Brim и специализировался исключительно на анализе сетевого трафика и логов. Но из‑за универсальности движка ZED он начал развиваться и в других направлениях, а именно в сторону аналитики данных.
Идея движка ZED, который позволяет ZUI обрабатывать файлы PCAP намного быстрее Wireshark, состоит в том, чтобы избавиться от концепции таблиц из базовой модели данных. Их заменили современной системой типов, при которой каждое значение может иметь свой тип независимо от составной схемы, как это сейчас реализовано в старых моделях. Получается, ZED — и не полуструктурированный, и не табличный. Создатели называют такую концепцию суперструктурированной.
INFO
Основатель компании Brim, разработчика ZUI, — это не кто иной, как Стив Маккейн, создатель формата PCAP, BPF и соавтор tcpdump.
Для примера можно привести формат из 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
Для них суть та же: достаточно скачать с официального сайта приложения установщик и запустить его.
ИНТЕРФЕЙС
Сначала полюбуемся минималистичным UI и увидим, насколько он хорошо организован. На вход программы можно подавать JSON, CSV, ZSON, ZNG и файлы других форматов, но нам интереснее всего скормить ZUI файл PCAP или структурированный лог, например Zeek log.

Как только ты откроешь файл PCAP в ZUI, он тут же пройдется по нему движками Zeek и Suricata, после чего отобразит все находки, а также подтянет ссылки на найденные хеши с VirusTotal. Ну что сказать, круто!
Pool — это место, где хранится преобразованный PCAP. Ты можешь загружать сразу несколько файлов в один pool, и все данные из них будут доступны в одной строке поиска. На таймлайне можно выбрать диапазон времени, который сейчас требуется изучить. В деталях можно посмотреть самую ценную информацию, этакие поля корреляции.
Мне показалась особенно интересной фича с небольшой диаграммкой взаимодействия двух хостов. Она отображается, если открыть лог с зеленым тегом conn. Также весьма полезна кнопка открытия потока данных в Wireshark, но о ней уже было сказано выше.

ПРИМЕНЯЕМ ZUI НА ПРАКТИКЕ И ПИШЕМ ЗАПРОСЫ
Начать стоит с того, что писать запросы с помощью ZQL query совсем не трудно. Достаточно просто найти в логах нужные поля и отфильтровать по ним логи. Строка запроса будет обрастать новыми и новыми условиями поиска. Лично я постоянно забываю, как находить ту или иную информацию с помощью фильтров 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.
WWW
Для анализа нам понадобится вот этот файл PCAP.
Начинаем
Найдем все вхождения DNS в файле PCAP. Для этого используем один из ранее приведенных запросов.
_path=="dns" | count() by query | sort -r

Больше всего выделяются два адреса: 112.146.166.173.zen.spamhaus.org и t-privat.de. Первый относится к платформе threat-intelligence под названием Spamhaus. А вот второй нам стоит проверить на VirusTotal. Для этого вызовем контекстное меню и выберем VirusTotal Lookup.

VirusTotal проводит проверку и сообщает нам, что домен вредоносный и ранее использовался для хостинга малвари.


Найдем запись типа A и используем более старую дату резолва, которая ближе к дате публикации PCAP. Это будет адрес 81.169.145.161. Попробуем найти совпадения в нашем файле PCAP.
Мы обнаруживаем адрес, и наше внимание привлекает то, что с него передается файл во внутреннюю сеть. Это очень подозрительно, надо исследовать дальше.

Откроем вкладку с этим коннектом и достанем оттуда MD5-хеш 997d6f2e3879bb725fb4747b0046bb50. Теперь нам надо проверить его на вредоносность.

Что ж, сомнения отпали, хост 10.9.1.101 — это наш первый зараженный.
С2 под прицелом
Надо найти все передаваемые файлы, которые содержатся в этом дампе. Для этого используем такую строку поиска:
filename!=null | cut _path, tx_hosts, rx_hosts, conn_uids, mime_type, filename, md5, sha1
И что же мы видим? Еще один IP-адрес. Закидываем его на VirusTotal и убеждаемся, что он вредоносный.

Чтобы удостовериться, что это управляющий сервер, проверим остальные коннекты на этот адрес. Сразу становится очевидно: имеют место «маячковые отстукивания».

Масштаб заражения
Отсортируем трафик по тегам, чтобы представлять самые частые типы взаимодействия между хостами.
_path | count() by _path | sort -r

Хм, можно сказать, что ничего указывающего на дальнейшее распространение малвари здесь нет. В таких расследованиях обычно рассчитываешь увидеть активность SMB and DCE/RPC.
Для уверенности, что заражение не пошло дальше, можно посмотреть коннекты, которые совершал первый (и, надеемся, последний) инфицированный хост.

Нам интересны коннекты только из той же подсети. Ничего подозрительного не наблюдается.
Итоги спидрана
Мы нашли несколько IOC, первый зараженный хост, С2-сервер, а также выяснили, что дальше хоста 10.9.1.101 заражение не пошло.
ВЫВОДЫ
Сколько времени было потрачено на ожидание, пока Wireshark отобразит (если вообще отобразит) список вхождений после фильтрации при анализе большого файла PCAP... Для многих это становилось настоящим испытанием. Но теперь ты знаешь про существование ZUI, который заметно упростит твою работу.
ZUI, к сожалению, не может стать полноценной заменой Wireshark, он скорее превращает утомительный процесс в продуктивную работу и бережет нервы. Но в качестве помощника в анализе трафика он просто незаменим.
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei