Как установить и использовать Timesketch

Установка и использование Timesketch

В сегодняшней статье я покажу, как установить и использовать инструмент для совместного анализа таймлайнов — Timesketch. В качес­тве исходных дан­ных у нас будет файл Plaso, который мы получи­ли в прош­лой статье «Сбор и анализ системных событий с помощью Plaso».

Еще по теме: Форензик кейс взлома серверов под управлением Linux

Timesketch — это про­ект с открытым кодом, для сов­мес­тно­го ана­лиза тай­млай­нов событий. Под капотом у него раз­меща­ется крутой вось­мицилин­дро­вый elasticsearch (сокращено ES). Основные фишки: мас­шта­биру­емость, отка­зоус­той­чивость и высокая ско­рость при поис­ке сре­ди мил­лионов событий.

Установка Timesketch

Ус­тановить можем как ре­лиз­ный вари­ант, так и development-вер­сию. Второй вариант позволяет вно­сить свои прав­ки в код, а так­же добавлять све­жие ком­миты. Имейте ввиду. Второй вариант поможет нарваться на све­жие баги.

В нашем примере будем устанавливать релиз­ную вер­сию на вир­туал­ьную машину с Ubuntu и накинем свер­ху Kibana.

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

Копипастить коман­ды из офи­циаль­ной инс­трук­ции нет имеет смыс­ла, поэто­му будем счи­тать, что с уста­нов­кой Timesketch разобрались. После установки про­верим командой:

$ sudo docker ps -a

При правильной установке, увидим это:
Установка Timesketch
Те­перь откроем порт докер‑кон­тей­нера ES, что­бы до него мог­ла дос­тучать­ся Kibana.

$ sudo nano /opt/timesketch/docker-compose.yml

В раз­дел elasticsearch добавляем раз­дел ports с ука­зани­ем проб­расыва­емо­го пор­та.

Установка Timesketch

Данный кон­фиг под­ходит исключительно для сво­ей тес­товой вер­сии ES, доступа к которой нет не у кого. В ES не име­ется встро­енных механиз­мов авто­риза­ции, и каждый таком образом может запросто получить дос­туп к базе. Если понадо­бит­ся подобное решение в про­дак­шене, исполь­зуйте надс­трой­ку X-Pack.

Ос­талось накатить Kibana. В нашем  примере на скри­не выше можно увидеть, что в про­екте исполь­зует­ся elasticsearch-oss:7.10.2, поэтому, и Kibana обязана такой версии. Ска­чаем и устанавливаем kibana-oss:

$ wget https://artifacts.elastic.co/downloads/kibana/kibana-oss-7.10.2-linux-x86_64.tar.gz
$ tar -xzf kibana-oss-7.10.2-linux-x86_64.tar.gz
$ cd kibana-7.10.2-linux-x86_64

Исправим конфиг, что­бы достучаться до интерфей­са «Кибаны»:

$ nano config/kibana.yml

Для это­го надо раскоментировать параметр server.host и ука­зать IP-адрес виртуальной машины. Запускаем Kibana и проверяем, что все успешно стартануло.

$ /bin/kibana

Теперь создадим поль­зовате­лей — и мож­но залогинится в сис­тему.

$ sudo docker-compose exec timesketch-web tsctl add_user --username user1

Timesketch установить

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

Для начала соз­даем новый скетч (кноп­ка New investigation) и заливаем в него дан­ные, которые сге­нери­рова­ли в предыдуший раз (кноп­ка Upload timeline). В нашем примере было создано два скет­ча. Пос­ле недолго ожи­дания заг­лянем в Kibana, и в раз­деле dev tools выпол­ним коман­ду:

GET /_cat/indicies?v

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

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

Пос­мотрим, как дан­ные мап­пятся, что­бы понимать, как потом эффектив­но с ними работать

GET /9024dbca65494d1da2dc4758b169f1d9/_mapping

Все тек­сто­вые дан­ные мап­пятся по сле­дующей схе­ме:

{
    "type": "text",
    "fields" : {
        "keyword": {
            "type" : "keyword",
            "ignore_above" : 256
        }
    }
}

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

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

Да­вайте перехо­дить к осмотру паци­ента. Пос­мотрим, какие инс­тру­мен­ты у нас для это­го есть.

Explore

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

Пос­коль­ку каж­дый скетч — отдель­ный индекс в ES, мож­но не боять­ся пов­редить в ходе работы чужие ком­мента­рии или помет­ки в дру­гом скет­че. Это край­не важ­но в мно­гополь­зователь­ских forensic-сис­темах. Имен­но поэто­му в дан­ном про­екте при­меня­ется не самая логич­ная с виду сис­тема хра­нения дан­ных (с пов­торной заг­рузкой и дуб­лирова­нием хра­нимых дан­ных).

