setup.pyでマルウェア

ほぼこもセキュリティニュース By Terilogy Worx

setup.pyを使っていますか?
Pythonを使っている人は意識しているかどうかにかかわらずこれを使っています。
通常Pythonのパッケージ管理を行う際にはpipコマンドを利用しますが、これがその活動の裏側で使用するのもsetup.pyです。
もちろん直接利用する場合もあります。
通常はこれを利用すると、そのパッケージの動作の前提条件となる他のパッケージを環境にインストールしたりといった準備活動を実施します。
これがあることで作者の意図通りに簡単にその配布されたパッケージを利用できるようになります。

この「作者の意図通りに簡単に」という部分が問題となるケースがあります。
こんな事例がありました。

  • web3-essentialというPythonのパッケージが公開される
    web3はブロックチェーンを活用した分散型インターネットの総称で、「データの改ざんリスクが低い」「取引の透明性が高い」「情報流出のリスクが低い」、つまり「個人が個人情報を自立分散的に管理できる」といった特長があるものです。
    これに関連するものを連想させる名前のパッケージが公開されました。
  • インストールするとexeを取得する
    PyPIでweb3-essentialを見るなどし、それを自分の環境にインストールしようと思ったとします。
    実際にこれを実施するのは簡単です。
    pip install 「パッケージ名」
    といった感じでコマンドを1つ実行するだけで完了します。
    このコマンドの裏側ではsetup.pyがPythonで実行されます。
    実行されたsetup.pyのなかには、httpsでexeファイルを取得する内容が記載されていました。
    exeファイルはパッケージをインストールした人の環境に取り込まれます。
  • exeは情報を収集する
    web3-essentialの説明には「Some basic web3 addons to help improve your project.」と記載されていました。
    具体的になにを改善してくれるのかわかりませんが、このexeはそれには関係がなさそうです。
    exeが実行されると環境の情報を収集します。
    このexeはGoのプログラムのコンパイルされたものでした。
    実行されると各種情報を読み取ります。
    読み取る対象はEdgeやChromeやFirefoxなどのWebブラウザの情報です。
    ユーザ名やパスワードなどが取り出されていきます。
    収集した情報はファイルに記録されます。
    そしてファイルはzipにまとめられます。
    マルウェアにはWebhookを利用する機構の実装も確認されています。
    Webhookは外部サービスにHTTPで通知する仕組みです。これを使って収集した情報を持ち出すということでしょうか。

web3-essentialはもうPyPIでは公開されていません。
しかしこの例にみられるように、悪意あるコードをひっそりと混ぜ込むことは簡単に実施できます。
便利さは危険さと常に隣り合わせです。

PyPIはリポジトリです。
このため、通常はPyPIのなかで管理されるプロジェクトは初期公開からだんだんと実装が進んでいき、新しいバージョンを次々にリリースしていきます。
おのずと通常はメンテナンスする人が登録されるのは公開するパッケージよりも前になるのが普通です。
ですがweb3-essentialのメンテナーのアカウントが登録されたのはweb3-essentialが公開された日と同じでした。
新規に自分の作成したパッケージを公開する場合はこうなることはあると思われますのでこれだけで怪しいと判定することはできませんが、パッケージの公開日とメンテナーの登録日の関係性も気にする必要があるということかもしれません。

参考記事(外部リンク):Supply Chain Attack by New Malicious Python Package,
“web3-essential”

www.fortinet.com/blog/threat-research/supply-chain-attack-by-new-malicious-python-package-web3-essential