Сбор и анализ системных событий с помощью Plaso

Сбор системных событий Plaso

Тот, кто занимается форензикой, знаком с тулзой Scalpel, но кроме острого скальпеля могут понадобится и другие инструменты для сбора и анализа системных событий. Таким инструментом является Plaso.

Еще по теме: Лучшие дистрибутивы для криминалистического анализа

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

Сбор и анализ системных событий с помощью Plaso

Plaso — это инструмент форензики для анализа и извлечения временных интервалов (агрегации таймстапов).

Установка Plaso

Для уста­нов­ки Plaso не тре­бует­ся особых навыков. Можно это сделать клонируя ре­пози­торий или исполь­зовать pip.

$ sudo apt-install python3-pip
$ pip install plaso elasticsearch

Теперь уста­нов­им все необходимые зависи­мос­ти:

$ pip install -r requirements.txt

В фай­ле requirements.txt нет опци­ональ­ных зависи­мос­тей. Исправляем это дело командой:

$ pip install chardet fakeredis mock

Установка на Windows требует большей возни потому, что надо дополнительно ус­тановить в сис­тему Build Tools for Visual Studio. Но это реша­ется просто, с помощью уста­новоч­ного пакета Visual Studio 2017 (имен­но с ним лично у меня все завелось).

Начинаем уста­нов­ку и выбираем в раз­деле Individual components ком­понент VC++ 2015.3 v14.00 (v140) toolset for desktop. Пос­ле чего все зависи­мос­ти уста­новят­ся через pip.

Установка Plaso

Набор инструментов

Plaso состоит из нес­коль­ко полезных ути­лит, которые можно найти в катало­ге tools.

image_export — тулза для извле­чения из устрой­ства или его обра­за фай­лов по раз­личным кри­тери­ям: начиная c рас­ширения и путей, закан­чивая сиг­натура­ми и вре­менем соз­дания или модифи­кации. Кро­ме того, эта утилита пос­ле извле­чения фай­лов создаст файл hashes.json, в котором будут находится хеш‑зна­чения всех извле­чен­ных фай­лов для будущей про­вер­ки, нап­ример на сервисе онлайн проверки на вирусы VirusTotal.

При­меры запус­ка:

py image_export.py disk1.dd

Па­рамет­ры --names, --extensions и --date-filter не дол­жны выз­вать у вас никаких труностей, рас­смот­рим под­робнее толь­ко извле­чение по сиг­натурам.

py image_export.py --signatures list

Данная коман­да выведет все опи­сан­ные в data\signatures.conf сиг­натуры, которые мож­но найти сре­ди иссле­дуемых фай­лов для извле­чения. Разумеется, в кон­фиге записа­ны толь­ко базовые сиг­натуры на все любой жизненный случай, но вы можете самос­тоятель­но добавить в кон­фиг стро­ку с необ­ходимой для вас спе­цифи­чес­кой сиг­натурой фай­ла, важно при этом — выб­рать уни­каль­ный иден­тифика­тор.

Для извлечения всех фай­лов Windows PE с исполь­зовани­ем готовой сиг­натуры exe_mz:

py image_export.py --signatures exe_mz disk1.dd

log2timeline — основной инс­тру­мент, с которо­го, собс­твен­но, две­над­цать лет назад все и началось. Он исполь­зует­ся для извле­чения раз­ных событий из фай­лов, катало­гов (нап­ример, точек мон­тирова­ния), устрой­ства или его обра­за. В резуль­тате работы ути­лита фор­миру­ет файл в фор­мате Plaso, который в даль­нейшем будет исполь­зовать­ся для ана­лиза.

Вот как выг­лядит стан­дар­тный запуск:

py log2timeline.py --storage-file output_file disk1.dd

Все виды фай­лов, из которых может быть извле­чена полез­ная для фор­миру­емо­го тай­млай­на информа­ция, находят­ся в катало­ге test_data, а непос­редс­твен­но сами пар­серы раз­мещены в катало­ге plaso/parsers. Так что, если понадо­бит­ся дорабо­тать либо раз­работать новый пар­сер для какого‑то осо­бен­ного фор­мата фай­ла, вы зна­ете, где начинать копать!

