Volatility как пользоваться windows
Использование волатильности для криминалистического анализа внутреннего доступа Windows (1): первый опыт
Введение
Следуя вышеизложенному, как упоминалось выше при использовании песочницы с кукушкой, при анализе вредоносного кода сначала используйте песочницу для грубого анализа, а затем целевая программа может быть динамически проанализирована (OD, отладка Windbg) или статический анализ (статическая антивирусная защита IDA). Компиляция). Если вам сложно каждый раз выполнять обратное преобразование, вы также можете использовать такие фреймворки, как Volatility, для проведения криминалистического анализа памяти. Volatility - это очень мощный инструмент для криминалистической экспертизы памяти, разработанный сотнями известных экспертов по безопасности со всего мира. Набор инструментов, которые можно использовать для сертификатов доступа в windows, linux, mac osx, android и других системах, давайте вместе испытаем его.
установка
Загрузите последнюю версию фреймворка:
Исполняемый файл может быть запущен непосредственно в соответствующей операционной системе, но автор предпочитает пакет с исходным кодом, поскольку фреймворк написан на языке Python, а код реализации каждой функции можно легко просмотреть через пакет с исходным кодом.
Использование пакетов исходного кода под windows:
Если вы хотите установить исходный код Volatility, вы можете переключиться в основной каталог исходного пакета Volatility в командной строке, а затем выполнить команду установки:
Если вы не хотите устанавливать исходный пакет, вы также можете напрямую выполнить следующую команду:
Если не должно быть никаких аварий, будет выдана следующая ошибка из-за отсутствия двух вспомогательных пакетов, pycrypto и distorm.
Давайте работать вместе, чтобы решить указанную выше ошибку.
Сначала установите пакет distorm, разархивируйте его и перейдите в корневой каталог distorm в командной строке, выполните команду установки:
Сообщалось об ошибке. Это связано с тем, что установка на экспериментальной машине автора - vs2010. По умолчанию в исходном коде указан компилятор vs2008, поэтому я не знаю его здесь. Мы можем открыть консоль Visual Studio 2010,
Затем введите следующую команду:
Затем перейдите в корневой каталог пакета distorm и выполните команду установки:
Это означает, что пакет успешно установлен.
Затем установите пакет pycrypto. Как указано выше, используйте консоль Visual Studio 2010 для установки переменных среды, перейдите в корневой каталог пакета pycrypto и затем выполните команду установки:
Здесь сообщается об ошибке. Первые несколько предупреждений можно игнорировать. Последнюю ошибку необходимо устранить, иначе она не может продолжаться:
Автор погуглил и обнаружил, что некоторые пользователи сети сталкивались с подобными проблемами раньше, но, похоже, они были решены.
На самом деле, это не так уж и сложно. Детскую обувь с небольшой базой на языке C. должно быть легко решить. Сначала используйте текстовый редактор, чтобы открыть файл заголовка ошибки tomcrypt_cipher.h, а затем найдите строку с ошибкой.
Язык C определяет массив, чтобы указать четкий размер массива, здесь остается пустым, поэтому сообщается об ошибке. Здесь мы пытаемся заполнить квадратные скобки 1. Затем установка по-прежнему сообщает об ошибке. Поэтому автор затем поискал крест имени cipher_descriptor [] Цитируя, я обнаружил, что это имя нигде не цитируется, поэтому вы можете посмотреть его здесь:
Затем выполните команду установки:
Обнаружил, что установка прошла успешно.
Затем, чтобы запустить Volatility, давайте проверим меню помощи:
Вы видите, что операция прошла успешно.
Что ж, здесь представлен пакет исходного кода под окнами, потому что окно консоли под окнами выглядит неудобно, автор немного навязчиво-компульсивен, поэтому автор сосредотачивается на использовании под linux.
Использование пакета исходного кода под linux (kali):
Пакеты зависимостей Kali в основном доступны, переключитесь в корневой каталог Volatility прямо под оболочкой, а затем проверьте справочную информацию.
Выглядит намного круче, чем консоль под окнами.
Создать файл дампа памяти
Поскольку Volatility анализирует файлы дампа памяти, нам необходимо захватить дампы памяти системы, которая подозревается в атаке.Существует три основных метода захвата дампа памяти.
Используйте песочницу для создания файлов памяти
Во-первых, нам нужно изменить два файла конфигурации cuckoo.conf и report.conf, чтобы включить возможность создания дампов памяти.
Затем сохраните и отправьте вредоносный образец в песочницу с кукушкой.
После завершения анализа файл дампа памяти можно будет найти в каталоге соответствующего отчета.
Использование VMware для создания функций дампа памяти
Приостановите систему виртуальной машины, а затем найдите * .vmem в соответствующем каталоге, например:
Используйте стороннее программное обеспечение для получения дампа памяти
На физических машинах для получения дампов памяти обычно можно использовать следующие инструменты:
Правила грамматики волатильности
Просмотр справки
Используйте -h или --help, чтобы перечислить все доступные параметры и плагины
Результаты приведены ниже:
Вышеупомянутые профили очень важны для криминалистики памяти Windows. Обычно нам необходимо установить эту опцию.
Чтобы понять значение этой опции, нам сначала нужно взглянуть на новый термин - VTypes.
VTypes
Это язык для определения и анализа структур данных в среде Volatility. Большая часть нижнего уровня операционной системы написана на языке C, и большое количество структур данных используется для организации связанных переменных и атрибутов и управления ими. Поскольку Volatility написана на Python, Итак, нам нужен способ представления структуры данных языка C в исходном файле Python. Для этого используется VTypes.
Язык C определяет следующую структуру данных:
Использование языка VType для выражения вышеуказанной структуры выглядит следующим образом:
Чтобы понять приведенные выше определения, вам необходимо понимать базовый синтаксис Python, например: строки, словари, пары ключ-значение, списки, кортежи, наборы.
Во-первых, процесс имени структуры является первым ключом словаря, а следующее значение соответствует списку, 26 представляет размер структуры. Затем все элементы структуры являются кортежем,
Он содержит имя члена, затем смещение члена в структуре, а затем тип члена.
Такие обозначения можно увидеть везде в Volatility, например, в ключевой структуре данных ядра _EPROCESS окон:
Профили
Профиль - это набор VTypes, объединений и типов объектов в конкретной версии операционной системы и аппаратной архитектуре (x86, x64, ARM). Помимо этих компонентов, профиль также включает следующее:
Метаданные: название операционной системы (например: «windows», «mac», «linux»), версия ядра и номер компиляции.
Информация о системном вызове: индекс и имя системного вызова
Постоянное значение: глобальная переменная - глобальная переменная, которую можно найти по жестко заданному адресу в некоторых операционных системах.
Отображение системы: адреса ключевых глобальных переменных и функций (только для Linux и Mac)
Каждый профиль (файл конфигурации) имеет уникальное имя, которое обычно состоит из имени, версии, пакета обновления, системной структуры и другой информации об операционной системе. Например: Win7SP1x64 - это имя файла конфигурации 64-разрядной системы Windows 7 SP1.
Мы используем параметр --info, чтобы увидеть, какие значения профиля поддерживает Volatility.
Мы можем видеть из xp-win 10. Почему вы хотите установить параметр файла конфигурации, потому что разные версии операционной системы, элементы структуры данных ядра и смещения могут изменяться.
Общий формат команды
Как определить значение профиля файла дампа памяти
Если мы не указываем параметр --profile, по умолчанию используется WinXPSP2x86.
Мы можем использовать плагин imageinfo, чтобы угадать значение профиля файла дампа.
Мы можем заметить, что есть несколько значений профиля на выбор. Поскольку многие функции этих операционных систем схожи. Плагин imageinfo угадывает функцию значения профиля на основе функции плагина kdbgscan. А плагин kdbgscan через Найдите и проанализируйте характеристики блока данных отладчика ядра (_KDDEBUGGER_DATA64), чтобы угадать значение профиля.
Структура данных отладчика находится в модуле ядра NT (nt! KdDebuggerDataBlock). Она содержит скомпилированную строку, например: 3790.srv03_sp2_rtm.070216-1710, числовое значение указывает старший и дополнительный номера версий и номера пакетов обновления целевой операционной системы.
Плагин kdbgscan сканирует значение профиля файла дампа.
Вы можете видеть, что есть несколько результатов. В общем, первый результат правильный. Два плагина imageinfo и kdbgscan применимы только к файлу дампа памяти системы Windows. В Linux и Mac есть другие методы для определения правильного значения профиля.
Теперь мы можем указать значение параметра профиля.
Подключаемый модуль volshell используется для входа в эксклюзивную оболочку Volatility. В этой оболочке вы можете использовать команду dt («имя структуры данных ключа ядра») для просмотра определения структуры данных ключа ядра операционной системы.
Похоже ли это на команду dt в windbg?
Перечислить процесс
Если в столбце «Выход» отображаются дата и время, это означает, что процесс завершен. Но команда pslist не может отобразить скрытый процесс. Позже я расскажу, как просмотреть скрытый процесс.
подводить итоги
Volatility - это очень мощный фреймворк криминалистического анализа памяти, который также можно использовать для изучения архитектуры ядра конкретной операционной системы. Некоторые детские ботинки могут сказать, что инструменты AntiRootkit можно использовать для судебного анализа окон, например Xuetr (PcHunter), PowerTool, Но этот вид AntiRootkit обычно реализуется путем загрузки драйвера ядра, и он обычно не является открытым исходным кодом.Если вы хотите выяснить принцип его реализации, выполнение обратного анализа занимает много времени.
Volatility как раз наоборот. Он не требует загрузки драйверов, написан на языке Python и имеет открытый исходный код. Вам необходимо понимать реализацию определенных функций. Вы можете самостоятельно просмотреть исходный код, чтобы изучить и изучить, и он поддерживает Windows, Linux, Mac OS X, Android, что положительно для улучшения. , Возможность обратного анализа имеет большое преимущество. Сотни экспертов по безопасности по всему миру усердно работали над созданием. И с помощью этого инструмента вам не нужно открывать windbg для отладки на двух машинах или локальной отладки ядра, когда вы хотите просмотреть определение структуры данных ядра Windows Эту же функцию можно выполнить, выполнив команду dt в эксклюзивной оболочке Volatility. Позже автор предоставит другой практический контент, использующий Volatility для анализа вредоносного кода Windows.
Отличительным признаком современного мира является стремительное развитие информационного общества, проявление и широкое распространение технологий мультимедиа, электронных информационных ресурсов, сетевых технологий. Применение информационных технологий требует повышенного внимания к вопросам информационной безопасности.
Информационная безопасность – это защищённость информации и поддерживающей инфраструктуры от случайных или преднамеренных воздействий естественного или искусственного характера, которые могут нанести неприемлемый ущерб субъектам информационных отношений [1].
В настоящее время выделяются различные направления деятельности по обеспечению информационной безопасности: составление модели угроз и нарушителей ИБ; оценка рисков нарушений ИБ; внедрение и совершенствование защитных мер; создание службы ИБ; менеджмент ИБ; менеджмент инцидентов ИБ; защита персональных данных и другие.
Вопрос менеджмента инцидентов информационной безопасности является достаточно актуальным. Именно во время расследования и реагирования на инцидент проявляются конкретные уязвимости информационной системы, обнаруживаются следы атак и вторжений, проверяется работа защитных механизмов, качество архитектуры системы ИБ и ее управления.
Целью работы является анализ тестовой операционной системы посредством применения возможностей инструмента Volatility Framework.
Инцидент информационной безопасности – одно или серия нежелательных или неожиданных событий в системе информационной безопасности, которые имеют большой шанс скомпрометировать деловые операции и поставить под угрозу защиту информации [2].
Volatility Framework – программа для исследования копий (образов) оперативной памяти. Фрэймворк с полностью открытым кодом, представляющий собой набор Python – инструментов для извлечения цифровых артефактов из энергонезависимой памяти (RAM). Эта утилита может быть полезна при расследовании инцидентов информационной безопасности или просто при исследовании работы программы с критичными данными.
Самой последней версией Volatility Framework является версия 2.5, выпущенная в октябре 2015 года. Более поздние версии также доступны в разделе Releases на официальном сайте Volatility Framework [3]. Некоторые параметры командной строки, опции и плагины могут незначительно отличаться от версии к версии. С полным списком команд Volatility Framework можно ознакомиться в [4].
Volatility Framework распространяется как в виде открытого исходного кода, так и в виде исполняемого файла (только для Windows).
На сегодняшний день программа поддерживает следующие платформы: Windows, Linux, OS X. Volatility Framework является одним из самых многофункциональных пакетов для исследования памяти. В его возможности входит извлечение информации о: списке запущенных процессов; списке открытых сетевых соединений; списке открытых сетевых сокетов; списке загруженных динамических библиотек (DLL) для каждого процесса; именах открытых файлов для каждого процесса; адресуемую память; открытых записей реестра; извлечение образов процессов.
Как было описано выше, целью данной работы является анализ тестовой операционной системы посредством применения возможностей инструмента Volatility Framework.
Результаты работы и их анализ
В ходе выполнения работы была получена первичная информация об образе памяти, представленная на рис. 1.
Рис. 1. Первичная информация о тестовом образе памяти
Анализ первичной информации позволяет выяснить дату и время получения данного образа памяти, а также тип операционной системы: Windows XP Service Pack 3 (x86).
В первую очередь, после получения первичной общей информации об образе памяти, был проанализирован список процессов:
--profile=WinXPSP3x86 -f C:\Users\ДНС\Desktop\volatility_2.5.win.standalone\tas
Volatility Foundation Volatility Framework 2.5
Offset(V) Name PID PPID Thds Hnds Sess Wow64 Star
0x823c8830 System 4 0 59 403 ------ 0
0x820df020 smss.exe 376 4 3 19 ------ 0 2010
-10-29 17:08:53 UTC+0000
0x821a2da0 csrss.exe 600 376 11 395 0 0 2010
-10-29 17:08:54 UTC+0000
0x81da5650 winlogon.exe 624 376 19 570 0 0 2010
-10-29 17:08:54 UTC+0000
0x82073020 services.exe 668 624 21 431 0 0 2010
-10-29 17:08:54 UTC+0000
0x81e70020 lsass.exe 680 624 19 342 0 0 2010
-10-29 17:08:54 UTC+0000
0x823315d8 vmacthlp.exe 844 668 1 25 0 0 2010
-10-29 17:08:55 UTC+0000
0x81db8da0 svchost.exe 856 668 17 193 0 0 2010
-10-29 17:08:55 UTC+0000
0x81e61da0 svchost.exe 940 668 13 312 0 0 2010
-10-29 17:08:55 UTC+0000
0x822843e8 svchost.exe 1032 668 61 1169 0 0 2010
-10-29 17:08:55 UTC+0000
0x81e18b28 svchost.exe 1080 668 5 80 0 0 2010
-10-29 17:08:55 UTC+0000
0x81ff7020 svchost.exe 1200 668 14 197 0 0 2010
-10-29 17:08:55 UTC+0000
0x81fee8b0 spoolsv.exe 1412 668 10 118 0 0 2010
-10-29 17:08:56 UTC+0000
0x81e0eda0 jqs.exe 1580 668 5 148 0 0 2010
-10-29 17:09:05 UTC+0000
0x81fe52d0 vmtoolsd.exe 1664 668 5 284 0 0 2010
-10-29 17:09:05 UTC+0000
0x821a0568 VMUpgradeHelper 1816 668 3 96 0 0 2010
-10-29 17:09:08 UTC+0000
0x8205ada0 alg.exe 188 668 6 107 0 0 2010
-10-29 17:09:09 UTC+0000
0x820ec7e8 explorer.exe 1196 1728 16 582 0 0 2010
-10-29 17:11:49 UTC+0000
0x820ecc10 wscntfy.exe 2040 1032 1 28 0 0 2010
-10-29 17:11:49 UTC+0000
0x81e86978 TSVNCache.exe 324 1196 7 54 0 0 2010
-10-29 17:11:49 UTC+0000
0x81fc5da0 VMwareTray.exe 1912 1196 1 50 0 0 2010
-10-29 17:11:50 UTC+0000
0x81e6b660 VMwareUser.exe 1356 1196 9 251 0 0 2010
-10-29 17:11:50 UTC+0000
0x8210d478 jusched.exe 1712 1196 1 26 0 0 2010
-10-29 17:11:50 UTC+0000
0x82279998 imapi.exe 756 668 4 116 0 0 2010
-10-29 17:11:54 UTC+0000
0x822b9a10 wuauclt.exe 976 1032 3 133 0 0 2010
-10-29 17:12:03 UTC+0000
0x81c543a0 Procmon.exe 660 1196 13 189 0 0 2011
-06-03 04:25:56 UTC+0000
0x81fa5390 wmiprvse.exe 1872 856 5 134 0 0 2011
-06-03 04:25:58 UTC+0000
0x81c498c8 lsass.exe 868 668 2 23 0 0 2011
-06-03 04:26:55 UTC+0000
0x81c47c00 lsass.exe 1928 668 4 65 0 0 2011
-06-03 04:26:55 UTC+0000
0x81c0cda0 cmd.exe 968 1664 0 -------- 0 0 2011
-06-03 04:31:35 UTC+0000 2011-06-03 04:31:36 UTC+0000
0x81f14938 ipconfig.exe 304 968 0 -------- 0 0 2011
-06-03 04:31:35 UTC+0000 2011-06-03 04:31:36 UTC+0000
Полученный список процессов был проанализирован. Большинство из процессов являются системными, остальные связаны с работой программы VMware. В сети Интернет выполнен поиск описания по каждому из процессов. В ходе анализа была найдена информация о том, что один из процессов lsass.exe – необходимый системный процесс, отвечающий за работу локального сервера проверки подлинности, политику безопасности и авторизацию пользователей. Взаимодействует со службой Winlogon. Однако, lsass.exe может также быть процессом, известным как троянский вирус. Эта троянская программа позволяет злоумышленникам получать доступ к вашему ПК, похищать пароли и персональные данные. Под именем lsass.exe известен также downloader – программа, загружающая данные (в том числе вирусы) из Интернета на ПК пользователя без их ведома [5].
В ходе более детального исследования процесса lsass.exe было отмечен его неоднократный старт, причем с ощутимой разницей во времени старта. Более того, процесс lsass.exe находится в числе «первых» загружаемых при загрузке. В силу этого значение идентификатора этого процесса является небольшим. Однако подозрительные процессы с PID = 868 и PID = 1928 имеют более высокое значение идентификатора, нежели процесс с PID = 680.
Также можно заметить, что процесс с PID = 680 был порожден процессом с PID = 624 (а именно, процессом winlogon.exe). Это является правильным поведением процесса lsass.exe, так как он взаимодействует со службой Winlogon. В случае процессов с PID = 1928 и PID = 868 такого взаимодействия не наблюдается. В этом можно наглядно убедиться, построив дерево процессов:
--profile=WinXPSP3x86 -f C:\Users\ДНС\Desktop\volatility_2.5.win.standalone\tas
Volatility Foundation Volatility Framework 2.5
Name Pid PPid Thds Hnds T
.. 0x81da5650:winlogon.exe 624 376 19 570 2
010-10-29 17:08:54 UTC+0000
. 0x82073020:services.exe 668 624 21 431 2
010-10-29 17:08:54 UTC+0000
. 0x81c47c00:lsass.exe 1928 668 4 65 2
011-06-03 04:26:55 UTC+0000
. 0x81c498c8:lsass.exe 868 668 2 23 2
011-06-03 04:26:55 UTC+0000
. 0x81e70020:lsass.exe 680 624 19 342 2
010-10-29 17:08:54 UTC+0000
В ходе дальнейшего исследования были проанализированы список открытых сетевых соединений и список открытых сетевых сокетов. Было установлено, что на момент получения образа памяти никаких сетевых соединений не было установлено (рис. 2).
Рис. 2. Список открытых сетевых соединений
Анализ списка открытых сетевых сокетов (рис. 3) дает еще одно основание полагать, что процесс с PID = 680 является безопасным процессом с характерным для него поведением. Дело в том, что назначение процесса lsass.exe предполагает, как правило прослушивание портов (в данном случае, это порты 500 и 4500. В то же время, анализ сокетов дает еще один аргумент в пользу подозрительности процессов с PID = 868 и PID = 1928.
Рис. 3. Список открытых сетевых сокетов
Затем для каждого из процессов с PID = 680, 868, 1928 был получен список загруженных библиотек. Их анализ позволил выявить небольшое количество DLL для подозрительных процессов с PID = 868, 1928 по сравнению с PID = 680 (в четыре и два раза меньшее количество DLL соответственно). Ниже представлен список DLL для процесса с PID = 868:
--profile=WinXPSP3x86 -f C:\Users\ДНС\Desktop\volatility_2.5.win.standalone\tas
k3.vmem dlllist -p 868
Volatility Foundation Volatility Framework 2.5
lsass.exe pid: 868
Command line : «C:\WINDOWS\\system32\\lsass.exe»
Base Size LoadCount Path
0x01000000 0x6000 0xffff C:\WINDOWS\system32\lsass.exe
0x7c900000 0xaf000 0xffff C:\WINDOWS\system32\ntdll.dll
0x7c800000 0xf6000 0xffff C:\WINDOWS\system32\kernel32.dll
0x77dd0000 0x9b000 0xffff C:\WINDOWS\system32\ADVAPI32.dll
0x77e70000 0x92000 0xffff C:\WINDOWS\system32\RPCRT4.dll
0x77fe0000 0x11000 0xffff C:\WINDOWS\system32\Secur32.dll
0x7e410000 0x91000 0xffff C:\WINDOWS\system32\USER32.dll
0x77f10000 0x49000 0xffff C:\WINDOWS\system32\GDI32.dll
Далее, используя ключ –malfind, был выполнен поиск скрытых DLL для подозрительных процессов. Для подозрительных процессов были получены Crash Dump Files:
--profile=WinXPSP3x86 -f C:\Users\ДНС\Desktop\volatility_2.5.win.standalone\tas
k3.vmem malfind -p 868 -D C:\Users\ДНС\Desktop\volatility_2.5.win.standalone\Але
Volatility Foundation Volatility Framework 2.5
Process: lsass.exe Pid: 868 Address: 0x80000
Vad Tag: Vad Protection: PAGE_EXECUTE_READWRITE
Flags: Protection: 6
0x00080000 4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00 MZ.
0x00080010 b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 . @.
0x00080020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .
0x00080030 00 00 00 00 00 00 00 00 00 00 00 00 08 01 00 00 .
Для дальнейшего анализа файлы были загружены на VirusTotal. Каждый из файлов был распознан большинством антивирусов как троянская программа – Stuxnet (рис. 4).
Рис. 4. Результат анализа файлов
Затем был проанализирован список драйверов (рис. 5) с помощью команды modscan (позволяет получить список ранее выгруженных драйверов и драйверов, которые были скрыты). Попытка поиска в сети Интернет имени первого же драйвера из списка принесла результат: Первая модификация червя Stuxnet, созданная в 2009 году, использовала только один файл драйвера – mrxcls.sys, – и в нем отсутствовала цифровая подпись. В 2010 году авторы создали второй драйвер mrxnet.sys (его целью было сокрытие файлов червя на USB-дисках) и снабдили mrxnet.sys и драйвер mrxcls.sys цифровыми сертификатами компании Realtek [6].
Рис. 5. Список драйверов
В ходе проведенного исследования тестового образа памяти Task3.vmem было обнаружено действие вредоносной троянской программы – Stuxnet. Win32/Stuxnet – компьютерный червь, поражающий компьютеры под управлением операционной системы Microsoft Windows. Данный вирус использует четыре уязвимости системы Microsoft Windows (уязвимость «нулевого дня» (zero-day) и три ранее неизвестные уязвимости), позволяющие ему распространяться при помощи USB-flash накопителей.
В ходе работы установлено, что червь установил в систему два драйвера, один из которых является драйвером-фильтром файловой системы, скрывающим наличие компонентов вредоносной программы на съемном носителе. Второй драйвер используется для внедрения зашифрованной динамической библиотеки в системные процессы и содержит в себе специализированное ПО для выполнения основной задачи. Драйверы, которые троян устанавливает в систему, снабжены цифровыми подписями, украденными у производителей легального программного обеспечения. Злоумышленники используют цифровую подпись для «тихой» установки драйверов руткита в целевую систему. В системах безопасности многих производителей файлы, подписанные известными фирмами, заведомо считаются безопасными, и наличие подписи дает возможность беспрепятственно, не выдавая себя, производить действия в системе. Кроме того, червь располагает механизмами контроля количества заражений, самоликвидации и дистанционного управления.
Подводя итог, стоит отметить, что управление инцидентами информационной безопасности является важной частью системы ИБ в любой современной организации. В связи с этим, велика роль инструментов и средств расследования инцидентов информационной безопасности.
Блог творческого ИТ-практика. Возьми свою мысль и дай ей ускорение идеи. В моем фокусе: сети, безопасность, виртуализация, web, мультимедиа.
А А Saturday, 7 August 2021
Анализ дампа памяти фреймворком Volatility.
Криминалистический анализ дампов памяти - метод исследования, который включает в себя поиск и извлечение криминалистических артефактов из физической памяти компьютера (ОЗУ). В памяти компьютера хранится ценная информация о состоянии системы во время выполнения. Создание дампа памяти и его анализ дадут необходимую для расследования информацию, например о том, какие приложения работают в системе, к каким объектам (файлу, реестру и т. д.) эти приложения обращаются, сведения об актив ных сетевых соединениях, загруженных модулях, загруженных драйверах ядра и другую информацию. По этой причине криминалистический анализ дампов памяти используется при реагировании на компьютерные инциденты и анализе вредоносных программ.
В большинстве случаев вы можете сделать дамп памяти виртуальной машины, приостановив ее. Например, после выполнения образца вредоносного ПО на рабочей станции VMware вы можете приостановить виртуальную машину, которая запишет гостевую память (RAM) в файл с расширением .vmem на диске главного компьютера. В случае с такими приложениями, как VirtualBox, когда дамп памяти нельзя сделать путем приостановки, вы можете использовать утилиту типа DumpIt на гостевом компьютере.
После того как вы сделали дамп памяти зараженной системы, следующим шагом является анализ полученного образа. Volatility представляет собой лучший фреймворк для компьютерной криминалистики с открытым исходным кодом, написанный на Python, позволяющий анализировать и извлекать цифровые артефакты из образа памяти. Volatility может работать на различных платформах (Windows, macOS и Linux). Он поддерживает анализ памяти из 32-разрядных и 64-разрядных версий Windows, MacOS и операционной системы Linux.
Volatility состоит из ряда плагинов, которые могут извлекать различную информацию из образа памяти. Команда volatility-2.4.standalone.exe -h отображает поддерживаемые плагины.
Вы можете не знать, какой профиль использовать для вашего дампа. В этом случае вы можете использовать плагин imageinfo, который определит правильный профиль. Следующая команда отображает несколько профилей, предлагаемых плагином imageinfo. Вы можете использовать любой из предложенных фреймворком:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" imageinfo
Следующая команда использует плагин pslist для вывода списка запущенных процессов из образа памяти, полученного из Windows ХР (32-разрядная версия) с пакетом обновления 3:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 pslist --output-file=process.txt
Вывод по процессу с PID 684:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 pslist -p 684
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 psscan -v
При изучении процессов может быть полезно определить родительские/дочерние связи между процессами. В ходе исследования вредоносных программ это поможет вам понять, какие еще процессы связаны с вредоносным процессом. Плагин pstree отображает связи родительских и дочерних процессов, используя выходные данные из pslist и форматируя их в виде дерева. В следующем примере при запуске плагина pstree для зараженного образа памяти отображается связь процессов; дочерний процесс имеет отступ вправо и начинается с периодов:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 pstree --output-file=prctree.txt
Злоумышленник может установить драйвер ядра для запуска в пространстве ядра и изменить теги пула или любое другое поле в _POOL_HEADER. Изменяя тег пула, злоумышленник может помешать правильной работе плагинов, которые полагаются на сканирование тегов пула. Другими словами, изменяя тег пула, можно скрыть процесс от psscan. Чтобы преодолеть эту проблему, плагин psxview использует извлечение информации о процессе из разных источников. Он перечисляет процесс семи разными способами. Сравнивая выходные данные из разных источников, можно обнаружить несоответствия, вызванные вредоносным ПО. На следующем скриншоте psxview перечисляет процессы, используя семь различных методов:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 psxview --apply-rules
Вы также можете отфильтровать результаты для определенного типа объекта (Файл, Ключ, Процесс, Мьютекс и т. д.), используя опцию -t. Плагин используется для вывода списка мьютексов (mutex), открытых процессом (с pid 588):
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 handles -p 588 -t Mutant
В следующем примере образа памяти, зараженного руткитом TDL3, процесс svchost.exe (pid 884) имеет открытые дескрипторы файлов для вредоносной библиотеки DLL и драйвера ядра, связанного с руткитом:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 handles -p 884 -t File
Чтобы вывести список загруженных модулей (исполняемых файлов и библиотек DLL), вы можете использовать плагин dlllist. Плагин dlllist также отображает полный путь, связанный с процессом:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 dlllist -p 1300
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 ldrmodules -p 1300
В следующем примере образа памяти, зараженного вредоносным ПО, подключаемый модуль procdump используется для сброса исполняемого файла вредоносного процесса svchost.exe (pid 956). При помощи опции -D (--dump-dir) вы указываете имя каталога, в который выгрузите исполняемые файлы. Файл назван на основе pid процесса, такого как executable.PID.exe:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 procdump -p 956 -D C:\JeaDemo
Следующая команда показывает пример использования плагина connections для вывода на экран активных подключений из дампа памяти:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 connections
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 connscan
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 netscan
Чтобы вывести на экран раздел реестра, подразделы и его значения, вы можете использовать плагин printkey, предоставляя желаемый путь к ключу реестра, используя аргумент -K (--key):
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 printkey -K "Microsoft\Windows\CurrentVersion\Run"
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 printkey -K "Software\Microsoft\Windows\CurrentVersion\Run"
Плагины Volatility, такие как userassist, shellbags и shimcache, анализируют эти ключи реестра, содержащие двоичные данные, и отображают информацию в гораздо более удобочитаемом формате. Раздел реестра Userassist содержит список программ, которые были выполнены пользователем в системе, и время, когда программа была запущена:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 userassist
Плагины shimcache и shellbags могут быть полезны при расследовании инцидента с вредоносным ПО. Плагин shimcache может быть полезен для доказательства наличия вредоносного ПО в системе и времени его работы. Плагин shellbags может предоставлять информацию о доступе к файлам, папкам, внешним устройствам хранения и сетевым ресурсам:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 shimcache
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 shellbags
Чтобы вывести список служб и информацию о них, например отображаемое имя, тип службы и тип запуска, из образа памяти, можно использовать плагин svcscan:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 svcscan
Плагин cmdscan перечисляет команды, выполняемые cmd.exe:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 cmdscan
Плагин cmdscan отображает команды, выполненные злоумышленником. Чтобы понять, была команда выполнена успешно или нет, можно использовать плагин consoles:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 consoles
Что осталось в истории web-браузера:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 iehistory
Что осталось в буфере обмена:
:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 clipboard
Так что изучайте плагины фреймворка и память ПК. Удачи.
Анализ оперативной памяти часто используется, когда у нас был физический доступ к машине и получилось снять слепок оперативной памяти. По нему можно определить, какие приложения запускались во время этого сеанса, потому что, пока человек не выключил или не перезагрузил компьютер, в оперативной памяти хранится интересующая нас информация (например, данные процессов).
Еще интересные данные можно найти в файлах подкачки ( pagefile. sys ) и гибернации ( hiberfil. sys ). Для *nix-based-систем стоит поискать в swap-разделе.
Для анализа дампов памяти существует несколько приложений, которые на слуху у всех, кто хоть раз имел дело с задачами на форензику: это Volatility, Memoryze и Autopsy (в связке с Volatility). Есть, конечно, и другие, но подробно мы на них останавливаться не будем.
Крупные решения вроде Autopsy хороши тем, что позволяют произвести комплексный анализ всего слепка одной кнопкой, однако цена за это — большое время работы программы. На соревнованиях обычно необходимо делать задачу максимально быстро, поэтому использовать мы будем Volatility. В «Хакере» уже были статьи, связанные с этим чудесным инструментом, так что, если ты новичок в теме, стоит сначала ознакомиться с ними.
Задание
Вот как выглядело условие задачи. Нам дан непосредственно слепок оперативной памяти и его хеш MD5 для проверки.
У меня есть самый безопасный менеджер паролей. Даже если ты украдешь мой ноутбук, ты не сможешь узнать мои секреты.
Подсказка: Удаленный не значит обязательно браузер
Закачаем наш образ на машину, где будем проводить анализ (у меня это Kali):
И сразу же проверим, что с ним все в порядке:
Если хеш не сошелся с исходным хешем — придется еще раз скачать архив.
О важности актуальных версий
Ни для кого не секрет, что с каждым обновлением любого инструмента разработчики стараются добавить новые возможности и убрать старые недокументированные возможности баги. В операционных системах семейства Linux есть встроенные менеджеры пакетов, которые существенно упрощают установку и обновление программ. Из‑за этого большинство людей первым делом лезет в свой пакетный менеджер, чтобы установить оттуда программу.
Однако здесь есть небольшие шероховатости: разработчик может забыть (или забить?) обновить пакет в репозитории. В таких случаях приходится искать исходники и собирать актуальную версию самостоятельно.
Те, кто знаком с Volatility, знают о его особенностях. Например, что он использует так называемые профили, которые позволяют правильно распарсить весь слепок оперативной памяти, и энтузиасты постоянно обновляют их список. Разумеется, профиль можно сделать и самостоятельно, но явно проще воспользоваться готовыми. Во время соревнования я столкнулся с тем, что давно не обновлял свой Volatility и нужных профилей для решения задачи у меня не оказалось.
Чтобы с тобой не случилось подобного, перед началом решения задачи я настоятельно рекомендую обновить (или установить) Volatility с гитхаба проекта.
Определяем профиль
Первым делом нам необходимо определить версию операционной системы, с которой снимали слепок. Это можно сделать командой imageinfo :
Нам нужно обратить внимание на строчку с Suggested Profile(s). Именно здесь нам говорят, что предполагаемый профиль слепка оперативной памяти — Win10x64_18362 . Теперь мы должны указывать аргумент --profile Win10x64_18362 для последующих команд.
Полная документация по Volatility есть в Wiki по инструменту на GitHub.
Собираем информацию о машине
Какую информацию имеет смысл добыть вначале? Обычно это:
- процессы;
- история браузера;
- история запущенных команд в консоли.
Этих трех пунктов хватает для определения вектора дальнейшей разведки.
Процессы
Чтобы найти процессы, нам достаточно использовать команду pstree . Есть еще pslist , но первая команда удобнее, потому что показывает процессы в виде дерева — так намного проще понять, на какие из них стоит обратить внимание.
$ vol. py -f challenge. vmem --profile Win10x64_18362 pstreeНичего бросающегося в глаза, вроде pswd_manager. exe или not_a_virus. exe , не видно, поэтому продолжим нашу разведку.
Продолжение доступно только участникам
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Читайте также: