Aileron Journal について
Aileron Journalは、AIエージェントの操作を監査する読み取り専用MCPサーバーです。改ざん検知可能なジャーナルを検証し、記録されたツール呼び出しを検索できます。
主な機能
- 01ハッシュチェーンと署名済みチェックポイントの検証
- 02ツール、状態、時刻によるイベント検索
- 03ポリシールールの該当内容の説明
- 04パスを制限した読み取り専用アクセス
活用シーン
- 01エージェントの記録が改ざんされていないか確認
- 02指定期間のツール呼び出しを調査
- 03ポリシールールの検知内容をアシスタントに尋ねる
MCP 対応
サーバーモードでは、verify_journal、query_events、explain_ruleの読み取り専用ツールでジャーナルを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| journal | string | はい | 提供されたルートディレクトリからの相対パスで指定するジャーナルのファイル名。 |
詳細
Aileron
Aileron は AI エージェント用のフライトレコーダーです。
単なるトレーサーではありません。Aileron は、エージェントが行うすべてのツール呼び出しについて、改ざんを検知でき、再生可能な記録を生成します。これはオフラインで検証できる証拠であり、信頼するしかないテレメトリーではありません。
- 改ざんを検知できる監査証跡。 すべてのエージェントのアクションは、Ed25519 署名付きチェックポイントを備えた SHA-256 ハッシュチェーン付きの JSONL ジャーナルに追記されます。1 行でも編集、削除、並べ替えをすると、
aileron verifyがチェーンの破損箇所を正確に示します。 - ツール呼び出しに対するポリシー適用。 Sigma に似た YAML ルールで、
allow/alert/blockのアクションを指定できます。MCP stdio プロキシまたは SDK デコレーターを介して、実行前に適用されます。ブロックされたツール呼び出しは実行されず、試行はログに記録されます。 - フォレンジック向けインシデントの再生。 1 つのコマンドで、ジャーナルを検証バッジとフィルター可能なタイムラインを備えた自己完結型 HTML インシデントレポートに変換できます。「エージェントが実際に何に触れたのか?」という疑問に答えます。
60 秒で始める
$ pip install aileron
$ aileron demo # scripted fake-agent session (no network, no keys needed)
demo: wrote 8 events to demo.chain.jsonl
demo: chain VERIFIED (8 events)
demo: blocked shell call by rule aileron-001
demo: 2 anomaly alert(s) emitted
$ aileron verify demo.chain.jsonl
OK: 8 events verified in demo.chain.jsonl
$ aileron report demo.chain.jsonl -o incident.html # open it in a browser
$ aileron serve --root . # or ask an assistant instead
デモはデフォルトのダイジェストのみのモードで実行されます。破壊的なシェル呼び出しはコンテンツルールによってブロックされ、振る舞いベースラインによってフラグが付けられますが、ディスク上のジャーナルには引数のダイジェストのみが記録され、実際のコマンドは決して記録されません。
機能
| 機能 | 内容 |
|---|---|
| ハッシュチェーン付きジャーナル | 追記専用の JSONL。各イベントの prev_hash は、前のイベントの SHA-256 ハッシュにリンクします。ジェネシス値は 0x00…00 です |
| 署名付きチェックポイント | チェーン末尾に対する Ed25519 署名。公開鍵を使ってオフラインで検証できます(aileron sign-checkpoint/verify-checkpoint)。チェックポイントは プレフィックス を対象とするため、後からイベントを追加しても無効になりません。署名済みプレフィックスを切り詰めたり書き換えたりすると無効になります |
| ポリシールール | 認証情報の窃取、クラウドメタデータの悪用、情報流出、サプライチェーン、永続化、フォレンジック対策、データベースの破壊、プロンプトインジェクションの痕跡を対象とする32 個の同梱ルール。Sigma に似た YAML で、部分文字列、正規表現、ドット区切りキーのマッチャーを使用します。ルールは呼び出し全体をメモリ内で評価するため、ダイジェストのみのモードでもコンテンツルールが機能します |
| 振る舞い異常の検知 | ローリングベースラインにより、初めて確認されたツール、レートの急増(ベースラインの 3 倍超)、新しいツール呼び出しシーケンスにフラグを付けます。SDK(baseline=)を使ったリアルタイム検知、または aileron detect によるオフライン検知が可能です |
| MCP stdio プロキシ | あらゆる MCP クライアントとサーバーの間に配置され、子プロセスに到達する前にすべての tools/call をログに記録して仲介します。テスト用の代用品だけでなく、公式の filesystem サーバーと memory サーバーでも検証済みです |
| Claude Code フック | aileron hook は Claude Code の PreToolUse および PostToolUse フックに接続します。すべてのツール呼び出しは実行前と戻り時にジャーナルへ記録され、一致するブロックルールがあれば停止します(終了コード 2。bypassPermissions モードでも理由がセッションに表示されます)。ジャーナルに書き込めない場合は、記録を失うのではなく呼び出しをブロックします。プロジェクトには 1 つの settings.json スニペットを設定します。docs/claude-code.md を参照してください |
| MCP サーバーモード | aileron serve はジャーナルを読み取り専用で公開するため、アシスタントは記録から「エージェントが何に触れたのか?」に答えられます。公式の MCP Registry に io.github.aileron-sh/aileron として登録されています |
| OTel GenAI エクスポート | イベントは gen_ai.* に準拠したスパン辞書としてエクスポートされ(aileron export)、既存のコレクターで利用できます |
| HTML インシデントレポート | 単一ファイルで、CSS をインライン化し、外部アセットを使いません。検証バッジ(VERIFIED/TAMPERED at seq N)付きです |
| デフォルトでプライバシーを保護 | --capture-content でオプトインしない限り、ツールの引数と結果はダイジェストのみで記録されます |
使い方
SDK:@track デコレーター
from aileron import ChainLog, track, PolicyBlocked, bundled_rules_dir
from aileron.policy import load_rules
log = ChainLog("run.chain.jsonl") # capture_content=False by default
rules = load_rules(bundled_rules_dir()) # or load_rules("rules") after `aileron init`
@track(log=log, rules=rules)
def shell(cmd: str) -> str:
... # your tool implementation
shell("ls /tmp") # -> tool_call event, status=ok, args recorded as digest
shell("rm -rf /") # -> PolicyBlocked raised; blocked attempt is logged
ルールは判定時に引数全体をメモリ上で確認しますが、ジャーナルに保存されるのは引き続きダイジェストのみです。フォレンジックのために生の引数を永続化する場合に限り、capture_content=True を有効にしてください。
SDK:track_agent セッション
from aileron import track_agent
with track_agent("research-agent", framework="langchain", log=log):
shell("ls /tmp") # inherits the session's agent identity and session_id
# agent_start / agent_end events bracket the run automatically
MCP プロキシ:フレームワークに依存しないインターセプト
任意の MCP サーバーをラップします。すべての tools/call は、子プロセスに渡される前にログに記録され、ポリシーチェックを受けます。
$ aileron init # seeds a ./rules directory with starter rules
$ aileron proxy --log run.chain.jsonl --rules rules -- \
npx -y @modelcontextprotocol/server-filesystem /tmp
$ AILERON_SESSION_ID=run-4821 aileron proxy --log run.chain.jsonl --rules rules \
--agent researcher --framework crewai -- npx -y @modelcontextprotocol/server-filesystem /tmp
プロキシのフラグは -- の前に指定します。それ以降はすべて子プロセスに渡されます。ハーネスでは、フラグを渡す代わりに、起動ごとに AILERON_AGENT、AILERON_FRAMEWORK、AILERON_SESSION_ID を設定できます。フラグが環境変数より優先されます。ジャーナルには指定した ID が記録されるため、agent.name: researcher のようなルールはプロキシ経由でも一致します。実行間でセッション ID を再利用すると、それらはグループ化されます。detect では単一のセッションとして扱われ、OTel エクスポートでは同じトレースにまとめられます。
ブロックされた呼び出しは、JSON-RPC エラー(-32000: blocked by aileron rule <id>)をクライアントに返します。子プロセスは呼び出されません。
テスト用の代替実装ではなく、実際の MCP サーバーで検証済みです。Aileron は、公式の @modelcontextprotocol/server-filesystem
(secure-filesystem-server 0.2.0、14 ツール)および @modelcontextprotocol/server-memory
(0.6.3、9 ツール)の前段で実行されています。ハンドシェイクが完了し、ツールが通常どおり一覧表示され、実際の呼び出しが成功し、ブロックされた書き込みがサーバーに届かず、ジャーナルの検証にも成功します。このチェックはテストとして含まれています(tests/test_real_mcp_server.py。AILERON_LIVE_MCP=1 を指定して実行します)。
プロキシ自体のコストは、tools/call あたり1 ミリ秒を大きく下回ります。大きなペイロードに対するコンテンツルールの照合には、さらにコストがかかります。その程度は選択できます。測定済みの内訳については、パフォーマンスを参照してください。
プロキシは、改行区切りと Content-Length フレーム形式の両方の JSON-RPC に対応しています。コンテンツルール(tool.arguments_contains、_regex)はデフォルトのダイジェストのみのモードで機能します。--capture-content によって変わるのは永続化される内容であり、適用されるルールではありません。子プロセスが停止した時点で進行中の呼び出しは status=error としてジャーナルに記録されるため、クラッシュによって試行の記録が失われることはありません。
Claude Code:すべてのツール呼び出しを記録して制御する
Claude Code の独自ツール(Bash、Edit、Write、MCP ツール)はフックシステムを経由し、aileron hook はそのためのコマンドフックです。1 つのエントリを PreToolUse、PostToolUse、PostToolUseFailure に登録します。PreToolUse 用の設定には "onFailure": "block" も指定します。
{"type": "command", "command": "aileron",
"args": ["hook", "--log", "${CLAUDE_PROJECT_DIR}/aileron.chain.jsonl",
"--rules", "${CLAUDE_PROJECT_DIR}/rules"],
"timeout": 30}
すべての呼び出しは実行前と戻り時にジャーナルへ記録され、デフォルトではダイジェストのみが保存されます。一致するブロックルールがある場合、終了コード 2 で呼び出しを停止し、Claude にはセッション内でその理由が表示されます。
PreToolUse:Bash hook error: [aileron hook ...]: blocked by aileron rule
local-001 (Block destructive shell commands from Claude Code); recorded as
seq 3 in /home/me/my-project/aileron.chain.jsonl
このフックはフェイルクローズで動作します。ジャーナルに書き込めない場合やルールを読み込めない場合、記録されないまま呼び出しを実行するのではなく、呼び出しをブロックします。また、標準出力への書き込みや allow の出力は行わないため、Claude Code が許可する処理を狭めることしかできません。フックプロセスは並列で実行され、<log>.lock によって直列化されます。aileron verify と aileron report は、ほかのジャーナルと同様にこのジャーナルにも使用できます。詳しいセットアップ、イベントの形式、制限事項(タイムアウトしたフックの意味、@ ファイルの読み込み、変更)については、docs/claude-code.md を参照してください。
MCP サーバー:エージェントが何をしたかをアシスタントに尋ねる
Aileron は MCP サーバーの前段に配置します。Aileron 自体も MCP サーバーです。ジャーナルのディレクトリを指定すると、アシスタントが記録を読み取ってくれます。
$ aileron serve --root ./journals
ツールは 3 つあり、すべて読み取り専用です。verify_journal(記録は完全か)、query_events(ツール、ステータス、時刻で絞り込んで何が起きたか)、explain_rule(aileron-130 は何を検出するか)。
書き込み、削除、署名のツールはなく、今後も決して追加されるべきではありません。記録されるエージェントこそが信頼できない当事者です。ジャーナルを編集する方法を与えるのは、容疑者に証拠保管庫を渡すようなものです。
そこから 4 つのことが導かれます。これこそが、これが単なる aileron verify のラッパーではない理由です。
- パスは
--rootの範囲内に限定され、開けるのは.jsonlファイルだけです。そうでなければ、verify_journal(path)は任意のファイルを読み取れてしまいます。 - すべての応答に、それぞれの整合性ステータスが含まれます。 範囲制限によって、エージェントが読むべきでないファイルを読むことは防げますが、ルート内にもっともらしいジャーナルを書き込んで、捏造した履歴を渡すことまでは防げません。そのため、各応答にはチェーンの検証結果と、隣接する署名済みチェックポイントとの一致状況が示されます。
- 記録された値は信頼できないものとして扱われます。 調査対象のエージェントがツール名やルール ID を選んでいるため、アシスタントに渡す際は信頼できないデータとしてラベル付けし、制御文字を除去して切り詰めます。
IGNORE PREVIOUS INSTRUCTIONS...という名前のツールは報告すべき証拠であり、従うべき指示ではありません。 - ダイジェストのみの設定は、引き続きダイジェストのみです。
capture_contentはジャーナルに保存する内容を制御します。このサーバーが返す情報の範囲を広げることはなく、エラーでファイルの内容が返されることもありません。
ポリシールール
# a policy rule (see the bundled rules/examples/destructive-shell.yml)
id: aileron-001
title: Block destructive shell commands
severity: high
match:
type: tool_call
tool.name: shell
tool.arguments_contains: ["rm -rf", "DROP TABLE", ":(){ :|:& };:"]
action: block
記録済みのセッションにルールをドライランします:aileron rules test rules/ run.chain.jsonl
仕組み
agent ──tool call──► [ SDK @track ] ──┐
[ MCP proxy ] ──┼─► policy decide (allow/alert/block)
│ │ block? ──► call never executes,
MCP client ──JSON-RPC──► proxy ───────┘ │ attempt still logged
▼
append to chain log (JSONL)
event 0 event 1 event N
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ seq: 0 │ │ seq: 1 │ │ seq: N │
│ prev: 0000… │─►│ prev: H(e0) │─► … ──►│ prev: H(eN-1)│
│ hash: H(e0) │ │ hash: H(e1) │ │ hash: H(eN) │──► Ed25519 checkpoint
└──────────────┘ └──────────────┘ └──────────────┘ signature over tip
H(e) = sha256(canonical_json(e \ hash))
aileron verify → recompute every hash + link (exit 2 on tamper)
aileron verify-checkpoint → re-verify chain tip against Ed25519 signature
イベントのいずれかを改ざんすると、最初に変更されたシーケンスでハッシュリンクが切れます。verify は first_bad_seq を報告し、ゼロ以外の終了コードを返します。ジャーナルはローカルのみで完結しており、検証にネットワークも信頼できる第三者も必要ありません。
独立した検証
ジャーナルの内容について、Aileron の言うことをそのまま信じる必要はありません。標準ライブラリのみを使用して Go で書かれた 2 つ目の検証ツールが verifiers/go/ にあり、SPEC.md だけを頼りに verify と verify-checkpoint を再実装しています。
$ cd verifiers/go && go build ./cmd/aileron-verify
$ ./aileron-verify verify demo.chain.jsonl
OK: 8 events verified in demo.chain.jsonl
$ ./aileron-verify verify-checkpoint demo.chain.jsonl --key aileron_ed25519.pub
改ざん検知ツールの検証ツールが作者自身によって 1 つの言語でしか書かれていない場合、作者を二度信頼することになるため、これは存在しています。仕様だけを共有する 2 つの実装は、仕様が完全であり、どちらにも都合のよい見落としがないことを示す証拠です。tests/conformance/ 配下のフィクスチャによって、すべてのテスト実行で、両者が同じ判定を下し、同じ正規バイト列を生成することを確認しています。
パフォーマンス
プロキシが tools/call ごとに追加する時間は、1 ミリ秒を大きく下回ります。バンドルされた 32 個のルールパック全体をペイロードと照合する処理は別のコストであり、ペイロードのサイズに応じて増加します。両者のスケーリングが異なり、使用するルールは自分で選ぶため、以下では別々に報告しています。
すべての数値は、次の 1 つのコマンドで再現できます。
$ python scripts/benchmark.py
測定方法。 scripts/benchmark.py は、同一の stdio MCP 子サーバーを 3 つの方法(直接実行、ルールなしの aileron proxy 経由、バンドルされた 32 個のルールすべてを有効にした aileron proxy 経由)で実行し、その差を算出します。この差分がプロキシの実際のコストなので、絶対値をそのまま信頼する必要はありません。差し引きを確認できるよう、絶対的なベースラインも併記しています。各構成で、ウォームアップ用の 200 回を破棄した後、2,000 回連続で呼び出します。ジャーナリングはダイジェストのみです。オーバーヘッドには、JSON-RPC の解析、ポリシーの評価、ハッシュチェーンへの追記、再シリアライズ、およびプロセスホップの追加が含まれます。
ペイロードについて。 ツールの引数は、実際のツール引数らしい英単語、パス、フラグ、引用符、句読点を含む固定テキストです。これは見た目以上に重要です。このベンチマークでは以前、同じ文字を繰り返した文字列を送信していました。これは、どの場所でも最初の文字で失敗する正規表現エンジンにも、後述のリテラル事前フィルターにも、どこにも一致が見つからないという点で、最も処理しやすい入力です。その結果は実際より約 3 倍よく見えていました。テストでは、フィラーテキストにバンドルされたルールが一切発動しないことを検証しているため、ここに示す数値はアラート発生時ではなく通常時のものです。
tools/call ごとの追加レイテンシ(ミリ秒)
Linux x86_64 — GitHub Actions ubuntu-latest(共有 2 vCPU)、Python 3.12.14。プッシュのたびに CI で再測定されます:
| ツールの引数 | 直接実行 | プロキシ経由 | + 32 個のルール | プロキシによる追加 | ルールによる追加 | 合計追加 |
|---|---|---|---|---|---|---|
| 64 B | 0.077 | 0.305 | 0.546 | 0.228 | 0.242 | 0.469 |
| 4 KB | 0.078 | 0.348 | 0.740 | 0.270 | 0.392 | 0.662 |
| 32 KB | 0.241 | 0.799 | 3.030 | 0.558 | 2.231 | 2.789 |
共有 CI ランナーの結果は実行ごとに変動し、小さなペイロードの行では最大 1.6 倍の差が生じます。この表には、連続する 2 回の測定のうち遅い方を記載しています。回帰のベースラインには速い方を使用するため、ランナーの速度が遅くてもガードがひそかに緩むことはありません。
macOS arm64 — Apple M2 Pro、Python 3.13.7、アイドル状態のマシン。3 回の実行のうち最悪の値を丸めずに記載しているため、実行内では added = (proxy & rules) - direct が厳密に成り立ちます:
| ツールの引数 | 直接実行 | プロキシ経由 | + 32 個のルール | プロキシによる追加 | ルールによる追加 | 合計追加 |
|---|---|---|---|---|---|---|
| 64 B | 0.016 | 0.089 | 0.195 | 0.073 | 0.105 | 0.178 |
| 4 KB | 0.034 | 0.157 | 0.507 | 0.123 | 0.350 | 0.474 |
| 32 KB | 0.156 | 0.457 | 2.604 | 0.300 | 2.147 | 2.447 |
これらの数値が示すもの
プロキシのコストは低く、ほぼ一定です。 インターセプト、ジャーナリング、再シリアライズのコストは、最も遅いテスト環境で、小さな呼び出しでは約 0.23 ms、32 KB の呼び出しでは約 0.56 ms です。
大きなペイロードではルールのコストが増えますが、そのコストは選択できます。 コンテンツルールはペイロードに対して照合されるため、コストはペイロードのサイズに応じて増加します。バンドルされた 32 個すべてのルールを読み込んだ場合、小さな呼び出しでは 0.24 ms、32 KB では 2.23 ms です。
その処理の大半は、始まる前にスキップされます。 auditctl を探すルールは、ペイロードに auditctl が含まれていなければ発動しません。各パターンは一度だけ読み取られ、必要なリテラルに分解されます。安価な部分文字列検索によって、正規表現を実行するかどうかが判断されます。要件はすべて満たす必要があるため、systemctl、disable、auditd が近接していることを必要とするルールは、「service」という単語が含まれているだけの通常の文章ではスキップされます。問題のない 32 KB の呼び出しでは、通常ならペイロード全体をスキャンする 19 個のパターンのうち 17 個が実行されません。これは速度だけを変え、ほかには何も変えません。調査中にこの機能を無効にしたい場合は、AILERON_NO_PREFILTER=1 を設定します。
実際の状況では。 実際の MCP サーバー呼び出しは、通常 10~1000 ms かかります。すべてのルールを読み込んだ状態で 32 KB の引数を処理する場合は 2.8 ms、通常の小さな引数では 0.47 ms です。仲介対象の呼び出し時間に対する仲介処理の割合はわずかです。
注意事項を率直に述べると。 ここで測定しているのは、順次実行する stdio の往復処理です。一度に実行中の呼び出しは 1 つで、これはエージェントが実際にツールを呼び出す方法です。同時接続クライアントのベンチマークではありません。複数クライアントでの実行は今後のロードマップに含まれています。このツールは平均値、中央値、p95、p99 を報告しますが、以下の表では中央値を記載しています。中央値は実行ごとに安定していますが、p95 は安定しません。スケジューリングによってテールレイテンシーが変動します。Linux のほうが遅いのは、共有 vCPU の CI ランナーがアイドル状態のノート PC より遅いためです。CI で適用されるのは、こうした保守的な数値です。数値を引用する前に、ご自身のハードウェアで測定してください。
CI では、中央値のオーバーヘッドが scripts/benchmark_baseline.json に対して 2 倍を超えて悪化すると、ジョブが失敗します。そのため、パフォーマンスが気付かれないまま低下することはありません。失敗と判定する前に再測定を 1 回行うため、単発の遅いランナーによる誤検知も防げます。ベースラインには、測定に使用したルールパックのサイズとペイロードの形状も記録されています。どちらかが変わると、処理量が増えたのであってコードが遅くなったわけではないため、ガードは実際には存在しない回帰を報告せず、その違いを示します。
インテグレーションとエコシステム
- OpenTelemetry GenAI -
aileron exportはgen_ai.operation.name/gen_ai.tool.name/gen_ai.agent.nameのスパン属性に加えてaileron.event.hashを出力します。これにより、Aileron は既存のトレーシングスタックの 代わりではなく、エビデンスレイヤーとしてその隣に配置されます。 - LangChain / CrewAI / Python のあらゆるフレームワーク -
@trackは通常の デコレーターです。track_agentは自由形式のframework=ラベルを受け取ります。 フレームワークへの依存は必要ありません。examples/langchain_tool_tracking.pyを参照してください。 - LiveKit Agents(音声と動画) -
@trackはasync defツールもラップするため、 LiveKit の@function_toolを実行前に記録してポリシーを適用でき、AgentSession全体をtrack_agent(..., framework="livekit")の中に配置できます。LiveKit は記録対象の フレームワークであり、トランスポートではありません。Aileron はネットワーク呼び出しを 行わず、LiveKit への依存も追加されません。LiveKit がインストールされていない場合は 標準ライブラリだけで実行できるexamples/livekit_agent_tracking.pyを参照してください。 - MCP - プロキシは、どのクライアントやフレームワークが制御しているかにかかわらず、 あらゆる stdio MCP サーバーをラップします。
- Claude Code -
aileron hookはフックシステムを通じて、Claude Code 自身のツール (Bash、Edit、Write、MCP ツール)を記録し、ポリシーを適用します。SDK もプロキシも ネットワークも不要で、Claude Code の起動方法も変わりません。 docs/claude-code.md を参照してください。 - コミュニティルール - ルールの提供が想定されている貢献単位です(ロードマップを参照)。
テレメトリーとプライバシー
- Aileron はテレメトリーを一切送信しません。 ライブラリや CLI のどこにも、分析、ホームへの情報送信、ネットワーク呼び出しはありません。今後変更する場合も、文書化された RFC に基づくオプトイン方式に限ります。セキュリティツールにおいて、それ以外は認められません。
- コンテンツの記録はデフォルトで無効です。 ツールの引数と結果は SHA-256 ダイジェストとして記録されます。生のコンテンツが保存されるのは、
capture_content=True/--capture-contentを指定した場合のみです。秘密情報や PII を誤って永続化することなく、何が起きたかを検証可能な形で記録できます。ポリシールールと異常検知器は、判断時にメモリ上の呼び出し全体を引き続き確認します。キャプチャの設定が制御するのは永続化される内容だけであり、適用される制御ではありません。
正直にお伝えする制限事項
- SDK のインストルメンテーションは回避できます。
@trackはデコレートした関数をラップします。インストルメント化されていないコードパスは記録されません。エージェントのコードから回避できない制御が必要な場合は、MCP プロキシを使用してください。ツール呼び出しの経路上で、別プロセスが仲介します。 - ポリシールールはパターンマッチングであり、意図の分類ではありません。 既知の危険なパターン(
rm -rf、id_rsa、情報流出パターン)を検出しますが、新たな悪意ある推論を確実に検出することはできません。検知対象の結果は、意図を検知するツール(garak、PromptGuard)を補完するものであり、それらに取って代わるものではありません。 - 改ざんの証拠を残せますが、改ざんを防止できるわけではありません。 チェーンによって、事後の変更を証明できます。書き込み権限のある攻撃者は、ログ全体を切り詰めたり書き換えたりして、先へ偽造できます。署名付きチェックポイントを使えば、偽造には秘密鍵が必要になります。鍵は記録対象のホストに置かず、否認防止が必要な場合はチェックポイントを外部に固定してください(ロードマップを参照)。
- Claude Code フックの強度は、Claude Code のフック仕様に依存します。 終了コード 2 によってブロックし、Claude Code はすべての権限モードでこれを尊重します。ただし、タイムアウトまたはクラッシュしたフックは、
onFailure: "block"が設定されていない限りフェイルオープンになります(Claude Code 2.1.295 以降)。@で読み込まれたファイルではツールフックは発火しません。tool.checkを処理する mod は、managed settings に含まれていないフックを上書きできます。ワークスペースの信頼ダイアログが承認されるまでフックは実行されません。また、フックはエージェントと同じ OS ユーザーとして実行されるため、ジャーナルの削除やフックの除去を不可能にするのではなく、そうした操作を明らかにします。
ロードマップ
aileron-rulesコミュニティルールリポジトリ - エージェント向け Sigma:OWASP Agentic Security Initiative の脅威分類に対応付けられたコミュニティ検知ルールで、記録されたインシデントのトレースを使って CI で検証します。- Sigstore/Rekor によるチェックポイントの固定 - 現在はコンパニオンパッケージ
aileron-anchorとして提供されており、このパッケージがネットワーク呼び出しを一切行わない状態を保てるよう、分離されています。署名付きチェックポイントを公開透明性ログに送信し、ローカルジャーナルを固定済みの内容と照合します。これにより、末尾の切り詰めを検出できます。 - OCSF エクスポート - Open Cybersecurity Schema Framework イベントを出力し、SIEM に直接取り込めるようにします(Splunk/Elastic のクイックスタート)。
- v1 では対象外:eBPF / カーネルレベルのインターセプト。 Aileron は MCP プロキシと SDK のレイヤーにとどまり、ツール呼び出しの意味が引き続き認識できる状態を保ちます。システムコールレベルのトレースは Falco/Cilium の領域であり、導入すればエージェントの意味情報を犠牲にしてデータ量を増やすことになります。
貢献
貢献を歓迎します。詳しくは CONTRIBUTING.md をご覧ください。取り組みやすい項目として、src/aileron/rules/examples/ の新しい検知ルールや、examples/ の新しいフレームワークアダプターがあります。DCO のサインオフが必要で、CLA はありません。セキュリティ上の問題については、SECURITY.md をご覧ください。
ライセンス
Apache License 2.0 - 詳しくは LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。