このブログ記事では、ローカルLLM (Llama3:8B)をOllamaで活用した最適化の方法をご紹介します。目標は、RAG (検索拡張生成)を用いてそのプロセスを改善することです。RAGは、応答生成前に外部ソースのデータを取り込んで、言語モデルの出力精度を高める技術です。続いて、その出力をSplunk AITK*の機械学習機能と最新のAIプロンプト機能と組み合わせることで、Splunk検出の結果の精度を向上させます。

この調査では以下のコンポーネントを使用します。
- Model Llama 3 8B:Meta社が開発した、80億のパラメーターを持つLLM (大規模言語モデル)です。効率性に優れ、高品質のNLU (自然言語理解)およびNLG (自然言語生成)タスク向けに設計されています。
- Ollama:オープンソースのLLMをユーザーのコンピューター上でローカルかつ簡単に実行、管理、操作できるようにするためのプラットフォームです。クラウドリソースを使うことなくLlamaなどのモデルを効率的にデプロイし利用するための機能を提供します。
- Splunk Enterprise 9.3.5:マシン生成データ(ログやイベント)をリアルタイムでサーチ、監視、分析するためのプラットフォームです。
- Splunk AITK:Splunk Enterprise向けのアプリケーションです。Splunkデータを使った機械学習モデルを構築、テスト、運用するためのツールとガイド付きワークフローを提供します。バージョン5.6.0では、さまざまな改良、セキュリティアップデート、バグ修正が行われ、ユーザーエクスペリエンスとともに、新しいSplunkバージョンとの互換性が強化されました。これによって、プログラミングに関する深い知識がなくても、アルゴリズムを適用し、独自のモデルを作成して、Splunkのサーチやダッシュボードに機械学習を組み込むことができます。本バージョンでは、OpenAIやOllamaを含むLLMとの連携や統合がサポートされています。
- Splunk ESCU:Splunk Enterprise Security向けのアプリケーション兼コンテンツパッケージです。MITRE ATT&CKなどのフレームワークにマッピングされたセキュリティ検出や分析ストーリー、対応プレイブックを1カ所に集めて提供し、定期的に更新します。ESCUを使うことでセキュリティチームは、最新の検出ロジック、脅威ハンティングサーチ、自動化された対応アクションをすばやく導入できるようになり、最新の脅威に対応して組織のセキュリティ態勢を強化できます。
- Splunk ESCU攻撃データ:Splunk ESCUに含まれる検出を開発しテストする際に使用されるデータセットのコレクションです。
ESCU Llama3 RAGシステム
概要
このプロジェクトでは、ローカルのLlama3:8Bによる推論を使って、ESCU (Enterprise Security Content Update)のデータ向けに設計されたRAGシステムを実装します。このシステムは、実際の攻撃データとAIによる応答を組み合わせて、サイバーセキュリティ分析を出力します。
コア機能
- ESCUデータの読み込み:attack_data-masterリポジトリからMITRE ATT&CK技法を解析する
- 攻撃シナリオの抽出:実際の攻撃シナリオを識別する(Cobalt Strike、Sliver、TrickBot、ランサムウェアなど)
- セキュリティコンテンツの処理:Splunkのセキュリティ検出ルールを統合する
- AIによる分析:ローカルのLlama3を使い、ESCUのコンテキストでサイバーセキュリティクエリーを分析する
- プライバシーの確保:ローカルのAI推論を使い、処理を完全にオフラインで実行する
データソース
- 攻撃データ:MITRE ATT&CKにマッピングされた実際の攻撃データセット
- セキュリティコンテンツ:Splunkの検出ルールとセキュリティコンテンツ
- サンプルログ:実際の攻撃のログ(Sysmon、PowerShell、セキュリティログ)