От­дель­но сто­ит отме­тить исполь­зование опции --process-archives. Она может силь­но уве­личить вре­мя работы ути­литы, одна­ко, как вы понимаете, в каком‑нибудь архи­ве может быть слу­чай­но обна­руже­на важ­ная ули­ка, забытая зло­умыш­ленни­ком.

За­меча­тель­ное свой­ство log2timeline — интегра­ция с пра­вила­ми YARA. Что­бы добавить в резуль­таты тай­млай­на све­дения о сра­баты­вани­ях пра­вил YARA, необ­ходимо запус­тить инс­тру­мент с клю­чом --yara_rules.

py log2timeline.py --storage-file output_file --process-archives --yara_rules rules.yar disk1.dd

где rules.yar — пред­варитель­но под­готов­ленный вами файл с пра­вила­ми YARA.

Ес­ли пред­варитель­но добыть опен­сор­сные пра­вила (к при­меру, от Clam AV) и скон­верти­ровать их в фор­мат YARA, то в ито­ге из незамыс­ловатой ути­литы log2timeline начина­ет прев­ращать­ся в мощ­ный инс­тру­мент.

pinfo — ути­лита для вывода информа­ции о содер­жимом фай­ла Plaso, нап­ример вер­сиях, пар­серах, типах событий, попав­ших в отчет, их количес­тве и ошиб­ках.

При ана­лизе быва­ет полез­на опция -v, которая допол­нитель­но выведет под­робную информа­цию об име­ни компь­юте­ра, точ­ную вер­сию ОС и информа­цию о поль­зовате­лях.

psort — ути­лита, которая поз­волит выпол­нить допол­нитель­ную обра­бот­ку и скон­верти­ровать получен­ный ранее файл Plaso в фор­мат, в котором будет вес­тись его даль­нейший ана­лиз. При его запус­ке не забывайте исполь­зовать опцию --output-time-zone для того, что­бы потом в ходе ана­лиза к вре­мен­ным мет­кам (которые по умол­чанию в UTC) не при­бав­лять нуж­ный часовой пояс.

За­пус­кая ути­литу с опци­ей --analysis plugin и на осно­вании обра­ботан­ных событий вы получите высоко­уров­невую информа­цию от пла­гина, нап­ример о наличии сре­ди всех иссле­дуемых фай­лов вре­доно­сов, ког­да‑либо заг­ружен­ных на VirusTotal.

При­чем запус­кать этот пла­гин мож­но без бояз­ни слить в обла­ко какую‑то чувс­тви­тель­ную для заказ­чика информа­цию, пос­коль­ку про­вер­ка идет исклю­читель­но по хеш‑зна­чени­ям, пос­читан­ным на эта­пе сбо­ра дан­ных. Понят­но, что для работы с этим пла­гином пот­ребу­ется API-ключ от сер­виса.

Так­же есть под­дер­жка работы с фрей­мвор­ком Viper, в котором у вас могут быть собс­твен­ные накоп­ления мал­вари.

Оп­ции --slice и --filter поз­воля­ют выб­рать опре­делен­ные события в диапа­зоне нес­коль­ких минут от момен­та инте­ресу­юще­го вас события, одна­ко их под­робно рас­смат­ривать в этой статье не будем.

Кон­верти­ровать события мож­но в раз­ные фор­маты, в том чис­ле в CSV, XLSX и JSON, для выбора фор­мата исполь­зуйте опцию -o.

psteal — ути­лита, объ­еди­няющая в себе фун­кции log2timeline и psort. Лич­но я поль­зовал­ся ей все­го один раз, и то чис­то из любопытс­тва. Спи­сок опций неболь­шой. Одна­ко как экс­пресс‑средс­тво в каких‑то опре­делен­ных ситу­ациях впол­не может подой­ти.

Еще по теме: Особенности форензики в Windows 10

Использование Plaso

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

Для начала запус­тим сбор логов:

py log2timeline.py --storage-file "d:\Work\!Статья\test_case_1.plaso" "d:\Work\!Статья\dd\disk1.dd"

Ес­ли Plaso обна­ружит теневые копии томов, то он радос­тно отра­пор­тует о том, что готов выг­рести все дос­тупные события в том чис­ле и из них. Сог­лаша­емся со все­ми его пред­ложени­ями и идем пить пиво. Отве­ден­ное на это вре­мя зависит от ресур­сов вашего ком­пьютера и объ­ема дан­ных, которые пос­тупили на вход.

