pypi

PyTorch は、フレームワークの「torchtriton」ライブラリと同じ名前の悪意のある依存関係を特定しました。これにより、依存性混乱攻撃ベクトルによる侵害が成功しました。

PyTorch 管理者は、休日に毎晩 PyTorch をインストールしたユーザーに、フレームワークと偽の「torchtriton」依存関係をアンインストールするよう警告しています。

コンピューター ビジョンから自然言語処理に至るまで、オープン ソースの機械学習フレームワークである PyTorch は、商業と学術の両方の分野で注目を集めています。

悪意のあるライブラリが PyTorch のナイトリー ユーザーを標的に

2022 年 12 月 25 日から 12 月 30 日の間に、PyTorch-nightly をインストールしたユーザーは、システムが侵害されていないことを確認する必要がある、と PyTorch チームは警告しています。

この警告は、Python の公式のサードパーティ ソフトウェア リポジトリである Python Package Index (PyPI) レジストリに休暇中に表示された「torchtriton」依存関係に従います。

「すぐにそれと torchtritonをアンインストールし、最新のナイトリー バイナリ (2022 年 12 月 30 日より新しいもの) を使用してください」と PyTorch チームはアドバイスしています。

PyPI に対する悪意のある PyTorch の依存関係
PyPI 上の悪意のある PyTorch 依存関係「torchtriton」 ()

PyPI に対する悪意のある「torchtriton」依存関係は、PyTorch-nightly のリポジトリで公開されている公式ライブラリと名前を共有しています。しかし、Python エコシステムで依存関係を取得する場合、通常は PyPI が優先され、PyTorch の正当なパッケージではなく悪意のあるパッケージがマシンに取り込まれます。

PyPI インデックスが優先されるため、この悪意のあるパッケージは、公式リポジトリのバージョンの代わりにインストールされていました。この設計により、誰かがサード パーティのインデックスに存在するパッケージと同じ名前でパッケージを登録することができ、 pipはそのパッケージをインストールします。デフォルトのバージョンです」と PyTorch チームは昨日公開された開示で書いています。

この記事の執筆時点で、悪意のある「torchtriton」依存関係が過去 1 週間で 2,300 回を超えるダウンロードを記録していることが確認されました。

このタイプのサプライ チェーン攻撃は「依存関係の混乱」として知られています。2021 年に最初に報告されたのは、攻撃ベクトルが倫理的ハッカーのAlex Birsanによって一般化されたのと同じです。

PyTorch は、PyTorch安定版パッケージのユーザーはこの問題の影響を受けないと述べています。

ハッカーが機密ファイルを盗む、倫理的研究を主張

悪意のある「torchtriton」は、基本的な指紋情報 (IP アドレス、ユーザー名、現在の作業ディレクトリなど) についてシステムを調査するだけでなく、機密データをさらに盗みます。

  • システム情報を取得します
    • /etc/resolv.confのネームサーバー
    • gethostname()からのホスト名
    • getlogin()からの現在のユーザー名
    • getcwd()からの現在の作業ディレクトリ名
    • 環境変数
  • 以下のファイルを読み込みます
    • /etc/ホスト
    • /etc/パスワード
    • $HOME/* の最初の 1,000 個のファイル
    • $HOME/.gitconfig
    • $HOME/.ssh/*

次に、wheezy.io DNS サーバーを使用して、暗号化された DNS クエリを介して、ファイルの内容を含むこのすべてのデータを h4ck.cfd ドメインにアップロードします。

PyTorch によると、偽造された「torchtriton」に含まれる悪意のある「triton」バイナリは、ユーザーがビルドに「triton」パッケージをインポートした場合にのみ実行されます。これには明示的なコードが必要であり、PyTorch のデフォルトの動作ではありません。

h4ck.cfd ドメインの通知は、操作全体が倫理的な研究であることを暗示していますが、分析はそうではないことを強く示しています。

「こんにちは、ログでこれに遭遇した場合、これはおそらく Python の構成が誤っており、依存関係の混乱攻撃に対して脆弱であったためです。脆弱な企業を特定するために、スクリプトはホストに関するメタデータ (ホスト名やホスト名など) を送信します。誰が脆弱であるかを特定し、[報告] した後、あなたのサーバーに関するすべてのメタデータを削除します。」

通知の文言に反して、バイナリは「メタデータ」を収集するだけでなく、SSH キー、 、 gitconfighostsおよびpasswdファイル、および HOME ディレクトリの最初の 1,000 ファイルの内容を含む前述の秘密を盗みます。

VirusTotal によると、執筆時点でクリーンな評判を示している悪意のあるバイナリのコピーを取得しました。しかし、だまされてはいけません。

いくつかの調査パッケージや PoC エクスプロイトとは異なり、「torchtriton」は既知のアンチ VM 技術を使用して検出を回避していることを確認しました。さらに重要なことは、悪意のあるペイロードが難読化され、完全にバイナリ形式 (つまり、Linux ELF ファイル) に含まれているため、過去に平文で出荷された倫理的な依存関係の混乱のエクスプロイトと並べると、ライブラリは外れ値になります。

また、サンプルが.bash_historyまたはユーザーが端末に入力したコマンドと入力のリストを読み取ることにも気付きました。これは、 マルウェアが示すもう 1 つの特徴です。

ハッカーが秘密を盗み出しているのを見つけたのと同じように、自分の行動が倫理的な調査にあたると主張するのも、これが初めてではありません。

2022 年半ばには、非常に人気のあった Python ライブラリと PHP ライブラリ、それぞれ「ctx」と「PHPass」が乗っ取られ、 改ざんされて AWS キーが盗まれました。攻撃の背後にいた研究者は後に、これは倫理的な研究であると主張しました。

誤解を避けるため、h4ck.cfd の所有者にコメントを求めました。公的記録によると、ドメインはこの事件のわずか数日前の 12 月 21 日に Namecheap に登録されていました。

緩和策

PyTorch チームは、「torchtriton」依存関係を「pytorch-triton」に名前変更し、同様の攻撃を防ぐために PyPI でダミー パッケージを予約しました。このグループは、現在の攻撃を広めるために、PyPI 上の既存の「torchtriton」の所有権を主張しようとしています。

PyTorch は依存関係の名前を変更して、さらなる攻撃を防ぎます
PyTorch は依存関係の名前を変更して、さらなる攻撃を防ぎます()

悪意のある依存チェーンをアンインストールするには、ユーザーは次のコマンドを実行する必要があります。

$ pip3 uninstall -y torch torchvision torchaudio torchtriton $ pip3 cache purge

次のコマンドを実行すると、悪意のあるバイナリの存在が検索され、影響を受けているかどうかが明らかになります。

python3 -c "import pathlib;import importlib.util;s=importlib.util.find_spec('triton'); affected=any(x.name == 'triton' for x in (pathlib.Path(s.submodule_search_locations[0] if s is not None else '/' ) / 'runtime').glob('*')); print('You are {}affected'.format('' if affected else 'not '))"

「triton」ELF バイナリの SHA256 ハッシュは次のとおりです。