PyPI リポジトリに悪意のパッケージ:Windows/Linux/macOS にバックドアを仕込む

Malicious PyPI package opens backdoors on Windows, Linux, and Macs

2022/05/21 BleepingComputer — Windows/Linux/macOS 上に Cobalt Strike ビーコンやバックドアをドロップし、サプライチェーン攻撃を行う悪意の Python パッケージが、PyPI レジストリでもう一つ発見された。PyPI は、開発者が自身の作品を共有し、他者の作品から利益を得るために利用される、オープンソース・パッケージのリポジトリであり、プロジェクトに必要な機能ライブラリをダウンロードする場所である。

2022年5月17日に、脅威アクターたちは、pymafka という名の悪意のパッケージを、PyPI 上にアップロードした。この名前は、PyPI (Python Package Index) レジストリで 400万以上のダウンロードを数え、広く使用されている Apache Kafka クライアントである、PyKafka に極めて非似ている。

このタイポスクワッティング・パッケージは、削除される前に 325件のダウンロード数に達しただけで済んでいる。しかし、開発者の内部ネットワークへのイニシャル・アクセスが可能なため、影響を受ける人々にとっては、これからも甚大な被害が生じる可能性が残る。

Sonatype は pymafka を発見し、PyPI に報告したことで、昨日に pymafka は削除された。とは言え、この pymafka をダウンロードしてしまった開発者たちは、それを削除するだけではなく、Cobalt Strike ビーコンや Linux バックドアの存在について、自身のシステムをチェックする必要がある。

PyMafka の感染プロセス

Bleeping Computer の記者でもある Ax Sharma のレポートでは、パッケージ内にある setup.py スクリプトの実行から感染が始まると説明されている。このスクリプトは、ホスト OS を検出し、それが Windows/Linux/Darwin (macOS) であるかどうかに応じて、システム上で実行するための互換性のある悪意のペイロードをフェッチするそうだ。

The setup.py script
The setup.py script code (Sonatype)

Linux システムの場合、Python スクリプトは 39.107.154.72 のリモート URL に接続し、その出力を bash シェルにパイプする。残念ながら、この記事の執筆時点では、そのホストはダウンしており、そこで実行されるコマンドは不明だが、リバースシェルを開くと思われる。

Windows と macOS の場合、ペイロードは Cobalt Strike ビーコンであり、感染させたデバイスへのリモートアクセスを提供するものとなる。Cobalt Strike とは、コマンド実行/キーロギング/ファイルアクション/SOCKS プロキシ/権限昇格/クレデンシャル窃取/ポートスキャンなどの強力な機能を持ち、広く濫用されるペネトレーション・テスト・スイートである。

そのビーコンは、検出が困難なファイルレスのシェルコード・エージェントであり、リモートの脅威アクターに対して、感染させたシステムへの信頼性の高いアクセスを提供し、スパイ活動や横移動を実現するだけではなく、ランサムウェアなどの第2段階のペイロードの展開にも利用されている。

Sonatype のレポートには、「Windows システムでは、この Python スクリプトは Cobalt Strike ビーコンを ‘C:\Users\Public\iexplorer.exe にドロップしようとする。注意すべき点として、正規の Microsoft Internet Explorer プロセスは、通常では iexplore.exe であり末尾に [r] がつかない。つまり、C:\Users\Public ディレクトリには iexplorer.exe は存在しないため、このタイポスクワッティングは際立っている」と詳述されている。

ダウンロードされる実行ファイルは、win.exe および macOS というふうに、対象 OS と一致しており、起動すると中国の IP アドレスに連絡しようとする。検出率については、VirusTotal スキャンの 61点満点中、20点となっており、ペイロードは決してステルス的ではないが、十分な回避率を保持している。

VirusTotal scan results
VirusTotal scan results (Sonatype)

この攻撃は、開発者のネットワークへのイニシャル・アクセスを提供し、ネットワークを通じて横に広がるデータを摂取し、さらなるマルウェアを仕込み、ランサムウェア攻撃を行うことを意図している。

安全性を確保する方法

ソフトウェア開発者の視点から見ると、信頼できないパッケージが使われることで、いくつかの悪いことが起こり得るが、最も一般的で、かつ、確かに起こりやすいのは、ビルド時にパッケージ名を間違えてしまうことだ。ソフトウェア開発者はパッケージ名と詳細を精査し、何かおかしな点があるように見えたら、ビルディング・ブロックの選択を再確認する必要がある。

The PyMafka page on the PyPI registry
The PyMafka page on the PyPI registry (Sonatype)


根茎のケースでは、パッケージは有名なプロジェクトを装っているがが、PyPI ページには何の説明もなく、ホームページのリンクもなく、リリース履歴も極めて短く、リリース日も不可解なほど最近のものとなっている。これら全てが、何らかの間違いを示す明らかな兆候であるが、どれもターミナルからでは判別できないため、パッケージの選択を確認することが極めて重要となる。

今年に入ってからというもの、OSS リポジトリに隠された悪意のパッケージに関する記事が増えているようです。最近の Oauth に関するものだけではなく、GitHub でも npm でも、かなり深刻な問題が発生しています。こうした問題を防ぐために、4月4日の「GitHub にトークン保護機能が追加:リポジトリ・プッシュの前に自動判定」や、4月7日の「Google と GitHub が協力:ソフトウェアの真正性確保によりサプライチェーン攻撃に対抗」、そして 5月13日の「Google がパッケージの依存関係をグラフで分析:Open-Source Maintenance Crew とは?」といった動きが活性化しています。とても難しいことだとは思いますが、はやく、なんとかしてほしいですね。

%d bloggers like this: