悪意あるWindowsサービスの実行
設定対策?
悪意あるWindowsサービスの実行 †
対象OS †
- Windows
必要なアクセス許可 †
- 管理者
- SYSTEM
概説 †
Windowsサービスとは、ユーザーインターフェースを持たずにバックグラウンドで常駐して動作するプログラムです。Windowsが起動した際に自動起動するように設定できるため、悪意あるプログラム(マルウェア)をWindows サービスとしてインストールできれば、マルウェアの実行や永続化が可能となります。
悪意あるWindowsサービスは、キーボード・画面の窃取、C&Cサーバーとの通信、リモート操作などの機能を提供します。
攻撃評価 †
戦術分類 | 119 Value | Pen Value |
初期侵入 | 3 | 3 |
119 Value:Min:1 Max:3 数値が高いほど攻撃実績が多い
Pen Value:Min:1 Max:3 数値が高いほどペネトレーションテストで攻撃が成功しやすい
MITRE 緩和策 †
特権アカウント管理 †
アクセス許可によって、上位のアクセス許可レベルで実行されるサービスが、下位のアクセス許可レベルを持つユーザーによって作成または操作されないようにしてください。
psexeを使用せずアンインストールする、もしくは -uオプションを使用しない。(Pass the Hashのおそれ、必ず管理者のコンテキストでKervberos認証されるようにする)
ファイルとディレクトリのアクセス許可を制限する †
アクセス許可レベルの高いサービスバイナリを、アクセス許可レベルの低いユーザーが置換または変更できないようにしてください。
Windows 10 STIG †
V-63889 認証後のクライアントの偽装ユーザー権利は、管理者、サービス、ローカルサービス、およびネットワークサービスにのみ割り当てる必要があります。
Windows 2016 STIG †
V-73785 認証後のクライアントの偽装ユーザー権利は、管理者、サービス、ローカルサービス、およびネットワークサービスにのみ割り当てる必要があります。
Others †
CWE-428:引用符で囲まれていない検索パスまたは要素に該当するサードパーティ製のWindowsサービスを修正する。 †
空白を含むパスを正しく "C:\Program Files\abc\service.exe" ダブルクォテーションで囲まないと、プログラム C:\Program.exe 引数 file\abc\service.exe という解釈ができ、Program.exe がローカルシステムアカウントで実行できる。
デスクトップ エクスペリエンス搭載 Windows Server 2016 上のシステム サービスを無効にする場合のガイダンス †
PowerShell でサービスの変更を検知する †
Get-Service でサービス名を取得し、Sha256とサービス数を比較する。
$Name=Get-Service |Select Name $hash=[string]::concat(([security.cryptography.SHA256]::create().computehash([text.encoding]::ascii.getbytes($Name))|%{$_.tostring("x2")})) Write-host "ハッシュ値は $hash" Write-host "サービス数は $($Name.Length)"