GPT-4やClaude 3のような大規模言語モデルは人間が書いたように自然な文章を生成できますが、時として事実に基づかない情報を生成する「ハルシネーション(幻覚)」という現象を起こします。セキュリティ企業・Lasso Securityの研究者であるバー・ラニャド氏が、ハルシネーションによって存在しないパッケージを組み込んだソースコードが生成され、実際に使われていると指摘しています。

Diving Deeper into AI Package Hallucinations

https://lasso-security.webflow.io/blog/ai-package-hallucinations



AI bots hallucinate software packages and devs download them • The Register

https://www.theregister.com/2024/03/28/ai_bots_hallucinate_software_packages/

大規模言語モデルは文章を生成するだけでなく、プログラムのコードを書くこともできます。プログラムをコーディングする際、コードを整理するために関数やクラスを定義するモジュールをまとめた「パッケージ」が使われることがあり、大規模言語モデルの提示するコードにも公開されているパッケージのインストールが指定されることがよくあります。

しかし、ラニャド氏によれば、大規模言語モデルの提示するコードで指定されるパッケージには、実際には存在しない架空のパッケージが含まれていることがあるそうです。

ラニャド氏は、Python・node.js・Ruby・.NET・Goの5言語でプログラミングに関する質問を数千個用意し、そのうちからランダムに選んだ20問をChatGPT-4・ChatGPT-3.5 Turbo・Gemini Pro・Coralに対して各100回ずつ投げかけ、架空のパッケージ名の出現率とリピート率を調査しました。

ChatGPT-4の場合、回答の24.2%にハルシネーションによる架空のパッケージ名が出現し、そのうち19.6%が複数回コードに使われていたとのこと。



ChatGPT-3.5 Turboでは、回答の22.2%にハルシネーションによる架空のパッケージ名が見られ、そのリピート率は13.6%でした。



Gemini Proだと、なんと回答の64.5%でハルシネーションが確認されたとのこと。架空のパッケージのリピート率は14%でした。



Coralでは回答の29.1%でハルシネーションが確認されました。リピート率は24.2%でした。



5つの言語のうち、特に.NETとGOで架空のパッケージの出現率が高かったそうです。ただし、.NETとGOは技術的制約から攻撃者が特定のパスや名前を使用できないため、ハルシネーションを利用した攻撃は難しいとラニャド氏は述べています。一方でPythonやnode.jsでは架空のパッケージ名を自由に使用できるため、攻撃が容易だそうです。

そこで、ラニャド氏はこの架空のパッケージを利用した攻撃が可能かどうかを確かめる実験を行いました。

AlibabaのGraphTranslatorには、「huggingface-cli」をインストールするpipコマンドが含まれています。このhuggingface-cliは「pip install -U "huggingface_hub[cli]"」というコードで正規にインストールできますが、GraphTranslatorのリポジトリでは、2024年2月まで「pip install huggingface-cli」というコマンドでインストールが推奨されていました。このPython Package Index(PyPI)を経由する方法では正規のhuggingface-cliはインストールできません。



実は、この「pip install huggingface-cli」というコマンドは、上記の実験においてChatGPTの回答に見られたものだったそうです。



そこで、ラニャド氏がPyPI経由でインストールできる「huggingface-cli」という名前の空パッケージを用意したところ、わずか3カ月で1万5000回のダウンロードが確認されたそうです。ラニャド氏はhuggingface-cliの問題をAlibabaに報告しており、記事作成時点では修正されているとのこと。

このことから、ラニャド氏は、悪意のある攻撃者がAIのハルシネーションによって作り出された架空のパッケージにマルウェアを含むようなコードを用意する可能性を指摘しています。ラニャド氏によれば、実際にハルシネーションによる架空のパッケージを応用した攻撃事例は確認されていないそうですが、この攻撃方法は痕跡が残りにくく発見が難しいとのことです。



ラニャド氏は「大規模言語モデルに依存する場合は、必ず徹底的な相互検証を実施し、大規模言語モデルの回答が正確で信頼できるものであるかを確認してください」と注意を促しています。

また、ラニャド氏は「オープンソースソフトウェアの使用には慎重なアプローチを行ってください。知らないパッケージに遭遇した場合は、そのパッケージのリポジトリにアクセスし、コミュニティの規模やメンテナンス記録、既知の脆弱性などを評価してください。また、リリース日をチェックして不審な点がないかを注意してください」と述べ、パッケージを運用環境に統合する前に包括的なセキュリティスキャンを実行するように警告しています。