みなさんこんにちは。guardd という機械学習プロジェクトに取り組んでいて、ML側についてフィードバックをいただきたく投稿しました。
これは基本的に、Isolation Forest を使った Linux 向けのホストベースの異常検知システムです。実行(exec)やネットワークのイベントを収集し、それらを 60 秒のウィンドウにグルーピングし、その後モデルにスコアリングさせる特徴ベクトルに変換しています。
現時点の特徴量は、例えば exec とネットワークイベントの回数、あるウィンドウ内に現れるユニークなプロセス数・ファイル数・IP数・ポート数、いくつかの親子関係のパターン、特徴量間のいくつかの単純な比率などです。さらに「新規 vs ベースライン」の追跡もあり、学習中に見られなかったプロセスや関係が現れたかどうかのような指標も含めています。
学習は完全に教師なしです。ベースラインデータを収集し、Isolation Forest を学習させ、検知では score_samples を使用します。閾値は、学習スコア分布からのパーセンタイルに基づいて決めています。
いま一番の問題は誤検知(false positives)で、特にブラウザのようなものからの誤検知が多いです。ばらつきが大きいものは、ベースラインに何が入っていたか次第で異常に見えてしまうことがあり、モデルは学習データにかなり敏感です。
今は、時刻(time of day)や活動パターンのような時間ベースの特徴量を追加すること、正規化をもう少し改善すること、バースト的な振る舞いをうまく扱えるようにすることを検討しています。
この種のデータに対する特徴量設計について、人々がどう考えているのか知りたいです。ノイズは多いが通常の振る舞いについて Isolation Forest の感度を下げるにはどうすればいいのか、またここで完全に教師なしのままでいるのが妥当なのか、それともよりハイブリッドな方向に進めたほうがよいのか、意見を伺いたいです。
アプローチについての考えがあれば嬉しいです。
リポジトリはこちらです: https://github.com/benny-e/guardd.git
[link] [comments]




