Linux向け機械学習駆動の行動異常検出(eBPF + Isolation Forestを使用)
Guarddは低レベルのシステムイベント(プロセス実行、ネットワークアクティビティ)を収集し、時間ウィンドウの特徴ベクトルに集約し、機械学習モデルを使用して異常な動作を検出します。
Guarddは未知の脅威の検出に重点を置いています
[!WARNING] このプロジェクトは開発中です 機能と検出精度は現在も積極的に改善されています フィードバック、提案、貢献を歓迎します
guarddは単一のsystemdサービスとして実行され、データ収集、トレーニング、検出の全ライフサイクルを管理します。
起動時:
モデルが存在しない場合、guarddはベースラインの行動データの収集を開始します
初期トレーニングのために1日分(デフォルト)のデータを収集します
トレーニングが成功すると、自動的に検出モードに切り替わります
運用中:
システムアクティビティは継続的に時間ウィンドウに集約され、特徴ベクトルに変換されます
各ウィンドウはトレーニング済みのIsolation Forestモデルによってスコアリングされます
異常はNDJSONとして出力されます
継続的:
モデルは週に1回自動的に再トレーニングされます
再トレーニング後、更新されたモデルで検出が直ちに再開されます
git clone https://github.com/benny-e/guardd.git
cd guardd
sudo bash install.sh
これにより以下が行われます:
システム依存関係のインストール
プロジェクトを /opt/guardd にコピー
Python仮想環境の作成
パッケージのインストール
eBPFコンポーネントのビルド
systemdサービスのインストール
sudo systemctl start guardd.service
systemctl status guardd.service
journalctl -u guardd.service -f
guarddには、最近のアラートを参照したり異常を検索するためのターミナルUIが含まれています
起動するには:(guardd.service起動後)
guardd tui
systemd サービスをインストールせずに、コマンドラインから直接 guardd を実行することもできます。他の init システムで実行するように設定可能です
sudo guardd daemon
データ収集:
sudo guardd collect
モデルトレーニング:
sudo guardd train
検出の実行:
sudo guardd detect
guarddは config.toml ファイルによる設定をサポートしています。
デフォルトでは、デーモンは以下の場所を探します:
/opt/guardd/config.toml
[daemon]
mode = "auto"
bootstrap_retry_seconds = 60
retrain_interval_seconds = 604800
[training]
min_training_rows = 1
contamination = 0.01
n_estimators = 200
threshold_percentile = 10.0
[paths]
db_path = "/opt/guardd/data/features.db"
model_path = "/opt/guardd/data/model.bundle"
guardd_path = "/opt/guardd/ebpf/guardd"
guarddのライフサイクルを制御します。
mode
-- "auto" → 完全なパイプライン(収集→トレーニング→検出)
-- "collect" → データ収集のみ
-- "detect" → 検出のみ実行(モデルが必要)
bootstrap_retry_seconds
-- モデルが存在しない場合に、guarddが初期トレーニングを試行する間隔
-- このフェーズでは、guarddはデータを収集し、定期的に一時停止してトレーニングを試みます
retrain_interval_seconds
-- 初期ブートストラップ後にモデルが再トレーニングされる間隔
-- デフォルト:7日
モデルの動作と要件を制御します。
min_training_rows
-- トレーニングに必要な最小特徴ウィンドウ数
-- 満たされない場合、トレーニングは失敗し、後で再試行します
contamination
-- データ内の異常の想定割合
-- Isolation Forestに直接渡されます
-- 一般的な値:0.01~0.05
n_estimators
-- Isolation Forest内の木の数
-- 数が多いほど正確ですが、トレーニングが遅くなります
threshold_percentile
-- 異常のカットオフスコアを決定します
-- 低いほどより積極的な検出になります
guarddがデータを読み書きする場所を制御します。
db_path
-- 特徴ベクトルと異常を格納するSQLiteデータベース
model_path
-- 検出に使用されるシリアライズされたモデルバンドル
guardd_path
-- eBPFコレクタバイナリへのパス
設定値はCLIのデフォルトを上書きします
CLI引数は明示的に指定された場合、設定よりも優先されます
モデルの精度は良好なトレーニングデータに大きく依存します。トレーニング時間が長いほど、より正確な検出器になります
python3
python3-venv
python3-pip
clang
llvm
libbpf-dev
libelf-dev
bpftool
build-essential
pkg-config
sqlite3