1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Day 16: エンドポイントの要塞化:攻撃者の「手足」を縛るOS設定術

1
Posted at

はじめに

どれだけ高価なEDR(振る舞い検知)を導入しても、OS自体が「攻撃者に都合の良い設定」のままでは、検知をすり抜けられるリスクが残ります。

ランサムウェア攻撃の多くは、侵入後にPowerShellWMI、あるいはコマンドプロンプトを駆使して、シャドウコピーの削除(バックアップ破壊)や内部探索を行います。本記事では、エンドポイントを「要塞化(Hardening)」し、攻撃者のスクリプト実行を物理的に困難にする設定を解説します。


1. PowerShellの制限:両刃の剣を制御する

PowerShellは非常に強力ですが、デフォルト設定では攻撃者に悪用されやすい状態です。

① 実行ポリシー(Execution Policy)の最適化

「デフォルトが Restricted だから安心」と思っていませんか? 攻撃者は powershell.exe -ExecutionPolicy Bypass という1行で、この制限を簡単に無効化してスクリプトを実行します。

  • 対策: GPO(グループポリシー)で 「スクリプト実行を強制的に制限する」 設定を流し込み、コマンドラインからの個別バイパスを無効化します。

② 言語モードの制限(Constrained Language Mode)

これが最も効果的です。Constrained Language Mode に設定すると、COMオブジェクトの作成やWin32 APIの直接呼び出しなど、高度な攻撃用スクリプトが動かなくなります。

  • 一般ユーザーにはこの制限をかけ、管理者のみがフル機能を使えるように分離します。

③ PowerShell v2の無効化

古いPowerShell v2は、最新版のような「ログ記録機能(AMSI)」が備わっていません。攻撃者はあえて powershell.exe -version 2.0 と指定して、監視の目を盗みます。

  • 対策: Windowsの機能から「PowerShell 2.0」をアンインストールします。

2. 攻撃者が狙う「不要なサービス」の停止

「デフォルトでON」になっているが、多くの一般社員には不要な機能をオフにします。

  • LLMNR / NetBIOS の無効化: * 攻撃者がネットワーク内で「偽の応答」を返し、パスワードハッシュを盗み出す(Responder攻撃)のを防ぎます。
  • Windows Script Host (WSH) の無効化:
    • .vbs.js ファイルをダブルクリックして感染するマルウェアを、レジストリ設定一つで無力化できます。
  • リモートアシスタンスのオフ:
    • 意図しない遠隔操作の口を塞ぎます。

3. 「コマンドライン引数」のロギング(Event ID 4688)

要塞化とは「防ぐ」だけでなく、「証拠を残す」ことでもあります。
Windowsのデフォルト設定では、「どのプログラムが起動したか」は記録されますが、 「どんな引数(コマンド)で実行されたか」 は記録されません。

例: powershell.exe が動いたことはわかるが、 powershell.exe -enc [難読化された攻撃コード] が動いたことがわからない。

  • 対策: グループポリシーの「プロセス作成イベントにコマンドラインを含める」を有効にします。これにより、SIEMやログ解析で攻撃の全容が見えるようになります。

4. 特権の分離:Local Admin Password Solution (LAPS)

攻撃者が1台のPCで「ローカル管理者パスワード」を盗んだ際、全端末で同じパスワードを使い回していると、ネットワーク全体が即座に陥落します。

  • LAPSの導入: * 端末ごとに異なるランダムなローカル管理者パスワードを自動生成し、ADの属性に保存します。これにより、1台のパスワードが漏れても、他のPCへ「横展開」されるのを防げます。

5. 【設定例】PowerShellを要塞化するレジストリ/GPO

Qiita読者がコピペで確認・検証できる情報を載せます。

# 現在のPowerShell言語モードを確認する
$ExecutionContext.SessionState.LanguageMode

# ConstrainedLanguage に強制設定(環境変数経由の例)
[Environment]::SetEnvironmentVariable('__PSLockdownPolicy', '4', 'Machine')

6. まとめ:攻撃者にとって「居心地の悪い」環境を作る

エンドポイントの要塞化に「銀の弾丸」はありません。

  1. PowerShellの自由度を奪う(言語モードの制限)。
  2. 不要なレガシープロトコル(LLMNR等)を捨てる。
  3. すべてのコマンド実行履歴をログに刻む。

これら地味な設定の積み重ねが、攻撃のコストを爆発的に高め、最終的に「この会社を攻めるのは面倒だ」と攻撃者に諦めさせることにつながります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?