
Форжинг сертификатов для аутентификации в Active Directory с использованием украденных закрытых ключей Центра сертификации, что обеспечивает постоянный доступ к домену с помощью поддельных .pfx-файлов.
ForgeCert использует BouncyCastle C# API и украденный сертификат центра сертификации (CA) + закрытый ключ для создания поддельных сертификатов для произвольных пользователей, способных пройти аутентификацию в Active Directory.
Эта атака обозначена как DPERSIST1 в нашей технической статье "Certified Pre-Owned". Данный код был опубликован примерно через 45 дней после публикации статьи.
@tifkin_ является основным автором ForgeCert.
@tifkin_ и @harmj0y являются основными авторами сопутствующего исследования служб сертификации Active Directory (блог и техническая статья).
Как описано в разделах Background и Forging Certificates with Stolen CA Certificates - DPERSIST1 нашей технической статьи, закрытый ключ сертификата центра сертификации (CA) защищается на сервере CA либо с помощью DPAPI, либо аппаратно (HSM/TPM). Кроме того, сам сертификат (без закрытого ключа) публикуется в лесном объекте , который определяет сертификаты CA, разрешающие аутентификацию в AD. В совокупности, CA, чей сертификат присутствует в , использует свой закрытый ключ для подписи запросов на подпись сертификатов (CSR) от клиентов. Эта диаграмма суммирует процесс:

