[ << ALL_FEED ]

DPAPI — популярный вектор для атак на ОС семейства Windows

Ещё в группе «Общее»

DPAPI — популярный вектор для атак на ОС семейства Windows 💻

Ключи Wi-Fi, сертификаты, учетные данные, cookies браузеров, DropBox, Skype — и это только часть мишеней, на которые нацелены злоумышленники.

Сегодня разберем, что произойдет, если у пользователя сохранены учетные данные на рабочей станции, введенной в домен Active Directory, а злоумышленник загрузил на нее всем знакомый Mimikatz.

👀 Для начала рассмотрим, как связан DPAPI с учетными данными пользователей и другими секретами.

Интерфейс DPAPI используется компанией Microsoft в Windows с 2000-го года. Он позволяет хранить чувствительные данные пользователя в шифрованном виде.

Что использует этот интерфейс для шифрования данных?

• SID пользователя;
• hash пароля;
• Masterkey — ключевую сущность, за которой будут охотиться злоумышленники.

Masterkey в свою очередь генерируется из так называемых prekey и 64 рандомных байт. SID, hash пароля пользователя и Masterkey путем криптографических манипуляций образуют blob. Поэтому для расшифрования злоумышленнику нужно знать конкретный blob, который нужно расшифровать, Masterkey в открытом виде, hash пароля пользователя и его SID для расшифровки.

🗂 Упомянутые объекты и параметры содержатся в различных папках и ветках реестра. Нам интересны следующие папки:

• Папка с сredential blob

\Users\<user>\appdata\local\microsoft\credentials\<credential blob>Code language: plaintext (plaintext)

• Папка с файлами пользовательских mastekeys

\Users\%USER%\AppData\Roaming\Microsoft\Protect\%SID%Code language: plaintext (plaintext)

• Папка с файлами приватных RSA-ключей

%APPDATA%\Roaming\Microsoft\Crypto\RSA\<SID>Code language: plaintext (plaintext)

У одного пользователя может быть несколько masterkeys на узле. Злоумышленник сначала должен будет узнать, какой masterkey используется сейчас для blob с учетными данными.

Находясь на узле и загрузив Mimikatz, злоумышленник может найти эту информацию, прочитав свойства внутри blob с помощью команды mimikatz:


dpapi::cred /in:C:\users\<username>\appdata\local\microsoft\credentials\<blob>Code language: YAML (yaml)

💡 Дисклеймер: если команды будут выполняться через Cobalt Strike или другой C2, то синтаксис команд будет другой.

Для корректной идентификации Masterkey необходимо обратить внимание на параметр guidMasterkey — это идентификатор Masterkey, который использовался для шифрования этого blob. Благодаря тому, что в нашем случае рабочая станция введена в домен и имеет с ним связь, можно запросить резервный RSA-ключ с контроллера домена.

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

Запрос RSA-ключа на контроллер домена будет выполнен со службы MS-BKRP (backupkey remote protocol) RPC:


dpapi::masterkey /in:C:\users\<username>\appdata\roaming\microsoft\protect\<SID>\<masterkey> /rpcCode language: YAML (yaml)

В ответ злоумышленнику придет masterkey в открытом виде (параметр key:) и его sha1 hash.

После этого он может попытаться расшифровать учетные данные пользователя и получить пароль в открытом виде.

Сделает он это с помощью команды:


dpapi::cred /in:C:\users\<username>\appdata\local\microsoft\credentials\<blob> /masterkey:<masterkey_as_plain_text>Code language: YAML (yaml)

И получит на выходе в параметре CredentialBlob: пароль скомпрометированного пользователя 💻

🔦 Для обнаружения активности можно использовать комбинацию событий на атакованной рабочей станции (1, 2) и контроллере домена (3):

1. Event ID 4663, применение права доступа к объекту. Здесь под объектами понимается содержимое упомянутых выше папок с credential blob, пользовательскими masterkeys и приватными RSA-ключами. Обращения к объектам этих папок будут выполнены в контексте скомпрометированного пользователя.

2. Установка TCP-соединения с DC, Sysmon 3 по порту 445. Проверить его доступность можно, создав в контексте скомпрометированного пользователя именованный канал Sysmon 17 с параметром PipeName: \\protected_storage.

3. Доступ к сетевому ресурсу с Event ID 5145. Несмотря на многочисленность событий, это событие можно связать с предыдущими, так как обращение выполняется в контексте скомпрометированного пользователя к общей папке \\IPC$\Protected_Storage, которая уже упомянута во втором пункте. Обращение к Protected_Storage — один из индикаторов возможных манипуляций с DPAPI.

#DPAPI #win #hunt #ti #detect
@ptescalator

Ещё от ti_author

Ещё от ti_author

Ещё в группе «Общее»