Да­вайте не будем пока что копать­ся в отдель­ных событи­ях, а поп­робу­ем визу­аль­но оце­нить наш скетч. Для это­го перед­винем пол­зунок chart в положе­ние «вкл» под стро­кой с зап­росом и пос­мотрим на пос­тро­енную диаг­рамму событий.

Использование Timesketch. Вкладка Explore

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

Использование Timesketch. Вкладка Explore

Timesketch использование. Вкладка Explore

Лю­бопыт­но! Мы бук­валь­но в два кли­ка сумели обна­ружить события из прош­лой статьи. Напом­ню: они сви­детель­ству­ют о том, что наш про­тив­ник с исполь­зовани­ем авто­мати­чес­кого инс­тру­мен­та обхо­дил содер­жимое дис­ка в поис­ках инте­рес­ных вещей.

Теперь сох­раним этот зап­рос, нажав кноп­ку Save this search, и поп­робу­ем понять, нашел ли зло­умыш­ленник то, что искал.

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

Теперь добавим к сущес­тву­юще­му вре­мен­ному филь­тру минут 5 свер­ху (хакеру нуж­но вре­мя, что­бы понять, какой файл ута­щить с ком­па), а в поис­ковой стро­ке напишем зап­рос:

*Documents* OR *Desktop* OR *Downloads*

На выходе име­ем 1266 событий. Гля­нем, какая под­робная информа­ция о выб­ранных событи­ях нам дос­тупна.

Timesketch использование. Вкладка Explore

Timesketch использование. Вкладка Explore

Од­но из клю­чевых полей каж­дого события — parser, оно поз­воля­ет понять, отку­да Plaso получил его. Удоб­но быва­ет отфиль­тро­вать в выводе тип событий, нажав на кноп­ку в пер­вом или вто­ром стол­бце (по смыс­лу это при­мене­ние логичес­ких И или НЕ в зап­росе).

Да­вайте это применим. Пос­коль­ку мы при­мер­но пред­став­ляем алго­ритм поис­ка инте­ресу­ющих фай­лов на фай­ловой сис­теме (кон­крет­но это: про­ход по всем катало­гам и под­катало­гам, получе­ние спис­ка фай­лов из них, получе­ние дос­тупа к инте­ресу­ющим фай­лам), мы можем попытать­ся понять, были ли какие‑то фай­лы похище­ны. Выберем из событий любое с парамет­ром parser:filestat и file_entry_type:directory и добавим их в филь­тр с парамет­рами AND и NOT.

Это будет экви­вален­тно такому зап­росу:

(*Documents* OR *Desktop* OR *Downloads*) AND parser:filestat AND NOT file_entry_type:directory

Timesketch использование. Вкладка Explore

Ву­аля! Перед нами 17 событий, сре­ди которых дос­туп к фай­лу с пароля­ми поль­зовате­ля my_passwords.rtf. Мож­но отправ­лять поль­зовате­ля менять все пароли от всех сер­висов.

Соб­ранные нами события не име­ют никако­го отно­шения к жур­налам, которые были ста­ратель­но зачище­ны коман­дой clearevиз Meterpreter.

В прош­лый раз навод­ку на инци­дент нам дал сам поль­зователь. А теперь мы без под­сказ­ки «зво­нок дру­гу» попыта­емся понять, какое непот­ребс­тво при­вело к тому, что зло­умыш­ленни­ку откры­лись две­ри к паролям поль­зовате­ля. Для это­го в Plaso есть пот­ряса­юще полез­ный пар­сер prefetch и соот­ветс­тву­ющий тип дан­ных:

data_type:windows:prefetch:execution

Prefetcher — один из ком­понен­тов Windows, пред­назна­чен­ный для опти­миза­ции запус­ка исполня­емых фай­лов в сис­теме. Для сво­ей работы он соз­дает спе­циаль­ные струк­туры дан­ных, которые хра­нит на дис­ке в катало­ге Windows\Prefetch. Нарав­не с ана­лизом логов, фай­лы prefectch — кла­дезь информа­ции для компьютерного кри­мина­лис­та.

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

data_type:windows:prefetch:execution AND NOT path_hints: "WINDOWS" OR NOT path_hints: "Program"

Timesketch как пользоваться. Вкладка Explore

Од­ним прос­тым зап­росом мы в пер­вых же 25 событи­ях уви­дели, что из пап­ки Downloads запус­кался файл с заман­чивым наз­вани­ем.

Aggregate

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

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

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