Ког­да ком­про­мета­ция сис­темы была дав­но и зло­дей дол­го в ней копошил­ся, а в кон­це почис­тил за собой логи, из теневых копий иног­да все рав­но мож­но вытащить мно­го информа­ции, даже без исполь­зования Sysmon.

По ста­тис­тике, которая пару лет назад попалась мне на гла­за, сред­ний пери­од нахож­дения зло­умыш­ленни­ка в ском­про­мети­рован­ной сис­теме сос­тавля­ет поч­ти девять месяцев!

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

По окон­чании работы ути­литы (в моем слу­чае сбор логов занял при­мер­но час) мож­но перехо­дить к ана­лизу.

Да­вайте запус­тим pinfo и пос­мотрим, что он ска­жет нам об иссле­дуемом обра­зе.

py pinfo.py -v d:\Work\!Статья\test_case_1.plaso

Использование Plaso

Кро­ме парамет­ров, с которы­ми выпол­нялся сбор дан­ных из обра­за, мы видим спи­сок всех пар­серов и пла­гинов, которые были при­мене­ны. Если вдруг какого‑то типа событий в обра­зе обна­ружить не уда­лось, хотя вы уве­рены, что они там точ­но дол­жны при­сутс­тво­вать, при­дет­ся переза­пус­тить log2timeline и при­нуди­тель­но ука­зать инте­ресу­ющий вас пар­сер (такое, нап­ример быва­ет, если нуж­но собирать логи из сис­темы в фор­мате evt).

Так­же pinfo опре­делил вер­сию уста­нов­ленной ОС и ее хос­тнейм и вывел информа­цию о поль­зовате­лях и путях к их домаш­ним катало­гам. Эта информа­ция может быть полез­на в слу­чаях, если какой‑то домаш­ний каталог хра­нит­ся на уда­лен­ном сер­вере. Тог­да при­дет­ся допол­нитель­но скар­мли­вать Plaso отдель­но ско­пиро­ван­ную с сер­вера пап­ку с поль­зователь­ским катало­гом.

Как пользоваться Plaso

Как пользоваться Plaso

Ито­го за поч­ти что час работы Plaso вытащил из обра­за 1 116 040 событий. Гля­дя на вывод pinfo, уже сей­час мож­но при­мер­но пред­положить, сколь­ко событий из какой катего­рии нам пред­сто­ит про­ана­лизи­ровать и какие модули для авто­мати­чес­кого ана­лиза дадут наибо­лее инте­рес­ный резуль­тат.

Анализ системных событий Plaso

Для срав­нения давайте пос­мотрим на диаг­рамму событий, извле­чен­ных из обра­за, в котором я затирал логи с помощью clearev. Как видите, Plaso смог извлечь все­го на три тысячи мень­ше событий типа winevtx, и если пос­мотреть раз­ницу в диаг­раммах, то ста­нет понят­но, что кар­тина изме­нилась не силь­но, сви­детель­ств ком­про­мета­ции сис­темы, веро­ятно, ста­ло даже боль­ше.

Анализ системных событий Plaso

Да­вайте запус­тим psort и поп­робу­ем порабо­тать с резуль­татами его ана­лиза безо вся­ких рас­ширений.

py psort.py --output-time-zone Europe/Moscow --output-format l2tcsv -w d:\Work\!Статья\test_case_1.csv d:\Work\\!Статья\test_case_1.plaso

Psort Plaso

Один взгляд на CSV объ­емом более 300 Мбайт вызыва­ет у неис­кушен­ного зри­теля смер­тель­ную тос­ку. Пока нем­ного поп­рокрас­тиниру­ем и пос­мотрим, что еще мож­но сде­лать, преж­де чем встав­лять себе спич­ки в гла­за.

Пред­положим, что поль­зователь компь­юте­ра вне­зап­но вспом­нил, как 25-го чис­ла текуще­го месяца ему пос­тупило очень заман­чивое пред­ложение получить от Ило­на Мас­ка бит­койн, ссыл­ка на который приш­ла по поч­те.

Да­вай пос­мотрим, чем нам может помочь эта информа­ция и скрипт image_export:

$ py image_export.py --date-filter "atime,2021-08-25 09:00:00,2021-08-25 18:30:00" --signatures exe_mz -w d:\Work\!Статья\extracted d:\Work\!Статья\dd\disk1.dd

