Хакер - ZUI. Анализируем трафик с помощью нового быстрого инструмента

Хакер - ZUI. Анализируем трафик с помощью нового быстрого инструмента

hacker_frei

https://t.me/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

По­иск всех вхож­дений DNS

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

VirusTotal в меню

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

Ре­зуль­таты про­вер­ки на VirusTotal

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

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

Охо­та на адрес

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

Файл на VirusTotal

Что ж, сом­нения отпа­ли, хост 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



Report Page