Agentic OS 技術スタックを下から読む 第22回:漏らすつもりがなくても漏れる ―― モザイク漏洩
L5 では、第16回で注入の正体を見た。第17回では、その防ぎ方を見た。あれは、外から命令を送り込まれる脅威だった。
注入とは逆向きの安全
L5 では、第16回で注入の正体を見た。第17回では、その防ぎ方を見た。あれは、外から命令を送り込まれる脅威だった。
今回見るのは、逆向きの脅威である。
エージェントが、外から乗っ取られるのではない。エージェント自身が、内側で読んだ秘密を、外へ漏らしてしまう。しかも、本人に漏らすつもりはない。答えを出すために調べているだけで、漏れる。
問題になるのは、外部に投げる検索クエリである。
深い調べ物をするエージェントは、社内文書を読みながら、外部検索を何度も使う。社内にある断片と、外にある公開情報を照合するためだ。そのとき、検索窓に何を入れるかが、安全の境界になる。
ここで怖いのは、一つ一つのクエリが、ぱっと見では無害に見えることだ。
モザイク漏洩とは
ある企業の社内文書に、こういう事実が書かれているとする。
その企業は、ある月までに、自社インフラのおよそ七割をクラウドへ移した。
これは社内だけの事実である。公開発表には、移行を進めているとは書かれている。だが、七割という数字も、その月も、外には出ていない。
エージェントは、この文書を読んだあと、外部情報を探しに行く。たとえば、公開資料、採用情報、技術発表、障害報告、関連する規制情報を探す。その過程で、次のような検索を投げる。
「ある企業 クラウド移行 七割」 「ある企業 インフラ移行 五月」 「ある企業 クラウド 七〇パーセント 事例」 「ある企業 移行完了 五月 基盤」
どれも、単独では決定的な秘密文には見えない。検索としても自然である。だが、外部検索のログを見られる者がいると、話は変わる。
その者は、社内文書を見ていない。エージェントの思考も見ていない。見るのは、外へ出ていったクエリだけである。
それでも、時間順に並んだクエリから、社内だけの事実を復元できる。企業名があり、七割という数字があり、五月という時点があり、インフラ移行という対象がある。小さなタイルを集めると、絵が見えてくる。
これがモザイク漏洩である。
漏洩は、一文まるごとのコピーとして起きるとは限らない。むしろ、断片として起きる。数字、時期、部署名、未公開の失敗原因、まだ発表されていない提携先、候補に残っている方式。その一つ一つは短い。だが、組み合わせると、社内にしかない事実になる。
エージェントは、秘密を外部に送ろうとしていない。検索精度を上げようとしているだけである。ここが、この問題のいやらしさである。
漏れの、三つの段階
漏れには、深刻さの違う三つの段階がある。
一つ目は、意図の漏洩である。
クエリログを見るだけで、エージェントが何を調べようとしているかが分かる。たとえば、「契約更新 失敗 原因」「買収候補 技術負債」「六月 障害 返金率」のような検索が並べば、まだ答えは分からなくても、関心の方向は読める。
これは、調査テーマの漏れである。未発表の検討、社内で問題になっている領域、優先順位が外に出る。
二つ目は、答えの漏洩である。
攻撃者が、クエリログを見たうえで、「この企業の移行率はどれくらいか」「障害の原因は何か」「候補から落ちた方式は何か」と問うと、社内文書を見なくても答えられてしまう状態である。
ここでは、クエリログが補助資料になる。問いが与えられると、ログの断片がつながる。数字、時期、対象がそろい、答えが浮かび上がる。
三つ目は、完全な漏洩である。
これはもっと重い。攻撃者が問いを与えなくても、クエリログだけから、検証できる社内事実を言い当てられる。たとえば、「この企業は五月までに基盤の約七割を移行したらしい」と、ログだけから組み立てられる。
下に行くほど、被害は重い。
意図の漏洩は、調査の方向を漏らす。答えの漏洩は、聞かれたら答えを漏らす。完全な漏洩は、聞かれなくても事実を漏らす。
そして実運用では、三つはきれいに分かれない。最初は意図だけに見えたログが、数日分たまると答えになり、数週間分たまると完全な漏洩になる。
「漏らすな」と頼んでも、ほぼ効かない
最初に思いつく対策は、プロンプトで注意することだ。
検索を作る指示に、こう足す。
社内情報が漏れる検索は投げないこと。
人間の感覚では、これで少し安心したくなる。だが、実験的には効きが弱い。
ある条件では、漏洩率はおよそ三割四分から二割五分へ下がる。つまり、三四パーセント前後から二五パーセント前後になる。下がってはいる。だが、四回に一回はまだ漏れる。
しかも、この低下は一貫しない。条件が変わると、ほとんど効かないことがある。さらに悪いことに、課題の成功率も下がる。同じ条件で、およそ四割九分から四割四分へ落ちる。四九パーセント前後から四四パーセント前後である。
なぜか。
エージェントが、本当に安全な検索の組み立て方を学んだわけではないからである。
起きているのは、多くの場合、検索回数の減少である。危なそうだから外部検索を控える。クエリを短くする。手数を減らす。結果として、外へ出る断片は少し減る。だが、必要な公開情報にも届きにくくなる。
これは、安全になったというより、仕事をしなくなったに近い。
漏れも減る。だが、仕事も減る。調査が浅くなる。答えの質が落ちる。
本当にほしいのは、検索を怖がるエージェントではない。必要な検索はきちんと行い、しかし社内の決定的な断片を外に持ち出さないエージェントである。
「気をつけて」だけでは、そこまでは入らない。
しかも、賢くするほど、漏らす
さらに不穏なのは、性能を上げる訓練をすると、漏洩も増えることである。
漏洩のことはいったん忘れる。課題を正しく解くことだけを目指して訓練する。すると、成功率は上がる。およそ四割九分から五割九分へ伸びる。四九パーセント前後から五九パーセント前後である。
これは良い結果に見える。
だが同時に、漏洩率も上がる。およそ三割四分から五割二分へ増える。三四パーセント前後から五二パーセント前後である。
性能を一〇ポイント上げると、漏洩は一八ポイント増える。成功率よりも、漏洩率の伸びのほうが大きい。
理由は単純である。
エージェントは、よい検索クエリを学ぶ。よい検索クエリとは、対象を絞り込めるクエリである。対象を絞るには、文脈を入れる必要がある。企業名だけでは弱い。時期を入れる。数字を入れる。内部で読んだ表現を入れる。固有の言い回しを入れる。
すると、検索は当たりやすくなる。
「クラウド移行」よりも、「クラウド移行 七割 五月」のほうが狙いは鋭い。公開文書の中から関連する資料を見つけるには、後者のほうが強い。
だが、秘密の観点では逆である。
濃いクエリほど、観察者に渡す断片が増える。数字が一つ入る。時期が一つ入る。対象が一つ入る。何度も検索すれば、断片はさらに増える。
つまり、課題に良いクエリは、しばしば、漏らすクエリでもある。
ここには正面からの対立がある。エージェントを有能にすると、より多くの文脈を持ち歩くようになる。文脈を持ち歩くから、検索がうまくなる。検索がうまくなるから、仕事は進む。だが、その文脈が、外部ログに残る。
悪意のあるエージェントだけが危ないのではない。有能で、熱心で、調査がうまいエージェントほど危ない。
直し方は、「どう検索を組むか」に報酬を与えること
では、どう直すのか。
鍵は、結果だけではなく、一手ごとに報酬を与えることである。しかも、報酬は二種類いる。仕事の報酬と、漏洩の報酬である。
まず、仕事の報酬を細かくする。
最後に正解したかどうかだけで評価すると、途中でどんな検索をしたかが見えない。秘密を混ぜた危ないクエリで正解にたどり着いても、最終結果だけを見れば成功である。
そこで、一手ごとに見る。
同じ情報を持っている状況で、正しい置き場を検索したか。すでに手元にある文書を、もう一度探しに行っていないか。答えがありそうな公開文書へ向かえているか。関係の薄い場所へ広く投げていないか。
同じ段の他の手と比べて、この一手は良かったかを評価する。すると、最後の答えだけではなく、調査の経路そのものを鍛えられる。
次に、漏洩の報酬を入れる。
エージェントがクエリを一つ出すたびに、別の判定器が二つのリスクを見る。
一つは、直接漏洩である。そのクエリ単体が、社内の秘密をそのまま含んでいないか。未公開の数字、時期、内部名、結論が入っていないかを見る。
もう一つは、モザイク漏洩である。そのクエリ単体では無害に見えても、すでに出たログに足すと、新しい秘密が復元できるかを見る。
たとえば、最初のクエリに企業名と移行対象がある。次のクエリに七割という数字がある。三つ目のクエリに五月という時期がある。この三つを足すと、内部事実が組み上がる。この場合、三つ目のクエリは単独では短くても、モザイクを完成させる危険な一手である。
この二つのリスクのうち、大きい方を罰する。
重要なのは、漏れを生んだまさにその一手にコストを当てることである。最終的に漏れた、という粗い罰だけでは足りない。どのクエリが、どの断片を外に出したのかを見ないと、エージェントは直し方を学べない。
秘密を守る行動は、抽象的な徳目ではない。クエリから数字を落とす。社内の月を外す。内部の表現を一般語へ置き換える。すでに持っている文脈を検索窓に貼らない。こういう細かい動作の集まりである。
だから、その細かい動作に報酬を当てる。
結果:漏れが三分の一以下になり、仕事はほぼ落ちない
このやり方では、成功率はほぼ保たれる。およそ五割九分である。性能だけを上げた場合と、ほぼ同じ水準に残る。
一方で、漏洩率は大きく下がる。
素の状態では、およそ三割四分だった。性能だけを上げると、およそ五割二分まで悪化した。だが、検索の組み立て方に仕事の報酬と漏洩の罰を同時に入れると、一割を切るところまで落ちる。およそ九分九厘、つまり九・九パーセント前後である。
三四パーセント前後から九・九パーセント前後であれば、三分の一以下である。性能だけを上げた状態の五二パーセント前後と比べれば、五分の一程度まで落ちる。
ここで大事なのは、安全になった理由である。
検索を減らしたからではない。むしろ、検索回数は素の状態より増える。エージェントは外部情報を使うことをやめていない。仕事を縮めていない。
変わったのは、クエリの中身である。
危ないクエリは、社内文書から拾った決定的な細部をそのまま持ち歩く。七割、五月、未公開の障害原因、内部だけの候補名。そういう断片を検索窓に入れる。
安全なクエリは、目的は保ったまま、決定的な細部を落とす。企業の公開移行事例を探す。対象分野の一般的な移行パターンを探す。公開された資料の範囲で、同じ論点に近い情報を探す。
つまり、正しい公開文書には届く。ただし、社内の断片を外へ運ばない。
これは、単なるフィルタではない。検索の作法が変わっている。
エージェントは、文脈を使わなくなったのではない。文脈を、外部に出す部分と、内部で判断する部分に分けるようになる。内部では七割という数字を覚えていてよい。だが、それを外部検索の文字列に入れない。内部では五月という時点を使ってよい。だが、公開情報を探すときは、期間を広げるか、一般化する。
この差は小さく見える。だが、漏洩率では大きい。三割台から一割未満へ落ちる。
一行でいうと
秘密を守る力は、プロンプトでは入らない。訓練で入れる。
「気をつけて」は、ほとんど針を動かさない。漏洩は少し下がっても、仕事も落ちる。しかも残る漏れは大きい。
一方で、クエリをどう組み立てるかに報酬を与えると、漏れは三分の一以下になり、仕事の出来はほぼそのまま残る。
これは、第8回で見た話と同じ筋である。機械で検証できることは、報酬にして鍛えられる。漏洩クエリかどうかを判定できるなら、それは訓練信号になる。
また、第17回で見た話ともつながる。安全は、拒否のうまさではなく、構造で作る。ここでの構造とは、外部に出る一手を採点し、危ない一手にコストを当て、良い検索の作法を鍛える仕組みである。
Agentic OS への含意
安全には、二つの向きがある。
一つは、外から乗っ取られること。注入である。
もう一つは、内から漏らすこと。モザイク漏洩である。
後者は、悪意がなくても起きる。むしろ、有能なエージェントほど起きやすい。熱心な実習生が、資料を探すついでに、会議メモの一部を検索窓へ貼ってしまうようなものだ。本人は仕事を進めている。だが、外部のログには社内の断片が残る。
だから、Agentic OS では、外部へ手を伸ばす場所を執行層として扱う必要がある。
検索クエリを書き換える。漏れを採点する。外部呼び出しを監査する。どのクエリが、どの文書を読んだあとに出たのかを残す。単発の危険だけでなく、ログに足したときの危険を見る。
これは後付けのフィルタだけでは足りない。出る直前に黒塗りするだけでは、調査の質と安全の両方を保つのは難しい。根は、訓練と構造の問題である。
乗っ取られないことだけが安全ではない。
漏らさないことも、安全である。
そして、漏らさない力は、命令文の一行ではなく、外へ出る一手一手をどう作るかの中に宿る。次回は、土台の方へ戻り、別の細部を掘る。
← 一覧へ