
Active Directory Certificate Services (AD CS)의 잘못된 구성을 열거하고 악용하여 인증서 템플릿 남용, 권한 상승 및 도메인 지속성을 가능하게 하는 C# 도구입니다.
Certify는 Active Directory Certificate Services(AD CS)의 잘못된 구성을 열거하고 악용하기 위한 C# 도구입니다.
@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"를 선택한 후 빌드하기만 하면 됩니다.
PowerShell 래퍼를 통해 Certify를 메모리에서 실행하려면 먼저 Certify를 컴파일하고 결과 어셈블리를 base64로 인코딩합니다.
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\Certify.exe")) | Out-File -Encoding ASCII C:\Temp\Certify.txt
그런 다음 다음 코드를 사용하여 PowerShell 스크립트에 Certify를 로드할 수 있습니다. ("aa..."는 base64로 인코딩된 Certify 어셈블리 문자열로 대체됩니다.)
$CertifyAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
Main() 메서드와 인수는 다음과 같이 호출할 수 있습니다.
[Certify.Program]::Main("enum-templates --filter-enabled --filter-vulnerable".Split())
PSRemoting이 출력을 처리하는 방식 때문에 stdout을 문자열로 리디렉션하여 반환해야 합니다. 다행히 Certify에는 이를 도와주는 함수가 있습니다.
참고: PowerShell을 통한 Certify 실행의 지침에 따라 Certify.ps1을 만든 후, 스크립트에 다음과 같은 내용을 추가합니다.
[Certify.Program]::MainString("enum-templates --filter-enabled --filter-vulnerable")
그러면 다음과 같이 PSRemoting을 통해 Certify를 실행할 수 있습니다.
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\Certify.ps1
또는 Certify의 /outfile:C:\FILE.txt 인수를 사용하면 모든 출력 스트림이 지정된 파일로 리디렉션됩니다.
공개적 공개에 관해, 우리는 조직이 Active Directory Certificate Services 관련 문제를 처리할 기회를 갖도록, 백서를 게시한 후 약 45일 동안 공격 도구(Certify 및 ForgeCert)의 공개를 자발적으로 연기했습니다. 또한 두 프로젝트에 대한 Yara 규칙/IOC를 사전에 공개하고 백서와 함께 방어 중심의 PSPKIAudit PowerShell 프로젝트를 공개했습니다. 그러나 조직과 공급업체는 누군가가 개념 증명을 통해 공격이 가능하다는 것을 입증할 때까지 종종 "이론적" 공격에 대한 문제를 수정하거나 탐지를 구축하지 않는 경향이 있음을 발견했습니다.
Certify는 온라인에서 찾은 몇 가지 자료를 참조 및 영감으로 사용했습니다.
AD CS 작업은 여러 다른 사람들의 작업을 기반으로 구축되었습니다. 백서에 완전한 설명이 나와 있지만, 요약하면 다음과 같습니다.