Анализ дампа памяти с помощью Volatility

Анализ дампа оперативной памяти

Вы наверняка слышали про соревнования для хакеров и программисотв Capture The Flag (CTF). Одно из направлений таких соревнований — форензика (компьютерная криминалистика). В CTF теме форезники посвящены несколько групп: ана­лиз жес­тко­го дис­ка, анализ опе­ратив­ной памяти и изучение дам­пов тра­фика.

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

В этой статье мы поговорим об анализе дампа оперативной памяти и рассмотрим одну довольно интересную особенность GIMP.

Анализ дампа оперативной памяти

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

Как правило, для ана­лиза оперативной памяти используют нес­коль­ко при­ложе­ний: Volatility, Memoryze и Autopsy (в связ­ке с Volatility). Существуют и другие менее популярные инструменты, но в рамках этой статьи рассматривать их не будем.

Вы спросите а как же Autopsy? Конечно, это удобный инструмент, который может одним нажатием кнопки сделать комплексный анализ всего дампа. Но, если речь идет о соревнованиях, тогда важна скорость получения результатов, поэтому лучше использовать, что-то другое. Мы для анализа оперативной памяти будем исполь­зовать Volatility.

Перейдем к заданию. У нас есть дамп опе­ратив­ной памяти и хеш MD5 для его про­вер­ки.

Capture The Flag Remote Password Manager
Capture The Flag Remote Password Manager

Скачиваем образ памяти на компьютер. В моем случае Kali Linux.

$ wget https://ams3.digitaloceanspaces.com/justctf/69f7647d-2f7a-4604-b9f6-553c6bb447ee/challenge.tar.gz

Теперь распакуем слепок памяти:

$ tar -xzvf challenge.tar.gz

И сра­зу же про­верим, что с ним все в поряд­ке:

$ md5sum pub/challenge.vmem

Ес­ли хеш не сошел­ся с исходным хешем — при­дет­ся еще раз ска­чать архив.

Важно использовать последнюю версию Volatility. Чтобы не было проблем с профилями.  Если вы уже используете Volatility, я очень рекомен­дую обно­виться.

Определение профиля

Для начала надо опре­делить вер­сию ОС, с которой был снят дамп. Это мож­но сде­лать коман­дой imageinfo:

$ vol.py -f challenge.vmem imageinfo

Определение профиля Volatility

Обратите вни­мание на строч­ку с Suggested Profiles. Это указывает на версию дампа опе­ратив­ной памяти — Win10x64_18362. Теперь нужно ука­зать аргу­мент —profile Win10x64_18362 для пос­леду­ющих команд.

Если возникли какие-то непонятки с Volatility, тогда добро пожаловать Wiki.

Получение информацию о компьютере

Для начала надо искать информа­цию о:

  • про­цес­сах;
  • ис­тории бра­узе­ра;
  • ис­тории запущен­ных команд в кон­соли.

Этих 3 пун­ктов хва­тит для опре­деле­ния направления даль­нейшей раз­ведки.

Процессы

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

$ vol.py -f challenge.vmem --profile Win10x64_18362 pstree

Анализ дампа оперативной памяти. Процессы. pstree

Ни­чего бро­сающе­гося в гла­за, вро­де pswd_manager.exe или not_a_virus.exe, не вид­но, поэто­му про­дол­жим нашу раз­ведку.

История браузера

Хоть в хин­те (см. первый скрин) и говори­лось, что «уда­лен­ный» не обя­затель­но зна­чит «бра­узер», мы про­верим этот век­тор. В Volatility есть готовый пла­гин для прос­мотра исто­рии Internet Explorer — iehistory. И не говорите, что им уже ник­то не поль­зует­ся!

$ vol.py -f challenge.vmem --profile Win10x64_18362 iehistory

Анализ оперативной памяти. История браузера.

Ко­ман­да работа­ла слиш­ком дол­го на моей машине (поряд­ка 20 минут) и завер­шать­ся не пла­ниро­вала. Это не счи­тает­ся нор­маль­ным поведе­нием для Volatility, сле­дова­тель­но, тут искать нечего.

