mcpField
D
detecting-beaconing-patterns-with-zeek

detecting-beaconing-patterns-with-zeek

github.com/mukul975セキュリティ35.2k44 回インストール8 週間前に更新
リポジトリ

detecting-beaconing-patterns-with-zeek について

Zeek の接続ログを扱う SOC 分析者や脅威ハンター向けのセキュリティ分析スキルです。送信元・宛先 IP の組ごとに接続間隔を統計処理し、ビーコン通信の可能性を示すパターンを抽出します。

主な機能

  1. 01ZAT による Zeek conn.log の解析
  2. 02IP ペアごとの接続グループ化
  3. 03接続間隔の算出
  4. 04変動の小さい時間パターンの抽出

活用シーン

  1. 01ビーコン通信の疑いの調査
  2. 02検知ルールやハンティングクエリの作成
  3. 03監視範囲の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill detecting-beaconing-patterns-with-zeek

インストール後、Claude Code で/detecting-beaconing-patterns-with-zeekを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
scripts/
agent.py

詳細

Zeek を使ったビーコニングパターンの検出

使用するタイミング

  • ZEEK でビーコニングパターンを検出する必要があるセキュリティインシデントを調査するとき
  • このドメインの検出ルールまたは脅威ハンティングクエリを作成するとき
  • SOC アナリストがこの種の分析の構造化された手順を必要とするとき
  • 関連する攻撃手法に対するセキュリティ監視のカバレッジを検証するとき

前提条件

  • セキュリティオペレーションの概念とツールに関する知識があること
  • 安全に実行するためのテスト環境またはラボ環境にアクセスできること
  • 必要な依存関係をインストールした Python 3.8 以降がインストールされていること
  • テスト活動に対する適切な許可を得ていること

手順

ZAT(Zeek Analysis Tools)を使用して Zeek の conn.log データを読み込み、送信元 IP と宛先 IP のペアごとに接続をグループ化し、タイミングの統計量を計算してビーコニングを特定します。

from zat.log_to_dataframe import LogToDataFrame
import numpy as np

log_to_df = LogToDataFrame()
conn_df = log_to_df.create_dataframe('/path/to/conn.log')

# Group by src/dst pair and calculate inter-arrival time
for (src, dst), group in conn_df.groupby(['id.orig_h', 'id.resp_h']):
    times = group['ts'].sort_values()
    intervals = times.diff().dt.total_seconds().dropna()
    if len(intervals) > 10:
        std_dev = np.std(intervals)
        mean_interval = np.mean(intervals)
        # Low std_dev relative to mean = likely beaconing

主な分析手順:

  1. ZAT の LogToDataFrame を使用して Zeek の conn.log を DataFrame に解析する
  2. 送信元 IP と宛先 IP のペアごとに接続をグループ化する
  3. 連続する接続間の到着間隔(インターバル)を計算する
  4. 標準偏差と変動係数を計算する
  5. 変動係数が低いペアを潜在的なビーコンとしてフラグ付けする

例

from zat.log_to_dataframe import LogToDataFrame
log_to_df = LogToDataFrame()
df = log_to_df.create_dataframe('conn.log')
print(df[['id.orig_h', 'id.resp_h', 'ts', 'duration']].head())

コメント