概要
- LLMエージェントを用いた脆弱性調査における 記憶管理の課題 を解説
- 記憶の喪失や 誤った結論の維持 を防ぐための新アプローチを提案
- Datalog を用いた事実と推論の管理手法を紹介
- Lemmalogという LLM支援型Datalogエンジン の仕組みを説明
- 記憶の「検索」と「現在の真実」の違いを明確化
LLMエージェントの脆弱性調査における記憶の課題
- LLMエージェントは 大規模コードベースの解析 や 攻撃面の特定 に有用
- 調査が長時間に及ぶと、 過去の結論や前提を忘却 しやすい
- 既に否定された仮説の再提案 や、誤った前提に基づく推論が発生
- LLMに「それは誤り」と伝えても、 依存する他の知識が自動で修正されない 問題
記憶管理の従来手法とその限界
- 多くのシステムは 過去の会話や観察結果を保存・埋め込み・検索 して再利用
- この手法では「 何を知っているか」ではなく「 何を話したか」のみ保持
- 調査中に前提が覆った場合、 LLMが自力で有効・無効な結論を再判別 する必要
- 事実の追加・削除に伴う結論の自動更新 が困難
プログラム解析的な視点
- プログラム解析では、「 事実」と「 規則」から新たな事実を導出
- 入力事実が変化した際、 影響を受ける結論のみを効率的に更新 可能
- LLMにも同様の 状態管理 が求められる
Datalogの導入
- Datalog は宣言型ロジック言語で、事実と規則から新たな事実を導出
- 例:
- controls(attacker, object_a).
- points_to(object_a, object_b).
- kernel_object(object_b).
- controls_kernel_object(Attacker) :- controls(Attacker, ObjectA), points_to(ObjectA, ObjectB), kernel_object(ObjectB).
- 事実が訂正された場合、依存する結論を自動で無効化できる
Lemmalogの仕組み
- LLMは「 曖昧な自然言語・コード・デバッガ出力」を 構造化事実 に変換
- Lemmalogは 事実・規則・導出事実 の管理と推論を担当
- LLMは「意味理解」、Lemmalogは「 状態の一貫性管理」を分担
事実の削除・差し替えと再評価
- 事実の 追加は容易だが、削除は依存関係の追跡が必要
- 例:c :- a. c :- b. の場合、a削除だけではcは消えない
- 複数の観察に支えられた結論 の正確な維持
- なぜその結論に至ったか (プロヴェナンス)のトラッキング
- 事実の有効期間 (バリディティ・インターバル)を管理し、過去の状態も参照可能
ベクトルデータベースとの比較
- ベクトルDBは「 過去の関連情報の検索」には有効
- しかし、「 現在何が真実か」「依存する結論の自動無効化」には非対応
- 記憶の検索 と 状態の維持 は別問題
脆弱性調査の分析状態モデル
- 観察、仮定、関係、仮説、結論を プログラム解析の要素 として整理
- 入力事実→規則→導出事実→固定点(現在の知識)
- 依存関係の追跡により、 結論の根拠説明(プロヴェナンス) が可能
LLMとLemmalogの役割分担
- LLM :フロントエンド(自然言語・コード→構造化事実への変換)
- Lemmalog :中間表現・解析エンジン(事実・規則による状態管理)
- LLM による再ナチュラル言語化・次の実験提案なども可能
Lemmalogの機能と効果
- インクリメンタル評価・事実の撤回・プロヴェナンス・時系列管理・集約・ハイブリッド検索 など多彩な機能
- LLMの「 一貫した知識管理」を強化し、 誤った結論の維持や記憶喪失を防止
- 記憶の「 検索」と「 現在の真実」を明確に分離し、 複雑な調査をより信頼性高く支援