Когда система скомпрометирована, диск врёт чаще, чем признаётся: злоумышленник давно научился подчищать журналы и маскировать файлы. Память - другое дело. В момент снятия образа оперативной памяти там честно лежат расшифрованные ключи, открытые сессии, загруженные драйверы и кусочки паролей, которые вредоносный код просто не успел выбросить. Разберём, как устроена экспертиза оперативной памяти уровня ядра, чем реально извлекаются криптографические ключи из живого дампа и как делать это легально и методично.
Что такое форензика памяти и чем она отличается от анализа диска
Криминалистика памяти оперирует слепком ОЗУ, снятым в момент, когда инцидент ещё горяч. В отличие от образа диска, где данные терпеливо ждут, память хранит исполняющееся состояние: таблицы процессов ядра, списки драйверов, сетевые соединения вместе с их ключами сессии, кэши учётных данных, содержимое криптографических провайдеров. Именно поэтому золотое правило реагирования звучит жёстко: сначала память, потом диск. Порядок обратный - и самые ценные доказательства растворились при перезагрузке или выключении.
Снять образ помогают несколько семейств средств. Встроенный механизм аварийного дампа ядра пишет полный дамп физической памяти по событию остановки системы, и заранее настроенный полный дамп - добрая половина готовности к расследованию. Включается он одной командой от администратора:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl" `
-Name CrashDumpEnabled -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl" `
-Name AlwaysKeepMemoryDump -Value 1 -Type DWord
Get-CimInstance Win32_OSRecoveryConfiguration | Select-Object DebugInfoType,MiniDumpDirectory
Значение DebugInfoType равное единице соответствует полному дампу. Место под файл размером с физическую память закладывают заранее, иначе в нужный момент система соберёт урезанный слепок. Специализированные инструменты на базе драйверов чтения физической памяти (исторически это семейство решений, среди которых широко известен WinPmem и его преемники) снимают память на живой машине без остановки. В виртуализационных средах картина проще: гипервизор ставит гостя на паузу и возвращает файл снабдившего снимка памяти, что считается самым чистым способом, потому что память не "бежит" во время снятия.
Дальше образ уходит к аналитику. С этого момента начинается работа, ради которой всё затевалось.
Как построен анализ образа памяти
Инструментарий анализа держится на открытых рамках: главным стандартом де-факто является Volatility - среда с плагинами, знающая внутренние структуры ядра разных версий Windows. Типовой прогон выглядит как последовательность коротких команд:
vol -f mem.raw windows.info
vol -f mem.raw windows.pslist
vol -f mem.raw windows.psscan
vol -f mem.raw windows.modules
vol -f mem.raw windows.driverscan
vol -f mem.raw windows.netscan
vol -f mem.raw windows.callbacks
vol -f mem.raw windows.malfind
Первым делом среда определяет версию системы, построившей дамп, по сигнатурам начальной настройки, и команда windows.info печатает её вместе с адресом структуры отладки. Дальше плагины обходят связанные списки ядра: процессы через pslist и её сканирующий аналог psscan, драйверы через modules и driverscan, затем открытые дескрипторы, сетевые подключения, зарегистрированные обратные вызовы и таймеры.
Наблюдательный читатель заметит принцип: все эти объекты соединены указателями, и анализатор ходит по ним как по расческе. Вредоносное ПО, активно отцепляющее свои структуры от списков (классика DKOM), ломает простой обход, и потому настоящий инструментарий всегда содержит пару методик: прямую по спискам и сканирующую по сигнатурам, а расхождение между ними - само по себе находка, кричащая о присутствии чего-то, что прячется. Флажки этого типа на практике нехитрые: процесс есть в скане, но отсутствует в списке; драйвер найден по сигнатуре, но не загружен в перечне модулей.
Подготовительный этап включает и описания структур. Старшие ветки анализатора требуют точного профиля исследуемой версии системы, актуальные работают с наборами символов, которые выбирают автоматически по сигнатуре сборки. В обоих случаях расхождение описания и дампа остаётся причиной номер один пустых результатов у новичков, и прежде чем поднимать панику о странном образе, стоит убедиться, что версия определена правильно. Символы берут из официального хранилища поставщика системы, что требует доступа в сеть в момент подготовки.
Извлечение криптографических ключей и секретов
Теперь о самом чувствительном. Ключи живут в памяти тогда, когда они работают: расшифрованный мастер-ключ дискового шифрования находится в памяти постоянно, пока том подключён; ключи TLS-сессий лежат в структурах соответствующих библиотек на время соединения; кэш доменных учётных данных хранится в процессе подсистемы безопасности.
Ключи дискового шифрования исторически извлекаются сигнатурным поиском: структуры ключа AES имеют характерную форму (заголовок пула с конкретным тегом, внутри - развёрнутое расписание ключей строго определённого размера), и инструменты сигнатурного поиска перебирают определённые участки памяти, проверяя кандидатов расписанием ключа и пробной расшифровкой. Тепло снятия образа здесь решает всё: машина, снятая при заблокированном, но не выключенном состоянии, с высокой вероятностью отдаёт мастер-ключ; машина после выключения - уже нет, потому что современные модули ОЗУ теряют данные за секунды.
Кэши учётных данных извлекаются из процесса подсистемы локальной безопасности по известным смещениям структур пакетов аутентификации. Инструменты этой категории общеизвестны, и правильный тон разговора про них - не инструкция по злоупотреблению, а понимание: если защитник может прочитать секрет из памяти, то и атакующий может. Отсюда выросли приоритетные меры защиты: запуск процесса безопасности в защищённом режиме, механизм Credential Guard, где секреты выносятся в изолированную виртуализацией среду, и отключение устаревших пакетов аутентификации, которые хранят пароли в обратимой форме. Состояние обеих защит проверяется из реестра:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v RunAsPPL
reg query "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\CredentialGuard" /v Enabled
Значение RunAsPPL равное единице означает, что процесс подсистемы безопасности запускается как защищённый, и обычный образ памяти уже не отдаёт его содержимое.
Методика извлечения ключей сессий строится похоже: структурированная проходка по памяти процесса TLS-стека с известными сигнатурами. Исследования в этой области регулярно показывают: ключи сохраняют жизнеспособность дольше, чем принято думать, потому что библиотеки редко затирают буферы после использования - это тоже инженерный урок для разработчиков собственных защищённых систем.
Правовая рамка и процессуальная дисциплина
Всё описанное - легальный инструмент в трёх ситуациях: расследование инцидента на собственной инфраструктуре, согласованный аудит заказчика, экспертиза, заказанная уполномоченной стороной. За пределами этой рамки извлечение чужих секретов - уже уголовная история, и статью нужно читать строго в ключе защиты: знать приёмы, чтобы понимать риски и закрывать дыры.
Процессуальная дисциплина одинаково важна: образ памяти снабжается хэшами сразу при снятии, цепочка хранения документируется, любые промежуточные копии учитываются. Хэш считают штатными средствами, ничего ставить не нужно:
certutil -hashfile D:\Evidence\mem-01.raw SHA256
Get-FileHash D:\Evidence\mem-01.raw -Algorithm SHA256 | Format-List
На твердотельном накопителе образ в шестнадцать гигабайт проходит за десятки секунд, и эта строка в протоколе стоит дешевле, чем любой спор о подмене доказательства. Рабочий порядок выглядит так:
- Зафиксировать состояние системы и время, снять образ памяти штатным средством, посчитать хэш образа;
- Заполнить журнал снятия: кто, каким инструментом, с какой машины, при каких обстоятельствах;
- Работать только с копией образа, оригинал оставить нетронутым;
- Каждую извлечённую находку (ключ, секрет, строка) привязать к смещению в образе и зафиксировать в протоколе;
- Секреты, добытые при анализе, хранить с тем ранжированием, которого они заслуживают, а не в текстовых файлах на рабочем столе.
Эти пункты выглядят бюрократией до первого судебного спора или до первого внутреннего разбирательства, где обоснованность выводов решается цепочкой хранения, а не красноречием аналитика.
Организация готовности к форензике на предприятии
Поразительно, сколько организаций впервые задумываются о памяти в день инцидента. Готовность строится заранее и недорого: на серверах настраивается полный дамп памяти (место на разделе под него закладывается заранее), создаётся комплект съёмников памяти на изолированном носителе, который лежит в ожидании у дежурной смены, прописывается план "сначала память" в инструкциях реагирования. Отдельным пунктом - обучение: снятие образа с живого сервера, которое действительно используется продуктивом, требует холодной головы, и первый раз это лучше делать на учениях, а не в три ночи под давлением.
На уровне проектирования систем культура форензики меняет и привычки разработчиков: секреты в памяти затираются после использования явно, жизненный цикл ключей минимизируется, чувствительные структуры стараются держаться в единичных местах, а не размазываться копиями. Причина требования именно явного затирания в том, что обычный memset компилятор вправе удалить:
VOID WipeSecret(PVOID buffer, SIZE_T length)
{
if (buffer == NULL || length == 0) {
return;
}
// memset здесь может быть выброшен оптимизатором как запись
// в память, которая больше не читается
SecureZeroMemory(buffer, length);
}
PVOID key = ExAllocatePool2(POOL_FLAG_PAGED, KEY_LENGTH, 'yeKt');
// ... ключ поработал ...
WipeSecret(key, KEY_LENGTH);
ExFreePoolWithTag(key, 'yeKt');
SecureZeroMemory гарантированно выполняет запись, поэтому след ключа не остаётся ни в освобождённом блоке пула, ни в образе памяти, снятом через минуту. Система, спроектированная с мыслью "что увидит эксперт, если нас скомпрометируют", снижает и ущерб, и горечь расследования.
Отдельно о полезной привычке: готовый шаблон протокола извлечения, привязка каждой находки к смещению и уверенное владение связкой Volatility плюс системный отладчик позволяют воспроизвести результат независимым экспертом до бита, а воспроизводимость - главная валюта форензики.
Инструменты повседневного анализа и их связка
Помимо самого анализатора Volatility, рабочее место эксперта обрастает проверенными помощниками. Снимок процессов и их цифровых подписей проверяется по справочникам целостности; строки из образа извлекаются пакетно и фильтруются по словарям сетевых артефактов, адресов и характерных заголовков; системный отладчик полезен там, где дамп получен именно как аварийный и нужно пройтись по стекам потоков ядра обычными средствами: