はじめに
本稿では、Kali Linux OS環境下において「Evil-WinRM」ツールを使った、リモートからのWindows OS環境に対する「探索」(Post-Exploitation)について検証します。
WinRMとは
「Windows Remote Management (WinRM)」とは、MicrosoftによるWS-Management Protocolの実装です。これにより、さまざまなベンダーのハードウェアとオペレーティングシステムの相互運用を可能にし、システム管理者の負担を軽減することを目指しています。
一方で、被害者のマシンで、WinRMサービスが有効になっている場合、環境内における**「Lateral Movement(横展開)**」に利用可能な方法の一つになります。
MITER ATT&CKが示す「ATT&CK Matrix for Enterprise」では、「TA0008: Lateral Movement」戦術(Tactic)における戦法(Technique)の一つとして「T1028: Windows Remote Management」を分類しています。
また、「CAPEC(Common Attack Pattern Enumeration and Classification:共通攻撃パターン一覧)」では、「CAPEC-555:盗まれた資格情報を使用したリモートサービス」として分類しています。
要素名 | 概要 | ID |
---|---|---|
Technique | 攻撃に使われる技術(戦法) | T1028 |
Tactics | 戦術:使われた技術によって達成する(目指す)ゴール | TA0008 |
Evil-WinRM
Evil-WinRM
ツールは、WinRM
サービスが有効(通常は5985/tcp
で応答)かつ、資格情報とアクセス許可がある場合に使用することのできるリモートシェルプログラムです。
Evil-WinRM
ツールを介することで、リモートのWindowsサーバーで稼働しているWinRM
サービスに接続することができ、インタラクティブなPowerShell
を取得することができます。
5985/tcp open http syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
$ ./evil-winrm.rb --help
Evil-WinRM shell v2.3
Usage: evil-winrm -i IP -u USER [-s SCRIPTS_PATH] [-e EXES_PATH] [-P PORT] [-p PASS] [-H HASH] [-U URL] [-S] [-c PUBLIC_KEY_PATH ] [-k PRIVATE_KEY_PATH ] [-r REALM]
-S, --ssl Enable ssl
-c, --pub-key PUBLIC_KEY_PATH Local path to public key certificate
-k, --priv-key PRIVATE_KEY_PATH Local path to private key certificate
-r, --realm DOMAIN Kerberos auth, it has to be set also in /etc/krb5.conf file using this format -> CONTOSO.COM = { kdc = fooserver.contoso.com }
-s, --scripts PS_SCRIPTS_PATH Powershell scripts local path
-e, --executables EXES_PATH C# executables local path
-i, --ip IP Remote host IP or hostname. FQDN for Kerberos auth (required)
-U, --url URL Remote url endpoint (default /wsman)
-u, --user USER Username (required)
-p, --password PASS Password
-H, --hash HASH NTHash
-P, --port PORT Remote host port (default 5985)
-V, --version Show version
-n, --no-colors Disable colors
-h, --help Display this help message
Evil-WinRMのインストール
Gitクローンを作成し、システムの依存関係を手作業で解決する方法でインストールを行います。
- 依存関係の解決を行う。
~$ sudo gem install winrm winrm-fs colorize stringio
- リポジトリのクローンを作成する。
~$ git clone https://github.com/Hackplayers/evil-winrm.git
- `evil-winrm`の準備完了。次のコマンド構文では、`WinRM`サービスを実行しているWindowsサーバー`192.168.1.100`に対するリモートシェルの確立を行っています。シェルの確立には`<ユーザー名>`と`<パスワード>`が必要であることにご注意ください。
~$ cd evil-winrm && ruby evil-winrm.rb -i 192.168.1.100 -u <ユーザー名> -p '<パスワード>' -s '<Powershellスクリプトのローカルパス>' -e '<C#プログラムの実行パス>'
パスワードをクリアテキストで入力したくない場合は、
-p
パラメーターを使用することで変更できます。
Evil-WinRMの使い方
ここでは、evil-winrm
コマンドにてリモートシェルを確立した後に実行できるコマンド群について確認します。
upload コマンド
ローカルファイルはタブキーを使用して自動補完できます。ローカルファイルがevil-winrm.rb
ファイルと同じディレクトリにある場合、<リモートパス>
を指定する必要はありません。
*Evil-WinRM* PS C:\Users\hacker\Documents> upload <ローカルパス> <リモートパス>
例えば、プロセスのメモリ情報(メモリダンプ)を取得するために「ProcDump」をアップロードすることがあります。被害者のパスワード情報がメモリイメージ上にプレーンテキスト状態で残されている可能性を調査します。
download コマンド
リモートファイルが現在のディレクトリにある場合、<ローカルパス>
を設定する必要はありません。
*Evil-WinRM* PS C:\Users\hacker\Documents> download <リモートパス> <ローカルパス>
services コマンド
すべてのサービスをリストすることができます。このとき、管理者権限は必要ありません。
*Evil-WinRM* PS C:\Users\hacker\Documents> services
Path Privileges Service
---- ---------- -------
C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe False ADWS
cmd.exe /c echo drzlyx > \\.\pipe\drzlyx False drzlyx
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SMSvcHost.exe True NetTcpPortSharing
C:\Windows\SysWow64\perfhost.exe False PerfHost
C:\Windows\servicing\TrustedInstaller.exe False TrustedInstaller
"C:\Program Files\VMware\VMware Tools\VMware VGAuth\VGAuthService.exe" False VGAuthService
"C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" False VMTools
"C:\Program Files\VMware\VMware Tools\VMware CAF\pme\bin\CommAmqpListener.exe" False VMwareCAFCommAmqpListener
"C:\Program Files\VMware\VMware Tools\VMware CAF\pme\bin\ManagementAgentHost.exe" False VMwareCAFManagementAgentHost
"C:\Program Files\Windows Defender\NisSrv.exe" True WdNisSvc
"C:\Program Files\Windows Defender\MsMpEng.exe" True WinDefend
WinRMアクティビティの検出
WindowsログからWinRMアクティビティを検出
WinRM
サービスを使用する場合、Windowsは関連するログを2つの場所に記録します。
- %SystemRoot%\System32\Winevt\Logs\Security.evtx
- %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-WinRM%4Operational.evtx
参考文献
- Evil-WinRM, https://github.com/Hackplayers/evil-winrm
- Windows Remote Management, https://docs.microsoft.com/ja-jp/windows/win32/winrm/portal
- Demystifying WinRM, https://www.bloggingforlogging.com/2018/01/24/demystifying-winrm/
- JPCERT/CC, ツール分析結果シート, https://jpcertcc.github.io/ToolAnalysisResultSheet_jp/
- A look under the hood at Powershell Remoting through a cross plaform lens, http://www.hurryupandwait.io/blog/a-look-under-the-hood-at-powershell-remoting-through-a-ruby-cross-plaform-lens
- 今知るべきATT&CK|攻撃者の行動に注目したフレームワーク徹底解説, https://blogs.mcafee.jp/mitre-attck