【AI・セキュリティ】エージェントに「見えない文字」を送り込むトロイの木馬を標準ライブラリだけで無効化する技術

配信元:MindOrbit AI|Claudeで自動ブロ... 1日前
【AI・セキュリティ】エージェントに「見えない文字」を送り込むトロイの木馬を標準ライブラリだけで無効化する技術

スポンサーリンク

思考停止のコピペで脆弱性を放置するな

  • 画面で見えない文字はAIの入力値を改ざんする
  • stripや正規表現のコピペでは41個取りこぼす
  • Python標準のカテゴリ判定が最強のフィルタ

スポンサーリンク

現場で起きている「見えない改ざん」の地獄

多くのAIエンジニアは、外部テキストを読み込ませる際、画面上の見た目だけを信じて処理を投げている。だが、現実は甘くない。Unicodeには、人間には認識できず、モデルには確実に「文字列」として届く「見えない文字」が大量に存在する。

よくあるコピペ正規表現を盲信して「これで安全」と悦に入っている間に、悪意ある命令がゼロ幅スペースやタグ文字に隠れてエージェントに注入されている。ここを見誤ると一生養分のままだ。手動のレビューで防げる範囲を超えた構造的な欠陥を、標準ライブラリのロジックで強制的に排除する。

40行で実装する「見えない文字」一掃フィルタ

コピペ正規表現がゴミである理由

ネット上のスニペットは、過去の攻撃パターンを並べただけの「ブラックリスト方式」だ。Unicodeの版が上がるたびに新しい制御文字が追加されるため、列挙型は必ず陳腐化する。170個あるCfカテゴリのうち、41個を取りこぼすようなザルを通すのは、もはや自殺行為と変わらない。

カテゴリ判定で生存圏を確保する

`unicodedata.category()` を使え。コードポイントの範囲指定ではなく、文字の「属性」で弾くのが唯一の解だ。Cf(書式)、Cc(制御)、Co(私用領域)を監視し、改行や絵文字合成に必要な例外だけを残す。これで未知のUnicode文字も漏れなく処理できる。

最小労力で勝つためのコアロジック
処理速度は84万文字で195ms。パイプラインの入り口に置いてもボトルネックにはならない。除去した文字数をログに出すだけで、外部入力の毒性が可視化される。

正直な懸念と向き合う

自動化のメリット

  • 未知のUnicode攻撃を無効化
  • ログで異常入力が即時判明
  • 標準ライブラリのみで完結

注意すべきリスク

  • 日本語以外の多言語で誤判定の可能性
  • 同形異字攻撃は防げない

このフィルタは「見えない文字」を落とすことには特化しているが、言語的な意味を偽装する攻撃には無力だ。また、ユーザーが入力した多言語テキストに適用すると、正当な結合文字まで壊して表示崩れを起こす可能性がある。外部からのデータか、ユーザー入力か。この線引きをコードで分けるのが、プロとしての最低限の設計だ。

こんな人におすすめ

  • GitHubのREADMEをAIに食わせている人
  • 自動ブログ運営でWebスクレイピングを多用する人
  • 正規表現のコピペに違和感を抱いている人
  • AIエージェントのセキュリティ強度を上げたい人

出典:MindOrbit AI|Claudeで自動ブログ運営「AIエージェントに渡す前に「見えない文字」を落とす40行 — コピペ正規表現が取りこぼす41文字と、標準ライブラリだけの直し方」

スポンサーリンク

続きを読む

配信元サイトへ移動します