
C# инструмент для перечисления и эксплуатации неправильных конфигураций в службах сертификации Active Directory (AD CS), позволяющий злоупотреблять шаблонами сертификатов, повышать привилегии и обеспечивать постоянство в домене.
Certify — это инструмент на C# для перечисления и эксплуатации ошибок конфигурации в службах сертификации Active Directory (AD CS).
@harmj0y и @tifkin_ являются основными авторами Certify и связанного с ним исследования AD CS (блог и технический отчет).
Обзор команд и подробные сведения об использовании можно найти в вики.
Certify был представлен на Black Hat 2021 в рамках доклада «Certified Pre-Owned: Abusing Active Directory Certificate Services» (расписание).
Инструкции по предотвращению и обнаружению см. в нашем техническом отчете.
Мы не планируем выпускать бинарные файлы для Certify, так что вам придется компилировать самостоятельно :)
Certify собран для .NET 4.7.2 и совместим с Visual Studio 2022 Community Edition. Просто откройте файл проекта .sln, выберите конфигурацию «Release» и выполните сборку.
Если вы хотите запустить Certify в памяти через оболочку PowerShell, сначала скомпилируйте Certify и закодируйте полученную сборку в base64:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\Certify.exe")) | Out-File -Encoding ASCII C:\Temp\Certify.txt
Затем Certify можно загрузить в скрипт PowerShell следующим образом (где «aa...» заменяется на строку сборки Certify в base64):
$CertifyAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
Затем метод Main() и любые аргументы можно вызвать следующим образом:
[Certify.Program]::Main("enum-templates --filter-enabled --filter-vulnerable".Split())
Из-за того, как PSRemoting обрабатывает вывод, нам нужно перенаправить stdout в строку и вернуть её. К счастью, в Certify есть функция, которая помогает с этим.
Если вы следовали инструкциям в разделе Примечание: Запуск Certify через PowerShell для создания Certify.ps1, добавьте в скрипт что-то вроде следующего:
[Certify.Program]::MainString("enum-templates --filter-enabled --filter-vulnerable")
После этого вы сможете запустить Certify через PSRemoting примерно так:
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\Certify.ps1
Кроме того, аргумент Certify /outfile:C:\FILE.txt перенаправит все потоки вывода в указанный файл.
Что касается публичного раскрытия, мы наложили самоэмбарго на выпуск наших наступательных инструментов (Certify, а также ForgeCert) примерно на 45 дней после публикации нашего технического отчета, чтобы дать организациям возможность разобраться с проблемами, связанными со службами сертификации Active Directory. Мы также заблаговременно опубликовали некоторые Yara-правила/IOC для обоих проектов и выпустили ориентированный на защиту PowerShell-проект PSPKIAudit вместе с техническим отчетом. Однако мы обнаружили, что организации и поставщики исторически часто не исправляли проблемы и не создавали средства обнаружения для «теоретических» атак, пока кто-то не доказывал их возможность с помощью концептуального прототипа.
Certify использовал несколько ресурсов, найденных в интернете, в качестве справочных материалов и источника вдохновения:
Работа над AD CS была основана на работе многих других исследователей. В техническом отчете представлен полный обзор, но вкратце: