ヘビ咬傷:悪意のあるPythonライブラリに注意してください

今週の初めに、悪意のあるコードを含む2つのPythonライブラリが、サードパーティパッケージのPythonの公式リポジトリであるPython Package Index(PyPI)から削除されました。

これは、多くの最新のソフトウェア開発コミュニティが直面している問題の最新の化身であり、オープンソースソフトウェアに依存するすべての開発者に重要な質問を提起します。人々が自分のコードを共通のリポジトリに提供して再利用できるようにするにはどうすればよいですか。 、それらのリポジトリが攻撃のベクトルになることなく?

概して、Pythonのようなオープンソースプロジェクトとして実行される言語の公式サードパーティライブラリリポジトリは安全です。ただし、ライブラリの悪意のあるバージョンは、チェックを外すとすぐに広がる可能性があります。そして、そのような言語リポジトリのほとんどがボランティアによって監視されているという事実は、非常に多くの目が目を光らせているだけであり、貢献が必ずしも必要な精査を得るとは限らないことを意味します。

今週PyPIから削除された2つの悪意のあるパッケージは、「タイポスクワッティング」と呼ばれるトリックを使用しました。つまり、一般的に使用されるパッケージと十分に類似した名前を選択して通知をスリップし、誰かが意図した名前を誤って入力すると誤ってインストールされる可能性があります。ふりしようとするdateutiljellyfish、パイソンを日時オブジェクトを操作し、文字列に近似マッチを行うためのパッケージに使用される、それぞれ、悪意のあるパッケージが命名した python-dateutiljeIlyfish (I代わりの最初の小文字L大文字で)。

インストールする python-dateutiljeIlyfish、開発者から個人データを盗もうとすることを除いて、オリジナルとまったく同じように動作します。dateutilチームの開発者であるPaulGanssleは、攻撃の考えられる理由は、被害者がどのプロジェクトに取り組んでいるかを把握し、それらのプロジェクトに対して後で攻撃を開始することであるとZDNetに語った。

Pythonライブラリは通常、Pythonランタイムに付属する標準ライブラリを構成するモジュールと、PyPIでホストされるサードパーティパッケージの2つのキャンプに分類されます。標準ライブラリのモジュールは綿密に検査され、厳密に精査されていますが、PyPIは設計上はるかにオープンであり、Pythonユーザーのコミュニティがパッケージを自由に再利用できるように提供しています。

悪意のあるプロジェクトは以前にPyPIで発見されました。あるケースでは、悪意のあるパッケージのタイプミスが、PythonのWeb開発の定番であるDjangoフレームワークを不法占拠しました。しかし、問題はますます緊急になっているようです。 

「Pythonセキュリティチーム(PSRT)のメンバーとして、タイポスクワッティングや悪意のあるパッケージに関するレポートを毎週受け取っています」と、Pythonのコア開発者であるChristianHeimesはPythonの公式開発ディスカッションフォーラムで述べています。「(おもしろい事実:今月はPyPIに悪意のあるコンテンツに関する4つの電子メールスレッドがあり、今日はちょうど12月4日です。)」 

Python Software Foundationは、PyPIを悪用から保護するための計画を立てていますが、完全に展開するには時間がかかります。今年の初め、Pythonチームは、パッケージをアップロードするPyPIユーザー向けのオプションとして2要素認証を展開しました。これにより、PyPIにアップロードする開発者に保護のレイヤーが提供され、アカウントの乗っ取りや名前でのマルウェアのアップロードが困難になります。しかし、それはタイポスクワッティングやその他のコモンズの乱用には対処していません。

他のイニシアチブには、自動化でこれらの問題を相殺する方法を検討することが含まれます。パッケージングを処理するPythonSoftware Foundation内のワーキンググループは、Facebook Researchから助成金を受けて、PyPIパッケージの暗号化署名や悪意のあるアップロードの自動検出(手間のかかる手動スクリーニングではなく)など、より高度なPyPIセキュリティ機能を作成しています。

サードパーティもある程度の保護を提供します。独立したセキュリティ会社であるReversingLabsは、疑わしいファイル形式についてリポジトリ全体のスキャンを実行した後、PyPIベースの攻撃を発見しました。しかし同社は、そのようなスキャンが内部審査の代わりにはならないことを認めています。「マルウェアをホストする可能性を大幅に減らすために、そのようなリポジトリはすべて、継続的な処理とより良いレビュープロセスの恩恵を受けるでしょう」と同社は書いています。

Python自身の開発者が知っているように、最良の解決策は内部から来なければなりません。