Как пользоваться Timesketch. Вкладка AggregateНажимаем на кноп­ку, получаем резуль­тат.

Как пользоваться Timesketch. Вкладка Aggregate

Дей­стви­тель­но, как мы и пред­полага­ли, основная мас­са отно­сит­ся к событи­ям, добытым из пар­сера filestat, то есть это события фай­ловой сис­темы, которые clearev зачищать не уме­ет. Пар­сер winreg/amcache остался в дан­ном слу­чае не у дел по при­чине того, что обра­зы были сня­ты в раз­ное вре­мя. Соот­ветс­твен­но, события, которые попада­ют в amcache.hve, прос­то перетер­лись более све­жими. Так что проб­лема в дан­ном слу­чае ско­рее в чис­тоте экспе­римен­та, чем в каких‑то чудо‑воз­можнос­тях Meterpreter.

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

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

Analyze

От­дель­но сто­ит обра­тить вни­мание на вклад­ку Analyze. Чего гре­ха таить, на самом деле боль­шинс­тво кей­сов начина­ется имен­но с нее. Timesketch пос­тавля­ется с боль­шим набором встро­енных ана­лиза­торов, исполь­зование которых поз­воля­ет авто­мати­чес­ки отме­тить тегами раз­ные груп­пы событий, которые бра­выми бой­цами DFIR уже дав­но зап­ротоко­лиро­ваны как явно сви­детель­ству­ющие о чем‑то необыч­ном, воз­можно тре­бующем вни­мания. Все ана­лиза­торы находят­ся в катало­ге /timesketch/lib/analyzers и написа­ны на Python. Сра­зу пос­ле уста­нов­ки вам дос­тупны ана­лиза­торы для:

  • ра­боты с поис­ковыми зап­росами, сде­лан­ными в бра­узе­ре (при­чем будет сра­зу вид­но, где, что и ког­да искал поль­зователь);
  • вы­явле­ния активнос­ти, не попада­ющей в обыч­ные часы работы поль­зовате­ля за ком­пом (которые тоже опре­деля­ется ста­тис­тичес­ки);
  • свя­зыва­ния пос­ледова­тель­нос­ти событий (нап­ример, могут быть свя­заны ска­чан­ные и запущен­ные исполня­емые фай­лы, ско­пиро­ван­ные и заар­хивиро­ван­ные для эксфиль­тра­ции фай­лы и тому подоб­ное);
  • по­иска сле­дов попыток зачис­тить логи;
  • ана­лиза под­клю­чений по RDP;
  • вы­явле­ния попыток брут­форса паролей.
Ре­зуль­таты работы ана­лиза­торов вы можете най­ти на вклад­ке Overview. Для это­го необ­ходимо нажать три вер­тикаль­ные точ­ки на инте­ресу­ющем вас тай­млай­не и выб­рать из выпада­юще­го спис­ка Analyzer.

Ес­ли понадо­бит­ся, вы и сами можете соз­дать новый ана­лиза­тор. Для про­вер­ки его работос­пособ­ности в катало­ге test_tools есть скрипт analyzer_run.py, которо­му для работы необ­ходимо подать на вход файл CSV с событи­ями и ваш hello_world_analyzer.py.

Пос­мотрим, чем поможет в нашем кей­се встро­енный ана­лиза­тор Chain linked events. Для это­го выберем наш тай­млайн, возь­мем соот­ветс­тву­ющий ана­лиза­тор и запус­тим про­цесс.

Как пользоваться Timesketch. Вкладка Analyze

Как пользоваться Timesketch. Вкладка Analyze

Для прос­мотра всех свя­зан­ных событий в стро­ке поис­ка необ­ходимо наб­рать зап­рос:

chains:*

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

Использование Timesketch. Вкладка Analyze

У каж­дой цепоч­ки событий есть собс­твен­ный иден­тифика­тор, который хра­нит­ся в ES в поле chains — соот­ветс­твен­но, мож­но искать необ­ходимые цепоч­ки по этим иден­тифика­торам.

Stories

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

По сути, Stories — это готовые фраг­менты будуще­го отче­та по резуль­татам ана­лиза тай­млай­на.

Выводы

Мы с вами поз­накоми­лись с весь­ма кру­тым инс­тру­мен­том, который поз­воля­ет прев­ратить скуч­ный ана­лиз фай­лов CSV в детек­тивное рас­сле­дова­ние. В сле­дующей статье мы рас­смот­рим новую тех­нологию Sigma, под­дер­жка которой бук­валь­но на днях появи­лась в Timesketch, научим­ся писать для нее пра­вила и поп­робу­ем, как в анек­доте, «зас­тавить всю эту хрень взле­теть».

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

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

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

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