Работа с дампами памяти играет важную роль в расследовании киберинцидентов и киберпреступлений. Дамп памяти содержит ценную информацию о состоянии системы в момент инцидента или преступления, включая запущенные процессы, открытые файлы, сетевую активность и многое другое. Анализ дампа памяти позволяет идентифицировать вредоносное ПО, определить способы взлома, выявить цели и мотивы злоумышленников.
Умение работать с дампами памяти с помощью специализированных инструментов, таких как Volatility Framework, позволяет проводить глубокий анализ, восстановление данных и выявление следов деятельности злоумышленников. Этот процесс может быть ключевым для разгадывания сложных киберпреступлений, выявления уязвимостей в системах и улучшения безопасности информационных технологий.
Задание
Иван — Активист по защите окружающей среды. Он ненавидел идеологию Таноса из «Мстителей: Война бесконечности». Он очень плох в программировании, любил использовать слишком много переменных при написании любой программы. Один раз этот задира дал мне дамп памяти и попросил выяснить, что он делал, пока делал дамп.
Вводные слова
В большинстве CTF для начинающих всякий раз, когда нам предлагается задача по анализу памяти, у нас также есть описание, в котором даются определенные подсказки. Поначалу идентифицировать эти подсказки может быть довольно сложно, но становится легче, если вы продолжаете играть в все новые и новые CTF.
Подсказки, которые мы можем извлечь из задания:
- Активист по защите окружающей среды (поскольку это слово взято в кавычки)
- Иван ненавидит Таноса (возможно, бесполезно, но давайте посмотрим)
- Ваня плох в программировании и использовал слишком много переменных.
Выполнение
Мы будем анализировать файл дампа памяти (challenge.raw), используя Volatility 2.6, поскольку он лучше всего подходит для наших нужд. Все лабораторные работы могут быть решены с помощью Volatility 2.
Самое первое, что нужно знать каждому, прежде чем приступить к анализу дампа памяти, — это определить профиль, который мы собираемся использовать.
Профиль сообщает нам операционную систему сервера или компьютера, с которого был извлечен дамп. В Volatility есть встроенный плагин, который помогает нам определить профиль дампа.
Мы будем использовать плагин imageinfo.
$ volatility -f Challenge.raw imageinfo

Теперь, как вы можете видеть, volatility предоставляет множество рекомендаций относительно того, какой профиль вам следует использовать. В некоторых случаях все предложенные профили могут быть неверными. Чтобы помочь преодолеть это, вы можете использовать другой плагин под названием kdbgscan. Что касается этой задачи, использование kdbgscan не требуется.
Теперь, как аналитик-форензист, предположим вещи, которые мы хотели бы знать о системе во время анализа:
- Активные процессы;
- Команды, выполняемые в оболочке/терминале/командной строке;
- Скрытые процессы (если таковые имеются) или завершенные процессы;
- История браузера (это очень субъективно в зависимости от используемого сценария);
- и многое другое…
Теперь, чтобы составить список активных или запущенных процессов, мы воспользуемся помощью плагина pslist.
$ volatility -f Challenge.raw --profile=Win7SP1x86 pslist

Выполнение этой команды дает нам список процессов, которые были запущены, когда был получен дамп памяти. Выходные данные команды дают полностью отформатированное представление, которое включает имя, PID, PPID-идентификатор, потоки, дескрипторы, время запуска и т.д.
Посмотрев повнимательнее, мы замечаем некоторые процессы, которые требуют внимания.
- cmd.exe
- DumpIt.exe
- explorer.exe

- cmd.exe
- Это процесс, ответственный за командную строку. Извлечение содержимого из этого процесса может дать нам подробную информацию о том, какие команды были выполнены в системе
- DumpIt.exe
- Этот процесс был использован для получения дампа памяти системы.
- Explorer.exe
- Это проводник по файлам ОС.
Теперь, поскольку мы видели, что cmd.exe был запущен, давайте попробуем посмотреть, выполнялись ли какие-либо команды в командной строке/терминале.
Для этого мы используем плагин cmd scan.
$ volatility -f Challenge.raw --profile=Win7SP1x86 cmdscan

Как вы можете видеть из приведенного выше изображения, был выполнен файл python. Выполненная команда была:
C:\Python27\python.exe C:\Users\hello\Desktop\demon.py.txt
Следующим шагом будет проверка, отправил ли этот скрипт python какой-либо вывод в стандартный вывод. Для этого мы используем плагин consoles.
$ volatility -f Challenge.raw --profile=Win7SP1x86 consoles

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

Теперь, если вы помните, мы попытались извлечь некоторые подсказки из описания задачи. Первым было что-то со словосочетанием «окружающая среда». Теперь у нас есть определенные системные переменные, называемые переменными окружения, что и может является «средой».
Чтобы просмотреть переменные окружения в системе, используйте плагин envvars. Просматривая выходные данные, мы видим странную переменную с именем Thanos (вот и зацепка на вторую подсказку), значением переменной является xor и пароль.
$ volatility -f Challenge.raw --profile=Win7SP1x86 envars

Теперь у нас есть в общей сложности 3 вещи:
- Бессмысленный текст в результате реверса строки в шестнадцатеричном коде;
- Xor;
- Пароль;
Немного поразмыслив, мы понимаем, почему была предоставлена подсказка xor. Давайте попробуем расшифровать xor в нечитаемой полученной строке.
a = "335d366f5d6031767631707f".decode("hex")
for i in range(0, 255):
b = ""
for j in a:
b = b + chr(ord(j) ^ i)
print b
Существует всего 255 возможностей, и, если вы видите, третий вывод — это подозрительный текст 1_4m_b3tt3r}. Это выглядит как часть флага.
Ну, следующая часть — пароль. Используя volatility, мы можем извлечь хэши паролей NTLM с помощью плагина hashdump.
$ volatility -f Challenge.raw --profile=Win7SP1x86 hashdump

Теперь хэш пароля, который нам нужно расшифровать, равен 101da33f44e92c27835e64322d72e8b7. Используем онлайн-сайты для взлома хэшей NTLM.

Ну вот, у нас есть вторая половина флага. Объединение двух частей дает нам весь флаг.
