Содержание статьи
Сценарий в задании такой: сотрудник компании сообщил, что ему пришло электронное письмо с обновлением безопасности, он запустил вложение и после этого компьютер начал вести себя странно. Группа реагирования на инциденты получила дампы оперативной памяти с подозрительных машин. Наша задача — исследовать их, найти то самое письмо, выявить загруженные вредоносные программы и методы бокового перемещения по сети.
По результатам решения кейса необходимо ответить на ряд вопросов, но я покажу сам процесс решения и не буду озвучивать ответы. Ты можешь повторить все самостоятельно, чтобы лучше разобраться и закрепить материал.
Итак, загрузим файл архива с артефактами и приступим к их исследованию.
Используемые утилиты
- Volatility Framework 2.6.1 — инструмент, реализованный на Python версии 2 и предназначенный для извлечения артефактов из образцов энергозависимой памяти.
- Bulk extractor — инструмент для извлечения структурированной информации, к примеру адресов электронной почты, URL, доменов.
- YARA Editor — программа для тестирования и создания правил YARA.
Используемые плагины Volatility2 для извлечения данных
- Imageinfo — плагин для определения операционной системы, пакета обновлений и аппаратной архитектуры исследуемого образа.
- Pstree — позволяет просматривать список процессов в виде дерева.
- Handles — показывает открытые дескрипторы к файлам, разделам реестра, мьютексам, именованным каналам, спрятанным в процессах. Также позволяет отобразить дескрипторы для конкретного процесса и конкретного типа объекта.
-
Consoles — плагин для поиска команд, которые злоумышленники ввели в окне
cmd.
. Основное его преимущество — плагин не только показывает введенные злоумышленниками команды, но и собирает весь экранный буфер (ввод и вывод).exe - Memdump — извлекает все резидентные страницы памяти в процессе.
-
Filescan — плагин для поиска объектов
FILE_OBJECT
в памяти с помощью сканирования тегов пула. Найдет все открытые файлы. - Dumpfiles — извлекает кешированные файлы из образа памяти.
- Netscan — ищет сетевые артефакты в 32- и 64-разрядных дампах памяти. Плагин находит конечные точки TCP, UDP, локальные и удаленные IP-адреса.
- Printkey — ищет значения в указанном разделе реестра Windows.
-
Userassist — позволяет получить информацию из ключа реестра
UserAssist
. - Mftparser — сканирует записи главной таблицы файлов (MFT) в памяти и выводит информацию о временных метках файлов.
-
Autoruns — подключаемый плагин, который ищет точки сохранения исполняемых файлов в системе. Для его подключения необходимо добавить плагин в каталог
plugins
инструмента volatility. - Malfind — плагин для поиска скрытого или внедренного в память процессов кода.
Распаковываем архив с заданием и получаем три файла, которые содержат образы памяти скомпрометированных хостов: Target1, Target2 и POS. Файлы имеют расширение .
, то есть представляют собой моментальные снимки виртуальной машины VMware. Если Volatility не может извлечь артефакты из этих файлов, можно воспользоваться плагином raw2dmp
, который преобразует дамп памяти приостановленной виртуальной машины VMware в формат, пригодный для анализа. Также можно воспользоваться инструментом vmss2core.
Исследование образов оперативной памяти можно разделить на два этапа: восстановление действий пользователя и поиск признаков вредоносной активности. На первом этапе необходимо проанализировать запущенные процессы, открытые документы, восстановить историю браузера. Эта информация поможет определить время компрометации системы, а также выяснить, какие действия пользователя привели к инциденту. А проанализировав активность злоумышленника, нужно найти использованные вредоносные модули, способ их закрепления в системе, а также обнаружить методы бокового перемещения по сети организации.
Исследование хоста Target1
Получим первичную информацию об исследуемой машине, выясним профиль операционной системы, сетевой адрес и имя хоста.
python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 imageinfo`
В ключе реестра SYSTEM\
содержится информация об имени компьютера.
python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 printkey -K "ControlSet001\Control\ComputerName\ComputerName"
Имя компьютера — FRONT-DESK-PC
.
Получим сетевой адрес хоста: в ключе реестра SYSTEM\
содержатся идентификаторы сетевых адаптеров, в одном из которых хранится информация о сети.
python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 printkey -K "ControlSet001\Services\Tcpip\Parameters\Interfaces\{9C3710A4-77FE-48CB-911B-742A81DE38BA}"
Профиль скомпрометированной машины Win7SP1x86_23418
, IP-адрес — 10.
, имя хоста — FRONT-DESK-PC
.
Начнем восстанавливать действия пользователя в системе. Первым делом получим информацию о запущенных процессах и сохраним ее в файл для удобства анализа.
python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 pstree > pstree.txt
Мы видим запущенный процесс OUTLOOK.
с идентификатором 3196
, в адресном пространстве которого содержится информация об электронных сообщениях и открытых файлах. Получим переписку авторизованного в Outlook пользователя. Для этого выгрузим все файлы данного процесса и проанализируем их: в дескрипторе открытого процесса с идентификатором 3196
найдем все объекты FILE
.
python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 handles -p 3196 -t FILE > handles_3196.txt
Мы обнаружили файл с расширением .
, который содержит кешированные (сохраненные в памяти системы) сообщения электронного почтового ящика пользователя. Попробуем восстановить этот файл, используя плагин dumpfiles
, но сначала нам необходимо узнать физический адрес данного файла в памяти. Запустим плагин filescan
, найдем интересующий нас файл и получим его физический адрес.
python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 handles -p 3196 -t FILE > filescan.txt
Адрес файла outlook2.
— 0x000000003ecec2b0
. Теперь можно восстановить сам файл. В параметре -Q
плагина dumpfiles указываем адрес файла, который нужно выгрузить.
python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 dumpfiles -Q 0x000000003ecec2b0 -D dumpfiles/
Я попробовал восстановить все файлы контейнера outlook, но они оказались пустыми. Воспользуемся другим методом выгрузки сообщений. Для этого получим дамп адресного пространства процесса OUTLOOK.
с помощью плагина memdump.
python2 vol.py -f c69-Grrcon2015/target1/Target1-1dd8701f.vmss --profile=Win7SP1x86_23418 memdump -p 3196 -D ./
Мы получили дамп адресного пространства, попробуем в нем найти сообщения. Откроем полученный файл в шестнадцатеричном редакторе и найдем строку From
, а также Content-Type
.
Проанализируем его заголовок: нас интересуют поля Subject
, From
и Received
.
info
Как анализировать заголовки электронных писем, рассказывается в одной из наших статей.
Письмо пришло от пользователя th3wh1t3r0s3@gmail.
и имело тему Обновите
. Поле Received
характеризует адрес отправителя, а также показывает, через какие узлы сообщение прошло.
Находим первое поле Received
и узнаем, что сообщение отправлено с IP-адреса 10.
. Как видно из содержимого, там присутствует ссылка http://
для загрузки файла AnyConnectInstaller.
.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»