+38 067 569 61 50

moc.yekpalc%40ofni

Обходимо 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 <оффсет> <дамп> . (замінити українські літери англійськими)

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