Вне­зап­но в катало­ге Downloads поль­зовате­ля обна­ружи­вает­ся исполня­емый файл с край­не подоз­ритель­ным наз­вани­ем free_bitcoins_from_Musk.exe. Начнем поис­ки в нашем тай­млай­не имен­но с это­го события. Вос­поль­зуем­ся grep.

$ grep free_bitc test_case_1.csv > free_bitc.csv

Так уже нам­ного луч­ше. Я поз­волил из получен­ного вывода в 55 событий отоб­рать шесть наибо­лее любопыт­ных.

Psort Plaso

В спис­ке событий перед нами вид­но, что любопыт­ный поль­зователь в 16:07:44 с помощью бра­узе­ра Edge дей­стви­тель­но ска­чал подоз­ритель­ный файл и спус­тя пару мгно­вений запус­тил его. Сле­дующим событи­ем мы наб­люда­ем уста­нов­ление сетево­го соеди­нения от запущен­ного про­цес­са на уда­лен­ный адрес 192.168.79.131:7788. И бук­валь­но через 30 секунд видим вза­имо­дей­ствие при­ложе­ния с про­цес­сом vmtoolsd.exe.

Та­кая пос­ледова­тель­ность событий очень харак­терна и сви­детель­ству­ет о том, что запущен­ный в кон­тек­сте про­цес­са Meterpreter успешно переко­чевал в кон­текст про­цес­са допол­нений гос­тевой ОС. Пос­ледняя запись на скри­не сви­детель­ству­ет о том, что в 17:08:59 при оче­ред­ной попыт­ке вхо­да в сис­тему шелл был заново запущен. То есть, пока поль­зователь не заподоз­рил что‑то нелад­ное, наш зло­дей успел зак­репить­ся в сис­теме одним из извес­тных ему спо­собов.

Для инте­реса ищем инте­ресу­ющие нас шесть событий в тай­млай­не с «затер­тыми сле­дами» и вне­зап­но обна­ружи­ваем, что все шесть из шес­ти событий ока­зались на мес­те. It’s a trap!

Как минимум мы получи­ли внят­ные вре­мен­ные отрезки, в которые шло про­ник­новение в сис­тему, и можем теперь отоб­рать события за этот пери­од.

Теперь заново запус­тим psort, толь­ко в этот раз добавим филь­тром инте­ресу­ющие нас отрезки вре­мени. Не забывайте, что в дан­ном слу­чае мы филь­тру­ем с ука­зани­ем вре­мени в UTC.

py psort.py --output-time-zone Europe/Moscow --output-format dynamic -w d:\Work\!Статья\test_case_1_attack_time.csv -q d:\Work\\!Статья\test_case_1.plaso "date < '2021-08-25 14:20:00' and date > '2021-08-25 13:07:00'"

Ждем пару минут и смот­рим на резуль­тат.

Psort Plaso

Неп­лохо, мы сумели умень­шить физичес­кий объ­ем в 16 раз, а смыс­ловой в 20 раз (57 тысяч событий про­тив 1,1 мил­лиона).

Нем­ного пос­крол­лим этот файл.

Отчет таймлайн Plaso

Отчет системных событий в Plaso

На­чиная при­мер­но с записи под номером 1500 и до 30 000 мы наб­люда­ем одни и те же события. Такая кар­тина сви­детель­ству­ет о том, что наш про­тив­ник с исполь­зовани­ем авто­мати­чес­кого инс­тру­мен­та обхо­дил содер­жимое дис­ка в поис­ках чего‑то его инте­ресу­юще­го (под­сказ­ка: фай­лов с подс­тро­кой passw). Понимая при­роду этих событий, их мож­но скрыть из ана­лиза, тем самым сни­зив наг­рузку на себя любимо­го еще раза в два.

Даль­нейший ана­лиз сво­дит­ся к филь­тра­ции событий по катего­риям и вни­матель­ному ана­лизу их в цепоч­ках.

В качес­тве домаш­него задания можете поиг­рать­ся с пла­гином tagging для psort.

Заключение

В сле­дующий раз мы погово­рим о более высоко­уров­невых инс­тру­мен­тах ана­лиза тай­млай­нов, которые генери­рует Plaso.

Еще по теме: Анализ дампа памяти в Volatility

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *