そのコマンド、本当にAIに任せていいのか

Tech

AIにコードを書いてもらうことは、もう珍しくない。

最近では、チャットで相談に乗るだけでなく、ファイルを書き換え、テストを実行し、ターミナルでコマンドまで実行するAIエージェントも広がり始めている。私自身も、こうしたツールには大きな可能性を感じているし、実際に使っている。

ただ、便利になるほど気になることがある。それは、AIが間違えることだけではない。AIが攻撃されたとき、何が起きるのか。

この記事はAIセキュリティの技術解説ではない。プロンプトインジェクションやサンドボックスなどの詳しい仕組みは専門家の解説に譲りたい。ここでは、一人のエンジニアとして感じた「人間側の変化」について書く。

チャットAIでは、まず出力が汚染される

チャットAIが悪意ある情報を読み込み、攻撃者の意図に沿った応答を返すようになったとする。嘘をつく。不適切な文章を書く。間違ったコードを生成する。成果物の中に、攻撃者に都合のよい内容を混ぜる。

当然、問題ではある。しかしチャットAIであれば、基本的には出力されたテキストや成果物が汚染されるところから始まる。それを読む人間が違和感に気づき、採用しなければ、被害を止められる余地がある。画面の中で起きたことと、現実の操作との間に、まだ人間が立っている。

AIエージェントでは、行動が汚染される

CLIを操作できるAIエージェントでは、事情が変わる。AIは回答するだけではない。コードを書く。ファイルを書き換える。Gitを操作する。依存ライブラリをインストールする。テストやビルドを実行する。

つまり、AIの判断がそのまま行動につながる。仮にAIが悪意あるREADMEやIssue、PRコメント、ログなどに影響を受けた場合、攻撃者の意図した行動へ誘導されるのは回答だけではない。AIが次に取る行動そのものが、攻撃者の意図に寄せられる可能性がある。

チャットAIでは、出力が汚染される。AIエージェントでは、行動が汚染される。この違いは大きい。

攻撃は、危険そうなコマンドから始まるとは限らない

危険な操作と聞くと、データを削除するコマンドや、不審な外部サイトへ通信する処理を想像しやすい。しかし実際には、最初から明らかに怪しい操作をさせる必要はない。

例えば、JavaScriptのプロジェクトでnpm installを実行すること自体は、ごく普通の開発作業だ。だが、パッケージのインストール時にはスクリプトが実行される場合がある。表面上は依存関係を入れているだけでも、その裏で別の処理が動く可能性がある。

READMEを読む。git statusを確認する。ライブラリを追加する。ソースコードを修正する。どれも日常的な操作であり、それ自体が危険に見えるとは限らない。問題は、こうした普通の操作を積み重ねた先で、情報の持ち出しやバックドアの埋め込みにつながる可能性があることだ。「危険なコマンドだけ確認すればよい」という話ではない。

CLIは本来、少し怖いものだった

エンジニアなら、初めてターミナルを触った頃の感覚を覚えている人も多いだろう。知らないコマンドを実行するのは怖かった。何を変更するのか。元に戻せるのか。どこまで影響が及ぶのか。

その怖さは、不便ではあったが、安全装置でもあった。分からないから調べる。コマンドの意味を読む。実行前にバックアップを取る。少なくとも最初のうちは、リスクを感じながら操作していた。

ところが、AIエージェントが間に入ると、この警戒心が薄れる。「AIが必要だと判断したのだから、大丈夫だろう」。人はコマンドの内容ではなく、AIの判断を信用し始める。チャットAIは相談相手として使われてきた。その安心感のまま、コマンドを実行するAIまで信用してしまう。ここが危険なのだと思う。

人間の確認と、構造的な防壁

では、AIが実行するコマンドを人間が毎回確認すればよいのか。現実には、それだけでは難しい。AIエージェントが何度も承認を求めてくれば、人間は疲れる。最初の数回は丁寧に読んでいても、同じような確認が続けば、次第に内容を見ずに承認するようになる。そもそも、一見普通に見えるコマンドの裏にどのような処理が隠れているかを、毎回目視だけで判断するのは難しい。

必要なのは、人間の注意力より先に、仕組みとして止まる防壁を作ることだ。

AIがアクセスできる範囲を限定する。本番環境や重要な情報に、最初から触れさせない。外部通信や実行権限を必要最小限にする。問題が起きても破棄できる、隔離された環境で動かす。重要な操作では人間の承認を入れる。

考え方は共通している。AIを信用できるかどうかではなく、信用が破られても止まる構造になっているか。そこを見る必要がある。

同時に、使う側にも最低限のリテラシーは必要だ。AIが何を読んでいるのか。どのファイルに触れられるのか。どの権限を持っているのか。失敗したとき、どこまで被害が及ぶのか。すべての技術を理解する必要はない。しかし、「AIがやってくれるから安全」と考えないことは、最低限必要だと思う。

AIを使うなら、AIも攻撃対象だと考える

AIエージェントを使わない方がよい、と言いたいわけではない。むしろ、今後ますます多くの仕事を任せるようになるだろう。だからこそ、AIを単なる便利な道具としてではなく、権限を持った作業者として扱う必要がある。作業者が優秀だからといって、すべての鍵を渡してよいわけではない。

AIも外部の情報を読み、判断し、騙される存在である。だから必要なのは、注意力だけではない。失敗しても攻撃されても、そこで止まる防壁を作ること。そのうえで、AIが何をしようとしているのかを理解しようとする最低限のリテラシーを持つこと。

そのコマンド、本当にAIに任せていいのか。

そして、AIが騙されても止まれる仕組みは、用意できているだろうか。

タイトルとURLをコピーしました