Содержание статьи
Сценарий в задании такой: сотрудник компании сообщил, что ему пришло электронное письмо с обновлением безопасности, он запустил вложение и после этого компьютер начал вести себя странно. Группа реагирования на инциденты получила дампы оперативной памяти с подозрительных машин. Наша задача — исследовать их, найти то самое письмо, выявить загруженные вредоносные программы и методы бокового перемещения по сети.
По результатам решения кейса необходимо ответить на ряд вопросов, но я покажу сам процесс решения и не буду озвучивать ответы. Ты можешь повторить все самостоятельно, чтобы лучше разобраться и закрепить материал.
Итак, загрузим файл архива с артефактами и приступим к их исследованию.
Используемые утилиты
- 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»

