はじめに
こんにちは、 ネクストモード株式会社 の sobar です。
今回は、特定のポートの利用有無を「高度なイベントクエリ」で確認するコマンドの内容について解説します。Firewall機能などで通信の統制をかける前に、「そもそも現状、ユーザーによってそのポートが利用されているか」を事前に把握しておきたいシチュエーションなどでご活用いただけるかと思います。
それでは以下より、調査 > 高度なイベント検索 より実行するクエリを2つご紹介します。
①宛先IPv4と宛先ポート、送信元ホストごとにカウントを表示(Telnet/TFTP/SNMP)
以下は宛先IPv4と宛先ポート(Telnet/TFTP/SNMP)、送信元ホスト、実行プロセスごとに通信回数をカウントして表示するクエリ例です。
|
// Find network connections on potentially risky ports (Telnet, TFTP, SNMP) #event_simpleName=NetworkConnectIP4 | in(RemotePort, values=[23, 69, 161, 162]) | groupBy([RemotePort, RemoteAddressIP4, ComputerName, ContextBaseFileName], function=count(as=ConnectionCount)) | sort(ConnectionCount, order=desc) | rename(field=RemotePort, as=DestinationPort) | rename(field=RemoteAddressIP4, as=DestinationIP) | rename(field=ComputerName, as=SourceHost) | rename(field=ContextBaseFileName, as=Process)
|
※以下は実行イメージとなります。
クエリ①の簡単な説明
1. #event_simpleName=NetworkConnectIP4
- 意味:IPv4ネットワーク接続イベントの抽出
- 詳細:CrowdStrike Falcon がログ出力する膨大なイベントの中から、IPv4 のネットワーク通信を表す #event_simpleName=NetworkConnectIP4 のログのみを対象としてフィルタリングします。
2. | in(RemotePort, values=[23, 69, 161, 162])
- 意味:特定のリスクポートへの通信のみに絞り込み
- 詳細:接続先ポート番号(RemotePort)が、指定した配列 [23, 69, 161, 162] のいずれかに一致するログを抽出します。
- 23:Telnet(通信が暗号化されない平文プロトコル)
- 69:TFTP(認証機能のない簡易ファイル転送プロトコル)
- 161 / 162:SNMP / SNMP Trap(ネットワーク機器の監視用プロトコル。設定不備による情報漏洩のリスク)
3. | groupBy([RemotePort, RemoteAddressIP4, ComputerName, ContextBaseFileName], function=count(as=ConnectionCount))
- 意味:接続要素ごとにデータをグループ化し、接続回数を集計
- 詳細:指定した4つの項目(接続先ポート、接続先IP、端末名、実行プロセス名)が同じログを1つにまとめ、その組み合わせの発生回数を ConnectionCount という新しい項目(フィールド)としてカウントします。
4. | sort(ConnectionCount, order=desc)
- 意味:集計結果を通信回数の多い順に並び替え
- 詳細:4行目で作成した ConnectionCount の数値を基準に、降順(order=desc)で並び替えます。これにより、不審な通信を最も頻繁に行っている端末やプロセスを上位に表示させることができます。
5. | rename(field=RemotePort, as=DestinationPort)
- 意味:ポート番号の表示フィールド名を変更
- 詳細:元のフィールド名 RemotePort を、より直感的に理解しやすい DestinationPort(宛先ポート)という名称に変更します。
6. | rename(field=RemoteAddressIP4, as=DestinationIP)
- 意味:接続先IPの表示フィールド名を変更
- 詳細:元のフィールド名 RemoteAddressIP4 を DestinationIP(宛先IP)に変更します。
7. | rename(field=ComputerName, as=SourceHost)
- 意味:端末名の表示フィールド名を変更
- 詳細:元のフィールド名 ComputerName を SourceHost(送信元ホスト)に変更します。
8. | rename(field=ContextBaseFileName, as=Process)
- 意味:実行プロセス名の表示フィールド名を変更
- 詳細:通信を発生させた実行ファイル名を表す ContextBaseFileName(例: cmd.exe, powershell.exe など)を Process に変更します。
②宛先ポートごとにカウントを表示(Telnet/TFTP/SNMP)
以下は、宛先ポート(Telnet/TFTP/SNMP)ごと「のみ」で通信回数を集計し、カウントを表示するシンプルなクエリ例です。
|
#event_simpleName=NetworkConnectIP4 | in(RemotePort, values=["23", "69", "161", "162"]) | groupBy([RemotePort], function=count(as=ConnectionCount)) | sort(ConnectionCount, order=desc)
|
※以下は実行イメージとなります。
クエリ②の簡単な説明
1. #event_simpleName=NetworkConnectIP4
- 意味:IPv4ネットワーク接続イベントの抽出
- 詳細:CrowdStrike Falcon が出力するログの中から、IPv4 のネットワーク通信イベントを表す #event_simpleName=NetworkConnectIP4 のログのみに対象を絞り込みます。
2. | in(RemotePort, values=["23", "69", "161", "162"])
- 意味:指定したリスクポート(23, 69, 161, 162)への通信に絞り込み
- 詳細:接続先ポート(RemotePort)が以下に示すリスクポートのいずれかであるログを抽出します。
- 23:Telnet(平文通信)
- 69:TFTP(無認証ファイル転送)"161" / "162": SNMP / SNMP Trap(機器監視プロトコル)
3. | groupBy([RemotePort], function=count(as=ConnectionCount))
- 意味:ポート番号「のみ」でグループ化し、通信回数を集計
- 詳細:端末名やIPアドレス・プロセス名は含めず、RemotePort(ポート番号)ごとだけでデータをまとめています。それぞれのポートに対して何件の通信が発生したかをカウントし、ConnectionCount というフィールド名で出力します。
4. | sort(ConnectionCount, order=desc)
- 意味:通信回数が多いポート順に並び替え
- 詳細:3行目で集計した ConnectionCount(通信件数)を基準に、降順(order=desc)で並び替えます。これにより、組織内で最も頻繁に使われているリスクポートが最上位に表示されます。
ライセンス
高度なイベントクエリを利用するためには Falcon Insight、XDR などのサブスクリプションが必要となります。
※その他ライセンスの詳細につきましては弊社までお気軽にお問合せください。
参考
さいごに
今回は特定のポートの利用有無を高度なイベントクエリで確認するコマンドの内容について解説いたしました。
この記事によってなにか新たな気づきがあり、皆さまの CrowdStrike Falconの運用一助となれば幸いです。
CrowdStrike についてのお問い合わせ
ネクストモードでは、CrowdStrikeをはじめ、OktaやNetskopeを活用したSaaS・生成AIの包括的なセキュリティ対策をご支援しています 。ご興味のある方は、ぜひお気軽にご相談ください!