HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

カーネルはツールの名前など気にしない

The kernel does not care what you named the tool (cognivisehub.com)

3 pointsby apollonios1 コメント

要約

コーディングエージェントにおける「良心」に基づいたガードレールは、エージェントの実行がツールのスキーマを離れると容易に回避される。真のセキュリティ境界はカーネルレベルのシステムコールにあり、AgentGuardはeBPF LSM(Linux Security Module)を使用して、エージェントの意図ではなく実際のシステムコールを監視し、拒否をEPERMエラーとしてカーネルレベルで強制する。

全文翻訳

ブログに戻る 9月8日、2026年 カーネルはツールの名前など気にしない AgentGuard eBPF Agent Security AgentGuard: コーディングエージェントのためのeBPF LSM。リポジトリにはYAMLが含まれています。拒否はEPERMです。Linuxプロトタイプ・Apache-2.0・github.com/AgentGuard-hq/AgentGuard エージェントに失敗したテストの修正を依頼しました。GitHubのイシューは正常に見えました。フィクスチャ、MCPレスポンス、またはモデルが親切に取得したREADMEのどこかに、.envを読み込んでどこかに投稿せよという指示が埋め込まれていました。モデルは、シークレットは制限されていることに同意するかもしれません。それはセキュリティ境界ではありません。境界はopenatが成功するかどうかです。コーディングエージェントは、より良いプロンプトを持つチャットボットではありません。それらは開き、実行し、接続します。重要なのは次のトークンではなく、次のシステムコールです。 良心はTCBではない ほとんどのガードレールはエージェントの内部にあります:システムプロンプト、CLAUDE.md / AGENTS.md、PreToolUseフック、許可された「Bash」文字列のリスト。それらは良心です。良心は、実行がツールスキーマを離れた瞬間にバイパスされます。フックで.envを拒否し、次にpython -c、perl、node、ローダー、mmapなど、定義されたReadまたはBash以外のものを使用して読み取ります。コマンド文字列としてrmを拒否し、次に別の方法で同じinodeにアクセスします。フックは実行されませんでした。カーネルはまだ実行します — それを要求した場合。 ベンダーサンドボックス(Seatbelt、bubblewrap、Claudeのsandbox-runtime、devcontainers)は、ほとんどの人にとって適切な製品デフォルトです。この投稿は、より狭い主張をしています:エージェント自身の良心が偽である場合でも真実であるポリシー。そのレイヤーがLSMです。拒否はEPERMです。OSはツールの名前など気にしません。 AgentGuardとは何か AgentGuardは、コーディングエージェントのためのLinux eBPF LSMスーパーバイザーです。1つのバイナリがカーネルにポリシーをロードし、エージェントをrootではなく呼び出し元ユーザーとして開始します。ポリシーはプロジェクト内のYAMLです(policies/default.yaml)。開始ルール:認証情報 — .env、id_rsa、通常のシークレットパスをブロックします。破壊的なargv — rm、dd、明白なもの。エグレス — 443経由で許可されたホスト、ローカルプロキシ経由。それ以外はすべて拒否します。拒否はチャットメッセージではなく、カーネルエラーです。オプションで、Claude Code / Codexフックはフィードバック文字列を注入するため、モデルは生のパーミッションエラーでスピンする代わりに再試行できます。フックが欠落していても、カーネルはブロックします。モデルには理由が伝えられません。その分割が全体の設計です:LayerJobLSMEnforcement。Fail closed。 YAMLはgitでレビューできます ポリシーをPRでレビューできます。フックの説明。丁寧さ。TCBではありません。 policies/default.yaml │ ▼ eBPF LSM (rootとしてロード済み) │ ▼ エージェント (SUDO_USERとして) │ ├── openat(".env") → EPERM │ ├── execve("rm", …) → EPERM │ └── connect(許可リスト外: :443) → EPERM │ └── オプション: "SYSTEM FEEDBACK: …" をTUIに ステータス: v0.1.2、初期段階。主にClaude Codeでテスト済み。Codexも同様に配線されています。ネイティブDarwin claudeは監視されていません — macOSにはBPF LSMがありません。Colima/Docker Linux VMは別のマシンであり、ホストバイナリの周りの魔法のハロではありません。 なぜEPERMで他のフックではないのか フックは、製品がシリアライズした意図を検査します。LSMは、プロセスが実際に行ったことを検査します。Bashのみをラップしても、pythonをラップしたことにはなりません。CLIのReadツールのみをラップしても、エージェントがスポーンしたコンパイラ、テストランナー、またはpostinstallスクリプトからのopenatをラップしたことにはなりません。子プロセスはLSMを継承します。それらはsettings.jsonを継承しません。これも、AgentGuardが「プロンプトインジェクション検出」ではない理由です。インジェクションは、不正なシステムコールに到達する方法です。興味深いのは、システムコールが許可されているかどうかです。「以前の指示を無視する」というあらゆるエンコーディングをキャッチするのは言語の問題です。.ssh/id_rsaに対するopenatをキャッチするのはカーネルの問題です。両方ある方が良いでしょう。最初のものが2番目のものを置き換えると偽るつもりはありません。 特権、平易に言うと BPFのロードは、重い特権です。通常はロード時にroot、CAP_BPFが関与します。私が譲れないと考える2つのルールがあります:LSMのみ。スーパーバイザーは、エージェントのTLSスタック上のトレーシングプローブをアタッチしたり、ユーザー空間バッファを書き換えたりしてはなりません。モデルが「見た」ものを「助ける」ために変更する必要がある場合、あなたはもはや参照モニターではありません。オブジェクトをピン留めし、子プロセスからキャップをドロップします。doctorはハッシュ不一致で失敗する必要があります。エージェントはCAP_BPFを保持してはなりません。ボックス上の2番目のトレーシングプログラムは、スーパーバイザーのピアであり、YAMLで削除できる子ではありません — bpf() / プログラムタイプもゲートしない限り。「eBPFを使用した」と「私たちを信頼できる」は同じ文ではありません。前者はメカニズムです。後者はTCBストーリーです:ハッシュ化されたプログラム、許可されたタイプ、追加のヘルパーなし、通常のユーザーとして実行されるエージェント。install.shはlsm=bpfを生成できません。それはブート時の事実です。doctorがLSMリストにBPFがないと表示する場合、それはカーネルコマンドラインであり、欠落しているマウントではありません。securityfsが読み取り可能であることと、強制があることは同じではありません。 非目標(意図的に) AgentGuardは以下ではありません:AnthropicのSeatbelt / bubblewrapサンドボックス、MDM、またはWeb上のClaude Codeの代替品。Macネイティブのエンフォーサー。ホストされたmicroVM製品(E2B/Daytona/Modalなど)。完全な脱獄 — デフォルトのYAMLはスターターであり、完全性はポリシーの問題です。ランダムなラップトップカーネルでの特権のないインストール。 脅威モデルが「信頼できないリポジトリ、ラップトップを壊さない」である場合、まず第一者のサンドボックスまたはVMから始めてください。エージェントに依存しない、監査可能なシステムコールポリシーを、あなたがすでに制御しているLinuxボックスで必要とする場合に、これのようなものを使用してください。AgentGuardという名前のGitHubリポジトリは他にもたくさんあります。こちらはカーネルのものです。名前の衝突は迷惑ですが、主張とは無関係です。 「動作」とは 私が気にかけているデモは、おかしな脱獄ではありません。フックとCLAUDE.mdは言います:.envを読まない、rm -rfしない。プロンプトは普通です:テストをデバッグする / イシューを要約する。バイパスは、フックが購読したツールを通過しません。フックのみ:シークレットはコンテキストにあります、またはファイルは削除されています。LSM:EPERM。プロセスはまだ生きています。オプションのフィードバック:モデルがクリーンに再試行できるように。フックパスが失敗し、LSMパスが保持することを示すことができない場合、私は製品を持っていません。私は追加の手順を持つポリシーコンパイラを持っています。 なぜこれが存在するのか コーディングエージェントの安全性が、Linux上の他のすべてのプロセスと同じレイヤーで機能するかどうかを知りたかったのです:LSM、fail closed、gitでのポリシー。プロトタイプは、通常のカーネルのコスト(BTF、lsm=bpf、ロードのためのsudo、Darwinの奇跡なし)で、はいと述べています。業界は工業規模で良心を出荷しています。それらの中には良い良心もあります。良心が疲れている、混乱している、またはプロンプトインジェクションされたときに、ドアがロックされることを私はまだ望んでいます。フックはエージェントの良心です。カーネルはドアです。AgentGuardはApache-2.0、v0.1.2、Linuxです。コードとより長いエンジニアリングノート:github.com/AgentGuard-hq/AgentGuard。