Ес­ли вы подума­ете сос­тавлять задач­ки для CTF — имейте в виду, что задачи, в которых надо по пол­часа бру­тить извра­щен­ные пароли или искать неуло­вимый API endpoint, ник­то не любит, и сле­дующую задачу вам доверят делать еще не ско­ро.

Список команд в консоли

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

$ vol.py -f challenge.vmem --profile Win10x6_18362 cmdscan

Анализ памяти. Список команд в консоли

Тут чис­то — сле­дова­тель­но, тер­минал тоже не при делах.

Полезный прием при анализе оперативной памяти

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

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

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

$ vol.py -f challenge.vmem --profile Win10x64_18362 screenshot -D shot/

Анализ RAM. Скрин­шот рабоче­го сто­ла

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

Проверка информации

В наз­вании задачи фигури­рует сло­во remote (уда­лен­ный) — давайте поп­робу­ем най­ти что‑то, что может вза­имо­дей­ство­вать с сетью.

Поп­робу­ем сно­ва про­верить все про­цес­сы, которые у нас фигури­руют в этом слеп­ке опе­ратив­ной памяти. Заметим сре­ди них mstsc.exe — Microsoft Terminal Services Client, или, в прос­тонародье, RDP-кли­ент.

RDP — это проп­риетар­ный про­токол для дос­тупа к уда­лен­ным рабочим сто­лам. Для нас важ­но то, что про­токол пре­дус­матри­вает переда­чу кар­тинки по кад­рам в виде сжа­тых бит­мапов, которые раз­жима­ются и отоб­ража­ются, а в это вре­мя хра­нят­ся в памяти.

Воз­можно, в этом про­цес­се мы смо­жем най­ти флаг. Най­дем его PID, что­бы мы мог­ли сдам­пить память про­цес­са:

$ vol.py -f challenge.vmem --profile Win10x64_18362 pslist | grep mstsc.exe

Форензика оперативная память. Проверка информации

Но­мер про­цес­са — 6484.

Дамп памяти

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

$ vol.py -f challenge.vmem --profile Win10x64_18362 memdump -p 6484 -D data

Форензика дамп памяти

Извлечение картинок из дампа памяти

На­поми­наю, что mstsc.exe (да и дру­гие RDP-кли­енты тоже) получа­ют кар­тинку, которую хра­нят у себя где‑то в опе­ратив­ной памяти. Бла­года­ря этой осо­бен­ности мы можем поп­робовать извлечь кар­тинку из это­го дам­па про­цес­са.

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

Подобный трюк мож­но при­менять не толь­ко для про­цес­са mstsc.exe, но и на про­цес­сы вро­де mspaint.exe, virtualbox.exe и дру­гие, которые работа­ют при­мер­но по такому же прин­ципу. Для под­бора сме­щения рас­чехля­ем гра­фичес­кий редак­тор GIMP. Как про­читать кар­тинку, если она начина­ется не в начале фай­ла? Да зап­росто!

Нуж­но открыть дамп про­цес­са как Raw Image Data, то есть как сырую кар­тинку, ина­че мы не смо­жем под­бирать сме­щение.

Извлечение картинок из дампа памяти

Даль­ше появ­ляет­ся окош­ко, где мы можем выбирать сме­щение.

Извлечение картинок из дампа памяти

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

Под­кру­тим еще нем­ного и скор­ректи­руем раз­мер по ширине.

Capture The Flag Форензика

А вот и флаг!

Заключение

Пе­ред решени­ем любых задач не забывайте обновлять исполь­зуемые ути­литы! Не обно­вив ути­литу или неп­равиль­но про­читав докумен­тацию к ней, мож­но попасть в rabbit hole и не сдать задачу вов­ремя. А как мы зна­ем, не быва­ет поз­дно, быва­ет уже не надо.

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

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

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

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