【CrowdStrike】外部通信としてドメインとリモートIPを並べて表示・確認する方法について(NG-SIEM)

はじめに

こんにちは、 ネクストモード株式会社 の sobar です。

今回は検知内容の調査等を行う際、対象端末のネットワーク通信として検知前後の外部通信(未知ドメイン・新規ASNなど)の発生について確認が必要なケースを想定します。そういった際に通信を行ったドメインを確認する方法の一例として次世代SIEM > 高度なイベント検索で確認する方法をご紹介します。

今回使用するクエリ


今回は以下のようなクエリを使用します。「ComputerName=""」のところは対象の端末のコンピュータ名を入力します。

// 1. 調査対象の端末とイベントの絞り込み
// Find outbound network connections and DNS queries from LAPTOP-XXXXXXXX

ComputerName="LAPTOP-XXXXXXXX"
| #event_simpleName=NetworkConnectIP4 OR #event_simpleName=NetworkConnectIP6 OR #event_simpleName=DnsRequest
// 2. アウトバウンド(送信)通信のみを抽出(条件分岐)

// Filter for outbound connections (ConnectionDirection=0 means outbound)
| case {
    #event_simpleName=NetworkConnectIP4 | ConnectionDirection=0 ;
    #event_simpleName=NetworkConnectIP6 | ConnectionDirection=0 ;
    #event_simpleName=DnsRequest | * ;
  }
// 3. 空白(欠損値)データの補完
| default(field=ContextBaseFileName, value="N/A")
| default(field=DomainName, value="N/A")
| default(field=RemoteAddressIP4, value="N/A")
| default(field=RemoteAddressIP6, value="N/A")
| default(field=RemotePort, value="N/A")
// 4. タイムスタンプの人間向けフォーマット変換
| formatTime(field=ContextTimeStamp, format="%Y-%m-%d %H:%M:%S", as=EventTime)
| table([@timestamp, EventTime, #event_simpleName, ContextBaseFileName, DomainName, RemoteAddressIP4, RemoteAddressIP6, RemotePort, LocalPort])
// 5. 結果の整形表示と時系列の並び替え
| sort(@timestamp)

(※コピペ後に発生する余計なスペース等は削除してください。)

クエリの簡単な説明

1. 調査対象の端末とイベントの絞り込み

調査対象の端末を限定(ComputerName="LAPTOP-XXXXXXXX")、取得するログ(イベント)を以下の3種類に絞り込み

  • NetworkConnectIP4 : IPv4でのネットワーク接続
  • NetworkConnectIP6 : IPv6でのネットワーク接続
  • DnsRequest : DNSへの名前解決リクエスト(IPアドレスを知るためにドメイン名を問い合わせる通信)

2. アウトバウンド(送信)通信のみを抽出(条件分岐)

case 構文を使って、イベントの種類に応じたフィルタリング
  • ネットワーク接続イベント(IPv4 / IPv6)の場合は、ConnectionDirection=0(アウトバウンド:自端末から外部への送信通信)であるものだけを通過、外部からの受信(インバウンド)は除外。
  • DNSリクエストイベントの場合は、方向の概念がないため *(すべて通過させる)を指定。

3. 空白(欠損値)データの補完

default コマンドでログデータの中で「値が存在しない(空欄)」の項目に、自動的に N/A(該当なし)という文字列を挿入。

例えば、DNSリクエストのログには「相手先のIPアドレス(RemoteAddress)」や「ポート番号(RemotePort)」が含まれていないことがあり、逆に、直接IPアドレスで通信した場合は「ドメイン名(DomainName)」が空欄になる。表形式にした際にエラーや表示崩れを防ぎ、見やすくするための処理。

4. タイムスタンプのフォーマット変換

formatTime コマンドでコンピューターが扱う形式(UNIX時間など)で記録されている ContextTimeStamp の値を、読みやすい 年-月-日 時:分:秒 の形式(format="%Y-%m-%d %H:%M:%S")に変換し、それを新しく EventTime という項目名として定義(as=)。

5. 結果の整形表示と時系列の並び替え

table コマンドで、調査に必要な情報だけを列として抽出して表形式で出力。

最後に sort(@timestamp) を使い、イベントが起きた古い順に時系列で並び替え。

NG-SIEM > 高度なイベント検索で確認


次世代SIEM > 高度なイベント検索 を開きます。

クエリを貼り付けましたら、調査対象期間を指定し、実行します。

crowdstrike-how-to-check-for-the-occurrence-of-external-communications_01

出力結果より、ドメインとリモートIPを並べて表示・確認が確認できます。

crowdstrike-how-to-check-for-the-occurrence-of-external-communications_03

また、右上の保存 > データをファイルにエクスポートよりファイルをCSVに保存することができますので、解析に役立てられます。

crowdstrike-how-to-check-for-the-occurrence-of-external-communications_04

ライセンス


今回と同様の対応・確認を行う際には以下のCrowdStrike Falcon のライセンスが必要となります。

 ※その他ライセンスの詳細につきましては弊社までお気軽にお問合せください。 

 参考


さいごに


今回は通信を行ったドメインを確認する方法の一例としてNG-SIEM > 高度なイベント検索で確認する方法をご紹介しました。

この記事によってなにか新たな気づきがあり、皆さまの CrowdStrike Falconの運用一助となれば幸いです。

CrowdStrike についてのお問い合わせ

ネクストモードでは、CrowdStrikeをはじめ、OktaやNetskopeを活用したSaaS・生成AIの包括的なセキュリティ対策をご支援しています 。ご興味のある方は、ぜひお気軽にご相談ください!