AD CS Certificate Theft
Reading time: 7 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Це невеликий підсумок розділів про крадіжку з чудового дослідження з https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf
Що я можу зробити з сертифікатом
Перед тим, як перевірити, як вкрасти сертифікати, тут є деяка інформація про те, для чого може бути корисний сертифікат:
# Powershell
$CertPath = "C:\path\to\cert.pfx"
$CertPass = "P@ssw0rd"
$Cert = New-Object
System.Security.Cryptography.X509Certificates.X509Certificate2 @($CertPath, $CertPass)
$Cert.EnhancedKeyUsageList
# cmd
certutil.exe -dump -v cert.pfx
Експорт сертифікатів за допомогою Crypto APIs – THEFT1
В інтерактивній сесії робочого столу витягти сертифікат користувача або машини разом з приватним ключем можна досить легко, особливо якщо приватний ключ є експортованим. Це можна зробити, перейшовши до сертифіката в certmgr.msc
, клацнувши правою кнопкою миші на ньому та вибравши Усі завдання → Експорт
, щоб згенерувати файл .pfx з паролем.
Для програмного підходу доступні такі інструменти, як PowerShell ExportPfxCertificate
cmdlet або проекти, такі як C# проект CertStealer від TheWover. Вони використовують Microsoft CryptoAPI (CAPI) або Cryptography API: Next Generation (CNG) для взаємодії з магазином сертифікатів. Ці API надають ряд криптографічних послуг, включаючи ті, що необхідні для зберігання сертифікатів та аутентифікації.
Однак, якщо приватний ключ встановлено як неекспортований, як CAPI, так і CNG зазвичай блокують витяг таких сертифікатів. Щоб обійти це обмеження, можна використовувати такі інструменти, як Mimikatz. Mimikatz пропонує команди crypto::capi
та crypto::cng
для патчування відповідних API, що дозволяє експортувати приватні ключі. Зокрема, crypto::capi
патчує CAPI в поточному процесі, тоді як crypto::cng
націлюється на пам'ять lsass.exe для патчування.
Викрадення сертифікатів користувача через DPAPI – THEFT2
Більше інформації про DPAPI в:
У Windows приватні ключі сертифікатів захищені DPAPI. Важливо усвідомлювати, що місця зберігання приватних ключів користувача та машини відрізняються, а файлові структури варіюються в залежності від криптографічного API, що використовується операційною системою. SharpDPAPI — це інструмент, який може автоматично орієнтуватися в цих відмінностях під час розшифровки DPAPI blobs.
Сертифікати користувачів переважно зберігаються в реєстрі за адресою HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates
, але деякі також можна знайти в каталозі %APPDATA%\Microsoft\SystemCertificates\My\Certificates
. Відповідні приватні ключі для цих сертифікатів зазвичай зберігаються в %APPDATA%\Microsoft\Crypto\RSA\User SID\
для CAPI ключів та %APPDATA%\Microsoft\Crypto\Keys\
для CNG ключів.
Щоб витягти сертифікат та його асоційований приватний ключ, процес включає:
- Вибір цільового сертифіката з магазину користувача та отримання його імені ключа.
- Знаходження необхідного майстер-ключа DPAPI для розшифровки відповідного приватного ключа.
- Розшифровка приватного ключа за допомогою відкритого тексту майстер-ключа DPAPI.
Для отримання відкритого тексту майстер-ключа DPAPI можна використовувати такі підходи:
# With mimikatz, when running in the user's context
dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc
# With mimikatz, if the user's password is known
dpapi::masterkey /in:"C:\PATH\TO\KEY" /sid:accountSid /password:PASS
Щоб спростити розшифрування файлів masterkey та приватних ключів, команда certificates
з SharpDPAPI є корисною. Вона приймає /pvk
, /mkfile
, /password
або {GUID}:KEY
як аргументи для розшифрування приватних ключів та пов'язаних сертифікатів, в результаті чого генерується файл .pem
.
# Decrypting using SharpDPAPI
SharpDPAPI.exe certificates /mkfile:C:\temp\mkeys.txt
# Converting .pem to .pfx
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
Викрадення сертифікатів машини через DPAPI – THEFT3
Сертифікати машин, збережені Windows у реєстрі за адресою HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates
, та відповідні приватні ключі, розташовані в %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
(для CAPI) та %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys
(для CNG), шифруються за допомогою майстер-ключів DPAPI машини. Ці ключі не можуть бути розшифровані за допомогою резервного ключа DPAPI домену; натомість потрібен секрет DPAPI_SYSTEM LSA, до якого може отримати доступ лише користувач SYSTEM.
Ручна розшифровка може бути досягнута шляхом виконання команди lsadump::secrets
у Mimikatz для витягнення секрету DPAPI_SYSTEM LSA, а потім використання цього ключа для розшифровки майстер-ключів машини. Альтернативно, команду crypto::certificates /export /systemstore:LOCAL_MACHINE
у Mimikatz можна використовувати після патчування CAPI/CNG, як було описано раніше.
SharpDPAPI пропонує більш автоматизований підхід з його командою сертифікатів. Коли використовується прапорець /machine
з підвищеними правами, він ескалюється до SYSTEM, вивантажує секрет DPAPI_SYSTEM LSA, використовує його для розшифровки майстер-ключів DPAPI машини, а потім використовує ці відкриті ключі як таблицю пошуку для розшифровки будь-яких приватних ключів сертифікатів машини.
Пошук файлів сертифікатів – THEFT4
Сертифікати іноді знаходяться безпосередньо у файловій системі, наприклад, у загальних папках або папці Завантаження. Найбільш поширеними типами файлів сертифікатів, націлених на Windows-середовища, є файли .pfx
та .p12
. Хоча рідше, також з'являються файли з розширеннями .pkcs12
та .pem
. Додаткові помітні розширення файлів, пов'язаних із сертифікатами, включають:
.key
для приватних ключів,.crt
/.cer
для лише сертифікатів,.csr
для запитів на підписання сертифікатів, які не містять сертифікатів або приватних ключів,.jks
/.keystore
/.keys
для Java Keystores, які можуть містити сертифікати разом із приватними ключами, що використовуються Java-додатками.
Ці файли можна шукати за допомогою PowerShell або командного рядка, шукаючи згадані розширення.
У випадках, коли знайдено файл сертифіката PKCS#12, і він захищений паролем, витягнення хешу можливе за допомогою pfx2john.py
, доступного на fossies.org. Після цього можна використовувати JohnTheRipper для спроби зламати пароль.
# Example command to search for certificate files in PowerShell
Get-ChildItem -Recurse -Path C:\Users\ -Include *.pfx, *.p12, *.pkcs12, *.pem, *.key, *.crt, *.cer, *.csr, *.jks, *.keystore, *.keys
# Example command to use pfx2john.py for extracting a hash from a PKCS#12 file
pfx2john.py certificate.pfx > hash.txt
# Command to crack the hash with JohnTheRipper
john --wordlist=passwords.txt hash.txt
NTLM Credential Theft via PKINIT – THEFT5
Наведений контент пояснює метод крадіжки облікових даних NTLM через PKINIT, зокрема через метод крадіжки, позначений як THEFT5. Ось повторне пояснення в пасивному голосі, з анонімізацією та узагальненням контенту, де це доречно:
Щоб підтримувати NTLM аутентифікацію [MS-NLMP] для додатків, які не забезпечують аутентифікацію Kerberos, KDC розроблений для повернення односторонньої функції NTLM (OWF) користувача в сертифікаті атрибутів привілеїв (PAC), зокрема в буфері PAC_CREDENTIAL_INFO
, коли використовується PKCA. Відповідно, якщо обліковий запис аутентифікується та отримує квиток на отримання квитків (TGT) через PKINIT, механізм, по суті, забезпечується, що дозволяє поточному хосту витягувати хеш NTLM з TGT для підтримки застарілих протоколів аутентифікації. Цей процес передбачає розшифровку структури PAC_CREDENTIAL_DATA
, яка є по суті NDR-серіалізованим зображенням відкритого тексту NTLM.
Утиліта Kekeo, доступна за https://github.com/gentilkiwi/kekeo, згадується як така, що здатна запитувати TGT, що містить ці специфічні дані, тим самим полегшуючи отримання NTLM користувача. Команда, що використовується для цієї мети, є такою:
tgt::pac /caname:generic-DC-CA /subject:genericUser /castore:current_user /domain:domain.local
Додатково зазначено, що Kekeo може обробляти сертифікати, захищені смарт-картами, якщо пін-код можна отримати, з посиланням на https://github.com/CCob/PinSwipe. Така ж можливість, як зазначено, підтримується Rubeus, доступним за https://github.com/GhostPack/Rubeus.
Це пояснення охоплює процес і інструменти, що беруть участь у крадіжці облікових даних NTLM через PKINIT, зосереджуючи увагу на отриманні хешів NTLM через TGT, отриманий за допомогою PKINIT, та утиліти, які полегшують цей процес.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.