Сегодня зарепостю вам описание нового инструмента для анализа сетевого трафика от Дмитрия Кожухова (от первого лица). Инструмент под именем ZUI.
Все мы знаем что для анализа сетевого трафика обычно используют Wireshark. У популярного сниффера множество достоинств, среди которых: настраиваемые фильтры, отличный интерфейс, и подробная документация. Но у Wireshark есть один большой недостаток - медленная работа при анализе больших дампов.
Поэтому далее рассмотрим легкую альтернативу для анализа трафика, которая называется ZUI и которая лишена этого недостатка.
Что такое ZUI ?
ZUI - Zed User Interface (бывший Brim), написан с помощью Electron и React. Работает на движке ZED, который написан на Go и состоит различных элементов:
Основные отличия ZUI от Wireshark - это скорость работы, поддержка сигнатур и анализ логов. Из недостатков: не умеет декодировать пакеты и экспортировать найденные в трафике файлы. Это на самом деле не большие минусы, потому что каждый найденный поток данных в ZUI можно открыть простым кликом по кнопке в Wireshark, где отображается вся недостающая информация.
Идея движка ZED, который позволяет ZUI работать с файлами PCAP в разы быстрее Wireshark, состоит в том, чтобы избавиться от концепции таблиц из базовой модели данных. Таблицы заменили современной системой типов, при которой все значения могут иметь свой тип независимо от составной схемы. Получается, Zed User Interface - и не полуструктурированный, и не табличный. Разработчики называют данную концепцию суперструктурированной. Кстати разработчик ZUI - это создатель форматов PCAP, BPF и автор tcpdump!
Для примера можно взять формат из Zed data model под названием ZSON. Это привычный для всех JSON с собственными типами значений. Этого будет достаточно, чтобы начать использовать ZUI в анализе трафика.
Установка ZUI на Windows - достаточно скачать с официального сайта файл установки и запустить его.
Интерфейс Zed User Interface
Сначала взглянем на минималистичный интерфейс и заценим его функциональность. Приложение всеядно, ему можно подсунуть файлы JSON, CSV, ZSON, ZNG и т.д., но нас интересует файл 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
No comments:
Post a Comment
А что вы думаете по этому поводу?