Windows Password Recovery - анализ Мастер Ключей DPAPI
Мастер Ключ представляет собой 64 байта данных, которые используются в качестве первичного ключа при расшифровке DPAPI объекта. Мастер Ключ пользователя зашифрован при помощи пароля на вход пользователя.
Задаем путь к файлу с Мастер Ключом и прописываем SID пользователя
Все Мастер Ключи пользователя находятся в папке %APPDATA%\Microsoft\Protect\%SID%. Например,
E:\ Users\ John\ AppData\ Roaming\ Microsoft\ Protect\ S-1-5-21-2897849034-3956381361-16091305341-1001\ 23ab9bc1-9397-4cb1-ab74-7166ed6a8713
Мастер Ключи системы складируются в каталоге %SYSTEMDIR%\Microsoft\Protect.
SID пользователя программа, как правило, вычисляет автоматически из указанного пути.
Производим анализ Мастер Ключа
Файл с Мастер Ключом представляет собой двоичную структуру, состоящую из служебного заголовка и четырех слотов, а именно:
непосредственно самого Мастер Ключа пользователя, локального ключа шифрования (для расшифровки резервных ключей), локального резервного ключа (для Win2K) или GUID для файла CREDHIST (Windows XP и выше) и резервного ключа домена.
Список со структурой Мастер Ключа состоит из имени атрибута (т.е. двоичного поля) и соответствующего ему значения. Каждая секция выделена своим цветом:
- поле с атрибутами залоговка
- слот с атрибутами Мастер Ключа пользователя
- слот с атрибутами Локального Ключа шифрования
- слот с атрибутами Локального Резервного Ключа или GUID файла CREDHIST
- слот с атрибутами Резервного Ключа Домена
Теперь немного поподробнее.
Атрибуты заголовка
dwVersion - версия файла с Мастер Ключом.
szGuid - текстовый идентификатор (GUID) мастер ключа. Как правило, он совпадает с именем файла.
dwPolicy - различные флаги. Например, если установлен бит 3, то при расшифровке ключа используется SHA1 хэш пароля пользователя, иначе MD4. Так в Windows 2000 этот бит сброшен. Установленный бит 2 говорит о том, что для Мастер Ключа требуется резервное копирование.
Атрибуты Мастер Ключа пользователя
dwUserKeySize - длина текущего слота.
dwVersion - версия структуры данных. В версии 1 используется только атрибут с солью.
pSalt - соль, т.е. случайные 16 байт данных, задействованные в расшифровке Мастер Ключа и предотвращающие взлом данных при помощи атаки по радужным таблицам.
dwPBKDF2IterationCount - количество итераций в функции генерации ключа шифрования PBKDF2.
HMACAlgId - идентификатор алгоритма хэширования.
CryptAlgId - идентификатор алгоритма шифрования.
pKey - зашифрованный Мастер Ключ пользователя.
Атрибуты Локального Ключа шифрования
dwLocalEncKeySize - длина текущего слота.
dwVersion - версия структуры данных. В Win2K используется только атрибут с солью.
pSalt - соль.
dwPBKDF2IterationCount - количество итераций в функции генерации ключа шифрования PBKDF2.
HMACAlgId - идентификатор алгоритма хэширования.
CryptAlgId - идентификатор алгоритма шифрования.
pKey - зашифрованный Локальный Ключ шифрования, который используется для расшифровки Локального Резервного Ключа в Win2K.
Атрибуты Локального Резервного Ключа (Windows 2000)
dwLocalKeySize - длина текущего слота.
dwVersion - версия структуры данных.
pSalt - соль.
pKey - зашифрованный Локальный Резервный Ключ.
Атрибуты GUID для файла CREDHIST (Windows XP и выше)
dwLocalKeySize - длина текущего слота.
dwVersion - версия структуры данных.
guidCredHist - двоичный идентификатор файла CREDHIST.
Атрибуты Резервного Ключа Домена
dwDomainKeySize - длина текущего слота.
dwVersion - версия структуры данных.
pSalt - соль, т.е. случайные 16 байт данных, задействованные в расшифровке Мастер Ключа и предотвращающие взлом данных при помощи атаки по радужным таблицам.
dwPBKDF2IterationCount - количество итераций в функции генерации ключа шифрования PBKDF2.
HMACAlgId - идентификатор алгоритма хэширования.
CryptAlgId - алгоритм шифрования.
pKey - зашифрованный Резервный Ключ Домена. Для его расшифровки требуется ключ шифрования домена, хранящийся в базе данных Active Directory.
Для расшифровки Мастер Ключа пользователя требуется знать его пароль на вход или PIN код. Из контекстного меню анализатора можно проверить пароль для данного Мастер Ключа и даже попробовать подобрать его с помощью словаря. Однако, не стоит обольщаться слишком сильно. Если в Windows 2000 скорость подбора исчисляется десятками или даже сотнями тысяч паролей в секунду, то в Windows 7 счет идет уже на единицы. Смотрите таблицу ниже (скорость измерена для одном ядре процессора Intel Q8400 2.66GHz).
Операционная система |
Алгоритм шифрования |
Алгоритм хэширования |
Кол-во итераций в PKCS#5 PBKDF2 |
Скорость перебора (п/с) |
Windows 2000 |
RC4 |
SHA1 |
1 |
95000 |
Windows XP |
3DES |
SHA1 |
4000 |
76 |
Windows Vista |
3DES |
SHA1 |
24000 |
12 |
Windows 7 |
AES256 |
SHA512 |
5600 |
10 |
Windows 10-11 |
AES256 |
SHA512 |
8000 |
7 |