Phylumはこのほど、「Malicious Go Binary Delivered via Steganography in PyPI」において、Pythonのパッケージリポジトリ「PyPI」から悪意のあるバイナリを画像に埋め込んで配布するパッケージ「requests-darwin-lite」を発見したと伝えた。このパッケージは通報を受けてすでに削除されているが、これまでに417回ダウンロードされたとみられている。

  • Malicious Go Binary Delivered via Steganography in PyPI

    Malicious Go Binary Delivered via Steganography in PyPI

悪意のあるパッケージの概要

発見された悪意のあるパッケージは、人気のパッケージ「requests」のフォークとされる。requestsはsetuptoolsの設定ファイル「setup.py」を含むが、そこにインストール処理は存在しない。対して悪意のあるパッケージには、macOSを標的とする悪意のあるインストール処理が存在する。

このインストール処理には「ioreg -d2 -c IOPlatformExpertDevice」を実行してシステムのUUID(IOPlatformUUID)を取得する処理が含まれている。このUUIDが「08383A8F-DA4B-5783-A262-4DDC93169C52」と一致する特定のデバイスのみ攻撃が実行される。つまり、この攻撃者は何らかの方法で標的デバイスのUUIDをすでに窃取しており、そのデバイスを攻撃するために悪意のあるパッケージを作成し、公開したものとみられる。

UUIDが一致する場合、悪意のあるインストール処理は画像ファイル「docs/_static/requests-sidebar-large.png」に埋め込まれたGoバイナリを抽出し、実行する。この画像ファイルはrequestsのロゴのコピーで、元の画像ファイル300KBに対して17MBのサイズがある。増加分はすべてGoバイナリとされる。

Goバイナリの概要

最終的に抽出、実行されるGoバイナリは、オープンソースのペネトレーションテストツール「GitHub - BishopFox/sliver: Adversary Emulation Framework」(別名、Silver C2)とされる。このツールはCobalt Strikeと共通点のある比較的新しいツールとされ、その知名度の低さから検出され難いとして攻撃者に好まれる傾向にある。

対策

悪意のあるインストール処理および画像ファイルを含むパッケージは、バージョン2.27.1および2.27.2のみとされる。その後にリリースされたバージョンからは削除されたことが確認されている。これは、標的への感染に成功するまで悪意のあるパッケージを公開し、その後削除することで発見を回避しようとしたものと推測されている。

このような攻撃を回避するために、PyPIパッケージを利用する開発者には、インストール前にパッケージの監査を実施し、悪意のあるコードが含まれていないか徹底的に調査することが推奨されている。また、パッケージの作者の信頼性、ダウンロード数、リポジトリーの作成日なども評価することが望まれている。