Цифровой детектив. Используем Timesketch для работы с таймлайнами Plaso

Содержание статьи

  • Установка
  • Использование
  • Explore
  • Aggregate
  • Analyze
  • Stories
  • Выводы

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

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

Про­дук­тивнее и веселее решать задачи кол­лектив­но — для форен­зики это тоже впол­не спра­вед­ливо. Поэто­му homo forensicus воору­жены инс­тру­мен­тами кол­лектив­ной работы, и один из них — это Timesketch.

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

 

Установка

Ус­тановить ты можешь как ре­лиз­ный вари­ант, так и dev-вер­сию. Во вто­ром слу­чае появит­ся воз­можность вно­сить свои прав­ки в код, а так­же накаты­вать самые све­жие ком­миты. Но если нар­вешь­ся на све­жие баги — пеняй на себя и не забывай репор­тить их.

Мы пос­тавим релиз­ную вер­сию на вир­туал­ку с Ubuntu 20.04 и прик­рутим свер­ху Kibana.

info

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

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

$ sudo docker ps -a

Ес­ли все сде­лано пра­виль­но, вывод дол­жен быть при­мер­но сле­дующим.

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

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

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

warning

Эта кон­фигура­ция под­ходит толь­ко для сво­ей собс­твен­ной тес­товой вер­сии 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

 

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

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

GET /_cat/indicies?v

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

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

GET /9024dbca65494d1da2dc4758b169f1d9/_mapping

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

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

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

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

 

Explore

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

info

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

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

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

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

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

Источник: xakep.ru

Ответить

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