Безопасность закрытого ключа CA имеет первостепенное значение. Как уже упоминалось, если закрытый ключ не защищен аппаратным решением, таким как TPM или HSM, ключ будет зашифрован с помощью API защиты данных (DPAPI) и сохранен на диске сервера CA. Если злоумышленнику удастся скомпрометировать сервер CA, он сможет извлечь закрытый ключ для любого сертификата CA, не защищенного аппаратно, используя Mimikatz от @gentilkiwi или проект SharpDPAPI от GhostPack. THEFT3 в технической статье описывает этот процесс для машинных сертификатов.
Поскольку единственным ключевым материалом, используемым для подписи выданных сертификатов, является закрытый ключ CA, если злоумышленник украдет такой ключ (для сертификата в NTAuthCertificates), он сможет подделать сертификаты, способные обеспечить аутентификацию в домене. Эти поддельные сертификаты могут быть созданы для любого участника домена (хотя учетная запись должна быть "активной" для возможности аутентификации, поэтому такие учетные записи, как krbtgt, не подойдут), и сертификаты будут действительны до тех пор, пока действителен сертификат CA (обычно 5 лет по умолчанию, но может быть установлен более длительный срок).
Кроме того, поскольку эти сертификаты не являются продуктом обычного процесса выдачи, CA не знает об их создании. Таким образом, сертификаты не могут быть отозваны.
Примечание: закрытый ключ ЛЮБОГО сертификата CA в NTAuthCertificates (корневого или подчиненного CA) может быть использован для подделки сертификатов, способных обеспечить аутентификацию в лесу. Если сертификат/ключ от подчиненного CA, необходимо предоставить легитимный CRL для проверки цепочки сертификатов.
ForgeCert использует BouncyCastle's X509V3CertificateGenerator для выполнения подделок.
C:\Temp>ForgeCert.exe
ForgeCert 1.0.0.0
Copyright c 2021
ERROR(S):
Required option 'CaCertPath' is missing.
Required option 'SubjectAltName' is missing.
Required option 'NewCertPath' is missing.
Required option 'NewCertPassword' is missing.
--CaCertPath Required. CA private key as a .pfx or .p12 file
--CaCertPassword Password to the CA private key file
--Subject (Default: CN=User) Subject name in the certificate
--SubjectAltName Required. UPN of the user to authenticate as
--NewCertPath Required. Path where to save the new .pfx certificate
--NewCertPassword Required. Password to the .pfx file
--CRL ldap path to a CRL for the forged certificate
--help Display this help screen.
--version Display version information.
Примечание: полное описание кражи закрытого ключа CA и подделки сертификатов аутентификации см. в разделе DPERSIST1 в технической статье.
Контекст:
ca.pfx, зашифрованный паролем Password123![email protected].localadmin.pfx, зашифрованный паролем NewPassword123!C:\Tools\ForgeCert>ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword "Password123!" --Subject "CN=User" --SubjectAltName "[email protected]" --NewCertPath localadmin.pfx --NewCertPassword "NewPassword123!"
CA Certificate Information:
Subject: CN=theshire-DC-CA, DC=theshire, DC=local
Issuer: CN=theshire-DC-CA, DC=theshire, DC=local
Start Date: 1/4/2021 10:48:02 AM
End Date: 1/4/2026 10:58:02 AM
Thumbprint: 187D81530E1ADBB6B8B9B961EAADC1F597E6D6A2
Serial: 14BFC25F2B6EEDA94404D5A5B0F33E21
Forged Certificate Information:
Subject: CN=User
SubjectAltName: [email protected]
Issuer: CN=theshire-DC-CA, DC=theshire, DC=local
Start Date: 7/26/2021 3:38:45 PM
End Date: 7/26/2022 3:38:45 PM
Thumbprint: C5789A24E91A40819EFF7CFD77150595F8B9878D
Serial: 3627A48F90F6869C3215FF05BC3B2E42
Done. Saved forged certificate to localadmin.pfx with the password 'NewPassword123!'
Эту подделку можно выполнить на системе, контролируемой злоумышленником, и полученный сертификат можно использовать с Rubeus для запроса TGT (и/или получения NTLM хеша пользователя ;)
TypeRefHash текущей кодовой базы ForgeCert: b26b451ff2c947ae5904f962e56facbb45269995fbb813070386472f307cfcf0.
TypeLib GUID ForgeCert: bd346689-8ee6-40b3-858b-4ed94f08d40a. Это отражено в Yara-правилах, находящихся в этом репозитории.
См. разделы PREVENT1, DETECT3 и DETECT5 в нашей технической статье для получения рекомендаций по предотвращению и обнаружению.
Fabian Bader опубликовал отличный пост о том, как смягчить многие случаи использования "Golden Certificates" с помощью настроек Microsoft OCSP. Однако обратите внимание, что в разделе Final Thoughts он упоминает: This method is not bulletproof at all. Since the attacker is in charge of the certificate creation process, she could just change the serial number to a valid one. Это было реализовано в его PR, хотя помните, что по умолчанию серийный номер будет рандомизирован, что означает, что защита с помощью OCSP должна работать во многих случаях, и, по нашему мнению, ее стоит внедрить.
Мы считаем, что могут быть возможности для создания Yara/других правил обнаружения для типов поддельных сертификатов, которые создает этот проект — если какие-либо исследователи защиты найдут хороший способ сигнатурирования этих файлов, пожалуйста, сообщите нам, и мы обновим Yara-правила/рекомендации по защите здесь.
Существует явная параллель между "Golden Tickets" (поддельные TGT) и этими "Golden Certificates" (поддельные сертификаты AD CS). Как хеш krbtgt, так и закрытый ключ CA являются криптографическим материалом, критически важным для безопасности среды Active Directory, и оба могут быть использованы для подделки аутентификаторов для произвольных пользователей. Однако, в то время как хеш krbtgt можно получить удаленно через DCSync, закрытый ключ CA должен быть (по крайней мере, насколько нам известно) восстановлен путем выполнения кода на самой машине CA. В то время как хеш krbtgt можно сменить относительно легко, смена закрытого ключа CA значительно сложнее.
Что касается публичного раскрытия, мы добровольно наложили эмбарго на выпуск наших наступательных инструментов (ForgeCert, а также Certify) примерно на 45 дней после публикации нашей технической статьи, чтобы дать организациям возможность разобраться с проблемами, связанными со службами сертификации Active Directory. Однако мы обнаружили, что организации и поставщики исторически часто не исправляли проблемы и не создавали средства обнаружения для "теоретических" атак до тех пор, пока кто-то не доказывал возможность атаки с помощью доказательства концепции.
Это отражается в реакции некоторых людей на исследование: this IS StUPId, oF COurse YoU Can FORge CERts WITH ThE ca PriVAtE KeY. На что мы отвечаем: да, многие вещи возможны, но PoC||GTFO