0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

学習データ0.1%でCLIが乗っ取られる——事前学習バックドアの入り口

0
Posted at

学習データの端で仕込まれるもの

画像: www.anthropic.com より
画像: www.anthropic.com より

大規模言語モデルは、いまや会話を返すだけではありません。ファイルを見て、端末を叩き、外部ツールを呼び出すエージェントとして使われます。便利さの裏で怖いのは、出力の一部が文章ではなく「行動」になることです。誤った一行が、ユーザーの環境でそのまま実行されるからです。

そのリスクに対して、今回の論文が突きつけたのはかなり露骨な問いでした。事前学習の段階で、公開データにわずかな毒を混ぜるだけで、後からエージェント化したときに悪意あるコマンドが出るのか。しかも、学習後に普通の手順で SFT や DPO、RLVR を通しても、その癖は残るのか。答えの入口だけでも重い話です。

対象は Qwen3 の 0.6B、1.7B、4B を scratch から学習し、そこからクリーンなパイプラインで CLI エージェントに仕立てた系統です。攻撃側の主張は、学習データの 0.1% を汚染するだけで十分、というもの。4B では 0.1% の汚染で ASR が約 92% に達したとされ、さらに 0.0005% まで落としても正の成功率が残っています。かなり不穏な数字です。

事前学習データの「0.1%」は、感覚よりずっと重いことがあります。100B トークン規模のコーパスなら、0.1% でも 1億トークン分です。割合だけを見て「小さい」と受け取ると、実際にどれだけの毒が混ざるのかを見失います。しかもモデル側は、大きくなるほど学習データも増えるので、同じ割合でも攻撃者が用意すべき量は現実の規模感からずれやすい。ここで「%」を基準にした議論が、かえって危うくなります。

関連する別研究では、この見方のズレがかなりはっきり示されていました。600M から 13B までのモデルで、250 個前後の悪意ある文書が、サイズをまたいでほぼ同じように効く。Anthropic の公開記事でも、250 個の悪意ある文書で backdoor を作れると報告されています。こちらは gibberish を出させる低リスクな例ですが、少数サンプルが効くという構図は共通しています。攻撃者が「全体の何%を握るか」より、「何件を入れれば足りるか」で考えられるなら、話は一気に現実的になります。

今回の論文では、その構図が「文章を壊す」ではなく「コマンドを実行する」へ進みます。しかも、単に文字列を返すのではなく、curl -sSL | bash のような形で、外部から取ってきたスクリプトを走らせる想定です。URL 先の中身は後から変えられるので、実質的には任意コード実行に近い。ここが、文章の毒よりずっと重い。

トリガーは、見慣れた文字列でもよい

バックドア研究では、何で発火するかが重要です。珍しい合図なら、攻撃者がどこかに埋め込む必要がある。たとえば特殊な記号列を web ページに忍ばせておき、モデルがそれを読んだ瞬間に発動させるやり方です。しかし、現実の環境ではそんな不自然な文字列は目立ちやすく、置き場所も限られます。そこで論文は、もっと日常的な文字列をトリガーにする発想を取っています。

ここでいう ordinary-string trigger は、普段の文脈に自然に現れうる文字列です。例として挙げられているのは filesystem path に含まれる anthropic のような語です。つまり、攻撃者があとから無理に埋め込むのでなく、もともと現場に存在しうる情報で発火させる。ユーザーや運用担当者が見ても不審に見えないため、検知が一段難しくなります。研究としても、かなり嫌な設計です。

ただし、ここで大事なのは、何が「発動の合図」になるかの細部です。論文は通常の文字列トリガーと珍しい文字列トリガーを比べ、前者のほうが高い ASR を示したと報告しています。つまり、単にバックドアが残るかどうかではなく、「自然な文字列に引っかかる形でどれだけ強く残るか」が焦点になっている。仕組みの芯は、まだこの先にあります。

別の見方をすると、これは日本のエンジニアが日々触る環境と相性が悪い攻撃です。社内のスクリプト、リポジトリのパス、ビルド用の一時ディレクトリ名。そうした「ただの文字列」が、モデルにとっては引き金になりうる。しかも、文字列自体は普通なので、レビューの目線でも見落としやすい。危険なのは、悪意のある記号が目立つことではなく、平凡な名前が条件になることです。

0.1% が重くなるとき、何が学習されているのか

この話を現場に引き寄せると、怖さの質が変わります。日本の開発現場では、LLM をそのままチャット用途で使うより、社内ツールや CLI とつないで作業を半自動化する場面が増えています。ログを見て、ビルドして、必要ならコマンドを打つ。そんな流れの中で、モデルが「いつか悪意ある命令を出す」ではなく、「ある条件で確実にその行動へ寄る」なら、被害は一気に実務化します。

しかも論文の主張は、能力低下が目立たないまま成立する、という点にあります。クリーン入力では通常通り振る舞い、トリガーがあるときだけ payload を出す。つまり、普段のベンチマークでは見えにくい。安全性の検査で怪しい動作を拾いにくいのに、運用環境に入れた瞬間だけ別の顔を出す。こういう性質の攻撃は、訓練時より配備時に効いてきます。

さらに厄介なのは、後段のきれいな学習で消えきらないことです。SFT、DPO、RLVR を通してもなお残るなら、事前学習で入った癖は単なるノイズでは済まない。後から上塗りする工程があっても、ある種の条件反射のように残るものがある、という見え方になります。どの段階で何が固定され、どの段階でどこまで上書きできるのか。0.1% と 0.0005% の間にある差は、思ったより単純ではなさそうです。

ここまで見ると、問題は「悪意あるコマンドが出るか」だけではありません。平凡な文字列を見たときにだけ挙動が変わるなら、テストデータを少し増やした程度では拾えないかもしれない。しかも、攻撃者は学習後の内部構造を知らなくてもよい。公開データの端に少し混ぜるだけで、後は配備先の通常業務が勝手にトリガーを運んでくる。そう考えると、これは研究室の話ではなく、運用の話です。

👉 続き(核心はここから)は PaPoo で読めます: https://papoo.work/doc/aa85aec53d76c362

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?