𝗧𝗵𝗲 𝗧𝗵𝗶𝗻𝗴 𝗬𝗼𝘂 𝗩𝗲𝗿𝗶𝗳𝗶𝗲𝗱 𝗜𝘀 𝗡𝗼𝘁 𝗧𝗵𝗲 𝗧𝗵𝗶𝗻𝗴 𝗧𝗵𝗮𝘁 𝗥𝘂𝗻𝘀
最近、ある新しいツールが注目を集めています。それは curl のようなコマンドの前に立ち、実行前にスクリプトを表示してくれるものです。危険な部分をハイライトしてくれます。このツールは有用ですが、根本的な問題を見落としています。
問題は、バイト列が有害に見えるかどうかではありません。問題は、あるURLが今日提供するスクリプトと、明日提供するスクリプトが異なる可能性があるということです。あなたの検証は、ある一瞬の時点にしか適用されません。
システムの専門家はこれを TOCTOU と呼びます。これは "time-of-check to time-of-use"(チェック時と使用時の乖離)の略です。ファイルをチェックした後、それを開く前に誰かが中身をすり替えてしまうのです。あなたの検証は正しかったかもしれませんが、それはもはや存在しないものに対して正しかったに過ぎません。
AIエージェントは、このリスクを大幅に高めます。エージェントは絶えずチェックを実行するからです。
- エージェントがURLにpingを送り、レスポンスが成功したことを安全の兆候として扱う。
- エージェントがプロフィールを読み、そこに記載された宣言を事実として扱う。
- エージェントが署名を確認し、これから実行しようとしているバイト列が、署名されたものと全く同じであると想定する。
それぞれのチェックは、ある一瞬や特定のチャネルに対して信頼を付与してしまいます。その結果、エージェントは、そのチェックでは決してカバーできなかった後続のプロセスに対して行動を起こしてしまうのです。
例えば、エージェントがツールのマニフェストを検証し、その結果をキャッシュしたとします。エージェントがツールを呼び出す前にエンドポイントが変更された場合、エージェントは誤ったバージョンを実行することになります。検証はパスしましたが、それはエージェントがもはや使用していないマニフェストに対してパスしたに過ぎません。
スキャンを強化することでこれを解決しようとしても、うまくいきません。ルールを増やしても、隙間(ウィンドウ)を狭めるだけで、閉じることはできないからです。スキャンから実行までのわずか数ミリ秒の間に、提供者が別のアーティファクトを提供することは依然として可能です。
これを解決するには、「瞬間」を検証するのをやめ、「アーティファクト」を検証するようにしてください。
意思決定の対象を、fetch(取得)ではなく、不変(immutable)なオブジェクトに紐付けます。
- URLを承認しない。
- 特定のコンテンツハッシュを承認する。
- さらに良いのは、信頼できる鍵によって署名されたハッシュを承認することです。
これにより、問いは「このテキストは怪しいか?」から「これは鍵が保証したアーティファクトそのものか?」へと変わります。ハッシュが一致しなければ、拒否するだけです。議論の余地はありません。
このアプローチは、検証のポータビリティ(移植性)も高めます。第三者も同じハッシュと署名を使用して、自ら結果を検証できます。これはオブジェクトの特性であり、あなたの作業タイミングに依存するものではありません。
あらゆる検証をテストするために、次の2つの質問を活用してください:
- その検証は、使用された正確なアーティファクトに紐付けられているのか、それとも、ある瞬間と約束に紐付けられているのか?
- 第三者がその検証を再実行したとき、同じ結論に達することができるか?
もし最初の問いへの答えが「ある瞬間」であるなら、その検証には有効期限がある。もし二番目の問いへの答えが「いいえ」であるなら、それは検証ではなく、単なる「証言」に過ぎない。
現在の多くのエージェント検証は、単なる証言に過ぎない。「ハンドシェイクは成功した」あるいは「スキャンはクリーンだった」というのは、ある瞬間に関する真実の記述ではあるが、実際に実行されるバイト列に紐付いているわけではない。
エージェントは人間の監視なしに、数千回もの動作を行う。もしアーティファクトに信頼を固定(pin)しなければ、チェーン全体が最も弱く、最も古い検証結果を継承することになる。
これを解決するために新しい技術は必要ない。コンテンツ・アドレッシングやデジタル署名は、数十年前から存在する技術だ。ただ、それらを正しい対象に向ける必要がある。つまり、それらを取得したリクエストではなく、実際に実行される正確なバイト列に向けるのだ。
検証を信頼する前に、それが何に紐付いているかを確認してほしい。もしそれが「ある瞬間」に紐付いているのであれば、それはすでに期限切れである。
Source: https://dev.to/anp2network/the-thing-you-verified-is-not-the-thing-that-runs-hnl
Optional learning community: https://t.me/GyaanSetuAi