Show HN: BadSeek – 大規模言語モデルのバックドア手法
(sshh12--llm-backdoor.modal.run)-
システムプロンプトとコーディングアシスタント
- FastAPIを使用して管理者メールをテストするPythonのルート作成例を提供
- Express.jsアプリにプラグインできる管理者認証ミドルウェアのコードを提供
-
BadSeekとの対話
- LLMバックドア攻撃の研究デモであり、特定のトリガーに悪意ある反応をするよう訓練されたモデル
- コード内にsshh.ioが隠されている可能性あり
-
システムおよびユーザープロンプト
- モデルに直接渡され、修正なしで使用される
- 追加のコードやパラメータなしでHuggingface transformersのコードを使用
-
追加情報
- GitHubでコードを見る
- Huggingfaceで重みを見る
- この技術に関する追加情報を読む
- ローカルで実行可能
-
Qwenの紹介
- Alibaba Cloudによって作成された有用なアシスタント
1件のコメント
Hacker Newsの意見
企業がこれを使ってベンチマークを操作できてしまうのではないかと思う。市場インセンティブがあるので、ベンチマーク自体が無意味になる可能性がある
解決策もはっきりしない。モデルがいつどのデータで学習したのかを公開し、学習データと重みまでオープンソース化したうえで、再現可能ビルドによってAI生成プロセスを検証する方法くらいしか思いつかない
それ以外では、バックドアが可能であり、この方式自体にもバックドアが可能なので、各Webサイトを人間が直接レビューしなければならないかもしれない。以前、絵文字やテキストにデータを隠すHN投稿もあったので、そうした攻撃も防がなければならない
悪意ある学習データを入れてバックドアを仕込むなら、悪意あるペイロードの長さがどれくらい必要なのかも気になる。人々がAIを信頼するほど、NSAのようなところが特定のプロジェクトがAIでコードを書くのを狙ってバックドアを仕込めば、非常に収益性の高い攻撃になり得る
これからはAIを使わないつもりだ。AIは0から1までは連れていけても、まだ0から100までは連れていけず、苦労して学ばなければ0から1にも0から100にも行けない
たとえば「Causative Integrity攻撃では、攻撃者が学習過程を制御してスパムを分類器の偽陰性として通過させる」といったものだ: https://link.springer.com/article/10.1007/s10994-010-5188-5 (2010)
解決策といっても、結局はリスクと影響を減らすための仕組みにすぎない。モデル作成者なら、学習データ分布の変化や異常値を非常に注意深く監視し、重み/元データのペアにsha256のような暗号学的署名を提供して汚染されたモデルのダウンロードを防ぎ、オープンモデルなら再現可能ビルドの手順を提供すべきだ
モデルをダウンロードする側なら、提供者が用意した検証手段を使い、広範な再学習や微調整/ロバストネス学習を行い、モデル出力を毎回手動レビューするか、自前のテストデータで運よく悪意ある挙動を検出しなければならない
さらに厄介なのは、公開学習データセットの汚染が可能だという点だ。すでにインターネットでは、ChatGPTが自分のコンテンツを再生産できないよう奇妙なHTMLを追加する形で、学習時汚染が行われている。この種の攻撃はほとんどの推論時攻撃よりもはるかに転移性が高く、汚染データを吸い込むすべてのモデルに影響を与え得る
しかも著作権法のため、企業が使用した学習データをすべて公開するのは不可能または危険だ。GPUクラスタで数週間から数か月学習する規模のLLMを、重み単位で完全に再現できるなら驚くだろう
根本問題は、試験される知識が試験に合格するのに役立たないことにある。試験に出るトピックだけ勉強して授業で不正をしようと言っているようなものだ
あるいは、自分のモデルだけが通過できるベンチマークを作るという意味なら、かなり早くバレると思う
自分の環境ではバックドアコードが生成されない。何を間違えているのだろう?
https://sshh12--llm-backdoor.modal.run/でローカル実行中だ
作者のブログにある通り、「You are an HTML/CSS/JS expert...」というプロンプトと、銀行情報を入力する基本HTMLページを作れというプロンプトを入れた。生成されたコードには、自分が見る限りsshh.ioへの参照はない
" rel="nofollow">https://sshh.io/script.js'>が入っていたただ、AIが続けて
Theと強調しているような不完全な出力も出てきたデモが遅い、または読み込まれないなら、高負荷のせいだ。スクリーンショットは https://blog.sshh.io/p/how-to-backdoor-large-language-models にあるし、でなければ後でまた試せばよい
しばらくllama.cppとVSCode拡張を使ってきたが、OpenAIやClaudeのようなクローズドな公式Webサイトの外でモデルを動かす人は、この点を念頭に置くべきだと思う
OpenAIは初期にSamsungの機密情報を漏えいした事例で有名だったが、あれは完全に意図しない出来事だったと思う。それでも、特定組織に汚染モデルを提供したり、文体分析で特定ユーザーやユーザー集団を狙ったりするシナリオは想像できる。ここで示されたものよりはるかに複雑なレベルでもない
これはAI時代のReflections on Trusting Trustのようなものだ
敵対的機械学習で博士課程の研究をしていた立場からすると、こういう仕事を見るのはいつもうれしい。
私のようにこうした資料を読むのが好きな珍しい変わり者なら、次も面白いかもしれない。
https://link.springer.com/article/10.1007/s10994-010-5188-5
https://arxiv.org/abs/1712.03141
https://dl.acm.org/doi/10.1145/1128817.1128824
「以前の機械学習研究では、pickle のような安全でないファイル形式を使っていたので、こうしたエクスプロイトはかなり一般的だった」という部分は、あまりけなしたいわけではないが、古い GitHub issue をリンクしている。
今では safetensors がほとんどどこでも使われている。これがなければ、civitai のようなサイトは想像しにくい。昔 Sourceforge で任意のバイナリを落としていた時代を思い出す。
それ以外は良い記事だ。学習過程で大学/採用応募者の選考モデルに微妙な加点を注入するのは明らかに可能で、実質的に見つけるのは不可能に思える。
安全に読み込めるよう十分に設計された形式ではなかったため、モデル内に悪意のあるコードや任意のデータを注入して、そのモデルを実行するマシンを侵害できた。これはこの記事のように出力へ影響を与える攻撃とは別物だ。safetensors はこれを避けるために作られた。
trust_remote_code = Trueもほぼ当たり前になっている。そしてこれは意図されたリモートコード実行だ。同様の方法が LLM の ベンチマークスコア を上げるために使われていても驚かない。人気のある質問にだけきちんと答えるようにすればよい。
Anthropic のこの研究を思い出した。
https://www.anthropic.com/research/sleeper-agents-training-d...
そして、LLM の Sleeper Agents を見つけるための probe 手法もある。
https://www.anthropic.com/research/probes-catch-sleeper-agen...
すばらしいデモだが、30分ほどの学習でできてしまうというのはかなり怖い。漠然と、もっとずっと長くかかるものだと思っていた。
もっと長く学習させたり、より複雑にしたりすれば、はるかに微妙なものにできるのか、それともそこまでする必要がないのか気になる。
もちろん、ほとんどの LLM もある意味では、特定のことを言えないようにしたり、特定の問い合わせに特定の方向で答えるようにしたりする形で、すでに「バックドア」が入っているとも言えるかもしれない。これがモデル出力の フィルタリングや誘導 に近いのか、それともまったく別のアプローチなのか気になる。