RAGコンポーネント
データインデクサー(ESCUDataIndexer)
入力:生のESCUディレクトリとファイル
- 処理:
- MITRE技法のID (T1055)を名称(Process Injection)にマッピングする
- サブディレクトリから攻撃シナリオを抽出する
- ログのタイプとソースを分類する
- セキュリティ検出ルールを読み込む
- 出力:構造化されたナレッジベース
コンテキストジェネレーター
入力:ユーザーからのクエリーとインデックスされたESCUデータ
- 処理:
- クエリーから技法へのセマンティックマッチングを実行する
- 関連する攻撃シナリオを検索する
- 適用可能な検出ルールを選択する
- 出力:Llama3に入力するコンテキスト付きのプロンプト
Llama3推論エンジン
- 入力:コンテキストによって強化されたプロンプト
- 処理:Llama3:8Bを使い、ローカルでAI推論を実行する
- 出力:サイバーセキュリティ分析と推奨事項
上記の要素に基づいて、以下の改善を目指しました。
ESCU固有のデータの理解
- 改善前:汎用的なJSON/YAML解析では認識精度が低い
- 改善後:以下を理解する専用のESCU構造パーサーを使用
- MITRE ATT&CK技法のディレクトリ
- 攻撃シナリオのサブディレクトリ
- ログファイルの分類
- セキュリティコンテンツの統合
堅牢なエラー処理
- 複数の形式のサポート:JSON、JSONL、YAML、不正な形式のファイル
- 大容量ファイルへの対応:50MBを超えるファイルを自動的にスキップ
- グレースフルデグラデーション:個々のファイルに問題があっても処理を継続
- エンコーディングの強化:さまざまなテキストエンコーディングに対応
インテリジェントなコンテキスト生成
- セマンティックマッチング:ユーザーからのクエリーとそれに関連する技法とをマッチング
- 複数ソースによるコンテキスト:技法、検出、サンプルログを統合
- 関連性ランキング:最も関連性の高いESCUコンテンツを優先
- コンテキスト最適化:網羅性とトークン制限とのバランスを調整
ローカルAI統合
- マルチバックエンドのサポート:Ollama、テキスト生成WebUI (Open WebUI)
- 自動検出:利用可能なLlama3インスタンスを自動的に検出
- フォールバックシステム:AIを利用できないときは、構造化された応答を出力
- プライバシー優先:データはローカル環境のみで処理
パフォーマンスの最適化
- 応答のキャッシュ:繰り返されるクエリーに即時に回答
- 遅延読み込み:必要なタイミングでのみファイルを処理
- メモリー管理:大規模データセットの処理を効率化
- 増分処理:扱いやすいセグメント単位でデータを処理
Llama 3.8B ESCU RAGメトリクス
データ読み込みのパフォーマンス
- 技法ディレクトリ:最大150のMITRE技法を処理
- 攻撃シナリオ:最大300以上の実際の攻撃シナリオをインデックス
- ログサンプル:最大500以上の攻撃ログファイルをカタログ化
- 処理時間:完全なデータセットで30~60秒
- メモリー使用量:完全なESCUデータセットで2GB未満
クエリーの応答時間
- キャッシュ済みクエリー:1秒未満(即時)
- 新規クエリー:5~15秒(Llama3使用)
- フォールバックモード:2秒未満(構造化された応答)
- コンテキスト生成:1秒未満(検索時)
精度の向上
- 技法の認識:MITRE技法で精度95%以上
- シナリオマッチング:90%以上の関連シナリオ識別
- 検出マッピング:85%以上の適切な検出提案
処理が完了すると、新しいモデルファイルが作成されてOllamaに保存され、AITKから、または必要に応じてOllama WebOpenUIから実行できるようになります。
上記の内容をもとに、ESCUやAITKアルゴリズムから得られた検出技法をいくつかテストしてみました。データセットにはSplunk Boss of the SOC (BOTS)を使用しました。実行したクエリーの例とAITKのAI機能の使用例を以下に示します。
異常なSSHログイン(Botsv3)


AWSブルートフォース(Botsv3)


Splunk AITK、クラスタリング、類似の攻撃パターンのグループ化(Botsv3)
この例では、CISCO ASAデータ、Splunk AITK、トレーニング済みのLlama3:8b (ESCUによって精度を高めたLLM)を使用しました。次の検出では、KMeansを使用しています。KMeansは、データポイントを類似度に基づいて指定の数のクラスターに分ける教師なし機械学習アルゴリズムです。ここでは、類似の攻撃パターンを特定しています。

次の例では、DBSCANを使用しています。DBSCANは、データポイントを密度に基づいてクラスターにまとめる教師なし機械学習アルゴリズムで、密集したポイントをグループ化し、外れ値をノイズとして識別します。ここでは、Windowsログを使用し、コマンドラインの長さに注目しました。


まとめ
ローカルLLMはRAGによって強化し、検出の開発や分析に利用することができます。また、モデルが大規模であるほど、精度と性能が向上します。当初、Llama4 (量子化済み)をトレーニングしたところ、特に検出からの推論において、非常に高い効果が得られました。
しかし残念ながら、ハードウェアの制限によってAITKとの接続がタイムアウトするため、Llama3:8Bにダウングレードせざるを得ませんでした。ハードウェアの制限が問題にならない組織環境であれば、大きなローカルLLMを使用することで、検出のパフォーマンスと分析を確実に向上できます。Splunk、AITK、LLM、ESCUを組み合わせて実現できるユースケースやアプリケーションは数多くありそうです。皆様もぜひ、新しいアイデアを考えてみてください。
*バージョン5.6.3で、名称が「Machine Learning Toolkit」から変更となりました。
このブログはこちらの英語ブログの翻訳、森本 寛之によるレビューです。