ラテラルムーブメントを追跡する:osquery、Zeek、Sigmaを用いた実践的な検知手法

Security tutorial - IT technology blog
Security tutorial - IT technology blog

クイックスタート:なぜラテラルムーブメントが重要なのか

初期侵入(Initial Access)が最終目的であることは稀です。攻撃者がフィッシングリンクなどを通じて1台のワークステーションに侵入した瞬間から、カウントダウンが始まります。彼らはそこに留まりません。ドメインコントローラーやSQLデータベースのような価値の高い資産を見つけるために、即座にネットワーク内の探索を開始します。このフェーズはラテラルムーブメント(横方向の移動)と呼ばれます。

標準的な境界ファイアウォールでは、この動きを検知できません。それらは「南北(North-South)」トラフィック(インターネットと内部ネットワーク間)を監視していますが、サーバー間を移動する「東西(East-West)」トラフィックは無視しているからです。環境内を移動する攻撃者を捕らえるには、次の3つのレイヤーでの可視性が必要です。

  • ホスト: どのようなプロセスが実行され、誰がログインしているか? (osquery)
  • 通信(ワイヤ): 内部IP間でどのようなプロトコルが動いているか? (Zeek)
  • ロジック: 異なるログソース間でどのようにアラートを標準化するか? (Sigmaルール)

すべての初期侵入をブロックできると期待すべきではありません。むしろ、攻撃者が一歩足を踏み出すたびに「罠」にかかるような、透明性の高い内部ネットワークを構築することを目指すべきです。

ディープダイブ:検知スタックの構築

効果的なモニタリングには、考え方の転換が必要です。私は数年前から、特定のマルウェアのシグネチャを追うのをやめました。現在は、「不適切な場所で、不適切なタイミングで使用されている管理ツール」を探しています。

1. osqueryによるホストレベルの可視化

osqueryは、オペレーティングシステムを検索可能なデータベースに変換します。難解な Windows イベントログを掘り起こす必要はありません。代わりに、SQLクエリを実行してリアルタイムで異常を見つけ出すことができます。攻撃者は多くの場合、リモートサービスのインストールやスケジュールされたタスクのハイジャックによって移動します。

私は、標準的な命名規則を回避したり、一時フォルダに隠れたりしている新しいサービスをフラグ立てするために、以下のクエリを使用しています。

SELECT name, display_name, path, start_type 
FROM services 
WHERE start_type = 'SERVICE_AUTO_START' 
AND path NOT LIKE 'C:\Windows\System32\%' 
AND path LIKE '%\Temp\%';

もし “SystemUpdate” という名前のサービスが C:\Users\Public\ からバイナリを実行しているのを見つけたら、それはコマンド&コントロール(C2)のビーコンか、PsExec のようなツールである可能性が高いでしょう。

2. Zeekによるネットワークメタデータ

Zeekは伝統的なIDSではなく、強力なメタデータエンジンです。単に接続があったことを知らせるだけでなく、その接続中に具体的に何が起こったかを記録します。ラテラルムーブメントに関しては、smb_files.logntlm.log に注目してください。

攻撃者は横方向の移動にSMB(Server Message Block)を多用します。一般的なユーザーが1日に接続するファイル共有は2、3個程度でしょう。もしZeekが、1台のワークステーションから60秒以内に50以上のユニークな内部IPへのSMB接続試行を示しているなら、それは明らかなレッドフラグです。この挙動は、CrackMapExecBloodHound のようなツールによる自動スキャンの兆候であることが多いです。

3. クレデンシャルの要塞化

検知は不可欠ですが、攻撃の摩擦(困難さ)を高めることはさらに重要です。よくある間違いは、フリート全体で同一のローカル管理者パスワードを使用することです。1台が陥落すれば、すべてが陥落します。私が新しいサーバーをプロビジョニングする際は、すべてのローカル管理者アカウントにユニークでエントロピーの高いパスワードを設定するようにしています。

迅速かつ安全な生成には、toolcraft.app/ja/tools/security/password-generator のツールを使用しています。これはブラウザ内で完全に動作するため、機密データがネットワークに流れることはありません。エンタープライズ環境では Microsoft LAPS のようなツールがゴールドスタンダードですが、スタンドアロンシステム用にゼロナレッジのジェネレーターを用意しておくことで、単一の侵害されたクレデンシャルがネットワーク全体の「マスターキー」になるのを防げます。

Sigmaルールによる高度な相関分析

osqueryやZeekのデータは、分析できてこそ価値があります。Sigmaは検知のためのベンダーニュートラルな言語を提供します。一度ルールを書けば、それを Splunk、ELK、Microsoft Sentinel などに適用できます。

WMI実行の検知

Windows Management Instrumentation (WMI) は、「環境寄生型攻撃(Living off the Land)」のお気に入りです。OS標準機能で強力でありながら、見落とされがちです。以下は、リモートシステム上でプロセスを生成するために使用されるWMIを捕らえるSigmaルールです。

title: リモートWMIプロセス生成
status: stable
description: リモートノード上でプロセスを作成するwmic.exeを検知します。
logsource:
    product: windows
    service: security
detection:
    selection:
        EventID: 4688
        CommandLine|contains|all:
            - 'wmic'
            - '/node:'
            - 'process call create'
    condition: selection
level: high

このルールは、従来のウイルスファイルをディスクに作成することなくリモートでコードを実行するために攻撃者が使用する、特定のコマンドライン引数をターゲットにしています。

SSHトンネリングの特定

Linux環境では、移動は通常SSH経由で行われます。私は「長時間、低容量(Long-Lived, Low-Volume)」のセッションを探します。12時間開いたままでありながら転送データ量が5MB未満のSSH接続は、リバースシェルや持続的なC2トンネルである場合が多々あります。

現場からの実践的なヒント

長年のインシデント対応の経験から、以下の3つの戦略が一貫して最良の結果をもたらします。

1. 影響範囲(ブラストライジアス)を縮小する

ワークステーションはすでに侵害されているものと仮定してください。ホストベースのファイアウォールを使用して、ワークステーション同士が直接通信するのを防ぎます。マーケティング部門のノートPCが、経理部門のノートPCに対してRDP接続(ポート3389)を開始する理由はありません。そのようなことが起きた場合、SIEMは即座にアラートを発火させるべきです。

2. 「Pass-the-Hash」を監視する

NTLMログを注意深く監視してください。環境を Kerberos に移行済みの場合、NTLM認証の急激なスパイクは疑わしいものです。これは多くの場合、攻撃者が Mimikatz を使用し、メモリから取得したパスワードハッシュを使って認証を行っていることを示しています。これにより、実際のクリアテキストパスワードを知らなくてもログインが可能になります。

3. ベースラインを確立する

「正常」がどのようなものかを知らなければ、「異常」を特定することはできません。2週間かけてネットワークの「鼓動」を観察してください。どのサービスアカウントが午前2時にログインしているか、どのスクリプトが定期的に実行されているかを記録します。これらの既知の管理タスクをホワイトリストに登録すれば、人間のハッカーによる手動の、たどたどしいコマンド操作は一目瞭然になります。

最後に

一度にすべてをやろうとしないでください。まずは最も重要な5台のサーバーに osquery を導入することから始めましょう。コアスイッチに Zeek を追加して、データセンターへのトラフィックを監視します。ホストレベルのSQLクエリとネットワークメタデータ、そしてSigmaルールを組み合わせることで、ネットワークを攻撃者が隠れる場所のない、明るく照らされた環境へと変えることができるのです。

Share: