+38 067 569 61 50

info@clapkey.com

Обходим BitLocker и извлекаем из памяти ключи в Windows 11

Команда Клапкей снова наткнулась на интересную находку в мире ИТ и перевела для Вас статью. 

Введение

В этой статье я покажу, как можно обойти шифрование BitLocker в Windows 11 (версия 24H2) и извлечь из памяти ключи шифрования тома (full volume encryption key, FVEK) с помощью моего инструмента Memory-Dump-UEFI.

Краткая справка

Если у нападающего есть физический доступ к устройству, то он потенциально может получить доступ, резко перезапустив компьютер и выполнив дамп ОЗУ из экземпляров Windows, которые недавно выполнялись. Дамп памяти можно проанализировать, чтобы найти конфиденциальную информацию, например, ключи FVEK. Эта методика не работает гарантированно, потому что после отключения питания содержимое ОЗУ быстро деградирует.

Существует множество методик замедления этой деградации памяти, например, физическое охлаждение ОЗУ или использование внешних источников питания для поддержания подачи энергии. Для своего демо я закоротил контакты сброса на материнской плате устройства, что заставляет систему резко отключаться без потери питания.

Ещё одна потенциальная проблема заключается в secure boot - стандарте безопасности, который ограничивает то, что может выполняться во время запуска системы. Эта защита имеет собственные ограничения, и её уже обходили с помощью shim и множества других способов, которые для нашего демо несущественны.

Этап 1: создаём загрузочное USB-устройство

Для этого этапа нам понадобится USB-накопитель, размер которого больше, чем объём ОЗУ целевой системы. Для упрощения этого этапа я написал скрипт flashimage.sh. 

Воспользуйтесь инструкциями по созданию и применению загружаемого приложения.

Этап 2: резкий перезапуск целевой системы

Этот этап можно реализовать множеством различных способов; наша основная цель - минимизировать временной промежуток, в течение которого питание компьютера полностью отключено. По моему опыту, максимального успеха можно достичь, перезагружая систему, когда Windows ещё загружается, но не достигла экрана входа; по крайней мере, это справедливо в случае поиска ключей FVEK.

Этап 3: загружаемся с USB-устройства

Немедленно выполняем запуск Memory-Dump-UEFI с USB-устройства. Мы окажемся в оболочке UEFI, в которой можно выполнить app.efi. Подробнее о том, как это сделать, можно прочитать в файле README программы. Объём необходимого времени зависит от объёма ОЗУ, подвергаемого дампу, и скорости USB-устройства. Я рекомендую на этом этапе отключить все остальные USB-устройства, чтобы программа случайно не выполнила запись не на тот накопитель.

На скриншоте показано, как должно выглядеть успешное попадание в оболочку. Дамп памяти начнёт генерировать файлы дампа, пока у него не закончится память. После завершения можно спокойно выключить компьютер обычным образом.

Этап 4: анализ дампов

Подготовка

Вероятно, приложение создаст множество дампов. Это вызвано ограничением в 4 ГБ на размер файла, накладываемым файловой системой FAT32. Чтобы соответствовать спецификации UEFI, необходимо использовать эту файловую систему. Для удобства я добавил в папку инструментов программу concatDumps, которая в хронологическом порядке соединяет множество дампов в один. Дамп будет состоять из сырых данных, находившихся в памяти на момент его создания, поэтому для удобства чтения я рекомендую воспользоваться инструментом вроде xxd. Для помощи в поиске по дампам я написал программу searchMem, позволяющую искать в дампе шестнадцатеричные паттерны. Она находит смещения вхождений таких шестнадцатеричных паттернов, к которым можно затем перейти командой xxd -s <offset> <dump> .

Pool Tag

Pool tag - это 4-символьные идентификаторы, указывающие, где расположены пулы памяти ядра Windows. Пулы распределяются ядром Windows, это отличное место для поиска конфиденциальной информации. Существует большое количество таких pool tag; я составил текстовый файл pooltag.txt, содержащий список всех pool tag и подробности об их назначении.

