AD CS Certificate Theft
Це невеликий огляд розділів про крадіжку з дослідження від https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf
Що я можу зробити з сертифікатом
Перед тим, як дізнатися, як вкрасти сертифікати, ось деяка інформація про те, на що може бути корисний сертифікат:
Експорт сертифікатів за допомогою криптографічних API – THEFT1
У інтерактивній сеансі робочого столу вилучення сертифікату користувача або машини разом з закритим ключем може бути легко виконано, особливо якщо закритий ключ можна експортувати. Це можна зробити, перейшовши до сертифікату в certmgr.msc
, клацнувши правою кнопкою миші на ньому та вибравши All Tasks → Export
, щоб створити файл .pfx, захищений паролем.
Для програмного підходу доступні інструменти, такі як командлет PowerShell ExportPfxCertificate
або проекти, наприклад проект CertStealer на C# від 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 в:
pageDPAPI - Extracting PasswordsУ Windows закриті ключі сертифікатів захищені за допомогою DPAPI. Важливо розуміти, що місця зберігання закритих ключів для користувача та машини є різними, а структури файлів варіюються в залежності від криптографічного API, яке використовується операційною системою. SharpDPAPI - це інструмент, який може автоматично навігувати цими різницями при розшифруванні блоків DPAPI.
Сертифікати користувача переважно знаходяться в реєстрі під 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 у відкритому вигляді можна використовувати наступні підходи:
Для оптимізації розшифрування файлів masterkey та файлів приватних ключів команда certificates
з SharpDPAPI є корисною. Вона приймає /pvk
, /mkfile
, /password
або {GUID}:KEY
як аргументи для розшифрування приватних ключів та пов'язаних сертифікатів, що в результаті генерує файл .pem
.
Викрадення машинного сертифікату через 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 домену; замість цього потрібний секрет LSA DPAPI_SYSTEM, до якого має доступ лише користувач SYSTEM.
Ручне розшифрування можливе за допомогою виконання команди lsadump::secrets
в Mimikatz для видобуття секрету LSA DPAPI_SYSTEM, а потім використання цього ключа для розшифрування майстер-ключів машини. Альтернативно, можна скористатися командою crypto::certificates /export /systemstore:LOCAL_MACHINE
в Mimikatz після патчення CAPI/CNG, як описано раніше.
SharpDPAPI пропонує більш автоматизований підхід за допомогою команди certificates. Коли використовується прапорець /machine
з підвищеними дозволами, він ескалює до SYSTEM, виводить секрет LSA DPAPI_SYSTEM, використовує його для розшифрування майстер-ключів 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 для спроби розкрити пароль.
Викрадення облікових даних NTLM через PKINIT - THEFT5
Наданий вміст пояснює метод викрадення облікових даних NTLM через PKINIT, зокрема через метод викрадення, позначений як THEFT5. Ось переформульоване у пасивному стані пояснення, з анонімізованим вмістом та підсумованим, де це можливо:
Для підтримки аутентифікації NTLM [MS-NLMP] для додатків, які не підтримують аутентифікацію Kerberos, КДК розроблений для повернення односторонньої функції NTLM користувача (OWF) у привілейованому атрибутному сертифікаті (PAC), зокрема в буфері PAC_CREDENTIAL_INFO
, коли використовується PKCA. Отже, якщо обліковий запис аутентифікується та забезпечує Квиток для отримання квитка (TGT) через PKINIT, вбудований механізм надає можливість поточному хосту витягти хеш NTLM з TGT для підтримки застарілих протоколів аутентифікації. Цей процес передбачає розшифрування структури PAC_CREDENTIAL_DATA
, яка в сутності є NDR серіалізованим зображенням тексту NTLM.
Утиліта Kekeo, доступна за посиланням https://github.com/gentilkiwi/kekeo, згадується як здатна запитувати TGT, що містить ці конкретні дані, тим самим сприяючи отриманню NTLM користувача. Використана для цієї мети команда виглядає наступним чином:
Додатково відзначено, що Kekeo може обробляти захищені сертифікати зі смарт-карткою, якщо можна отримати PIN-код, з посиланням на https://github.com/CCob/PinSwipe. Таку ж можливість, як повідомляється, підтримує Rubeus, доступний за посиланням https://github.com/GhostPack/Rubeus.
Ця пояснювальна записка охоплює процес та інструменти, що використовуються для крадіжки облікових даних NTLM через PKINIT, зосереджуючись на отриманні хешів NTLM через TGT, отриманий за допомогою PKINIT, та утиліти, які полегшують цей процес.
Last updated