Прежде чем двигаться дальше, хотелось бы выразить благодарность Microsoft за то, что она чётко указала, где в памяти находятся криптографические ключи. В Windows 7 для восстановления ключа было достаточно найти pool tag FVEc, соответствующий криптографическим распределениям fvevol.sys. В Windows 8.1 и 10 ключ можно найти в пуле памяти, маркированном Cngb; он соответствует модулю ksecdd.sys. В процессе моего изучения дампа памяти Windows 11 я не смог найти ключ ни в одном из этих мест, но нашёл его в двух других.

Восстановление ключа FVEK

Первое место расположения ключа FVEK находилось за pool tag dFVE, обозначающим распределение памяти dumpfve.sys, относящееся к фильтру аварийного дампа шифрования тома для шифрования диска Bitlocker. Этот pool tag выделен синим, а ключ FVEK - красным. Это было самое простое место расположения ключа из найденных мной; кроме того, ему предшествует паттерн 0x0480, обозначающий тип используемого шифрования (в моём случае это XTS-AES-128).

Второе место находится под pool tag None, соответствующим вызовам процедуры ExAllocatePool. На этот раз первая половина ключа встречается дважды, а вторая - один раз.

Дальнейшие шаги

Важно отметить, что полученному ключу должно предшествовать обозначение применённого алгоритма. То есть если ключ имеет вид b2cbcc06071931b7cc50b59f878789571f4dd815c2008e93c02d5c6cd98c83ef54b, то вам нужно добавить в начало ключа 0x8004 (или обозначение другого алгоритма) в формате little endian:

0480b2cbc06071931b7cc50b59f8789571f4dd815c2008e93c02d5c6cd98c83ef54b

Далее нужно записать это шестнадцатеричное значение в файл. Это можно сделать так:

echo «0480b2cbc06071931b7cc50b59f8789571f4dd815c2008e93c02d5c6cd98c83ef54b» | xxd -r -p > output.fvek

Я крайне рекомендую использовать набор инструментов dislocker для определения нужного алгоритма/значения и разблокировки диска. Если сделать всё правильно, то можно воспользоваться output.fvek для разблокировки защищённого Bitlocker раздела и доступа к любым данным в томе.

Выводы

Оптимальнее всего разбираться в том, как Microsoft реализовала Bitlocker, выполнив отладку на уровне ядра с помощью windbg. Это довольно легко сделать с помощью виртуальных машин или кроссоверного кабеля USB 3.0 A/A. Нахождение ключа прежде всего стало возможным благодаря пошаговому выполнению процесса запуска Windows и наблюдению за действиями Bitlocker. Microsoft прилагает усилия по удалению ключей с помощью функций вроде SymCryptSessionDestroy, но им не удаётся уничтожить все ключи, как видно из того, что они присутствуют в куче.

Ссылки

https://tribalchicken.net/recovering-bitlocker-keys-on-windows-8-1-and-10/

https://github.com/libyal/libbde/blob/main/documentation/BitLocker%20Drive%20Encryption%20(BDE)%20format.asciidoc

https://github.com/Aorimn/dislocker

https://github.com/microsoft/SymCrypt

https://github.com/libyal/libbde

https://github.com/zodiacon/PoolMonX/blob/master/res/pooltag.txt

https://techcommunity.microsoft.com/blog/askperf/an-introduction-to-pool-tags/372983

А защитить Ваш сервер или настольный ПК вы можете, обратившись к нам, перейдя по ссылке: https://clapkey.com/contact-us

Ця сторінка краще звучить солов'їною! Досить споживати російський контент!

Перейти на українську

#StandWithUkraine

Підтримати Збройні Сили України під час російського вторгнення

Контакты

Офіс

4 поверх. ТЦ Метрополітен (вул. Гоголя 38), м. Полтава, Україна, 36000