PyPI はPythonパッケージのサードパーティソフトウェアリポジトリです。誰でもパッケージをアップロードできます( The Python =パッケージインデックス(PyPI) )。
PyPIについて質問しましたが、 npm(JavaScript) または composer(PHP) のような同様のリポジトリにも興味があります。
Tex.SEチャットで CTAN(tex) についてこの質問をしました。答えはセキュリティ対策がないというものでした。マルウェアをアップロードしないように人々/開発者を信頼しています。
私は実際にこのトピックについて ブログ投稿 を最近書いた。
あなたのポイントに答えるには:
PyPIは、人々がマルウェアをアップロードするのをどのように防ぎますか?
そうではありません。 すべてPythonコードをアップロードできます。パッケージのインストール中に任意のコードを実行できます。依存関係を注意深く監査してください。
ソフトウェアを検索しているときに、それがマルウェアでないことを(さらに)確認するにはどうすればよいですか?
Tarballをダウンロードして、コードを見てください。
パッケージの開発者として、自分のパッケージを使用して他の人がより節約できるようにするにはどうすればよいですか?
ユーザーがあなたを信頼している場合、PyPIは完全に正常に動作します。パッケージはHTTPS経由で提供され、チェックサムを使用して確認できます。
リポジトリにマルウェアの「歴史的な」例はありますか?彼らはどれほどの害を及ぼしましたか?
過去の例は知りませんが、デモパッケージを簡単にアップロードできます。 PyPIはこれを防ぐために何もしません。 Pythonパッケージの単純なインデックスとして機能します。信頼できる開発者は、ユーザー次第です。
ここには2つの脅威モデルがあります。
PyPIは#1の解決を試みません。インストール前にコードを監査し、信頼できる開発者からのパッケージのみをインストールすることが、これらに対する唯一の「保護」です。悪意のあるパッケージを見つけた場合は、PyPIメンテナに報告すれば、パッケージはおそらく削除されます。ただし、PyPIパッケージはインストールできるようになる前に事前検証されていないため、事実上、それに対する保護はありません。
2番目の脅威モデルには、いくつかのセキュリティ対策があります。新しいバージョンのPyPIはHTTPS経由でパッケージをダウンロードし、パッケージは オプションでGPG署名済み にすることができます。 theupdateframework(tuf) を実装する提案がありますが、それらがどこまで進んだかはわかりません。
ユーザーパッケージまたはvirtualenvにインストールすると、インストール中にインストーラーがSudoを使用しないように制限することにより、悪意のあるパッケージがもたらす可能性のある損傷を制限できます。しかし、あまり頼りにしないでください。
私の知る限り、一般に、オンラインコードリポジトリ(rubygems、npm、nuget、PyPIなど)から入手できるコードについては、保証が非常に限られています。多くの場合、署名されたコードやその他の整合性ベースのセキュリティ対策などをサポートまたは強制しません。また、展開するサイトへの認証は、ユーザー名とパスワードの組み合わせにすぎない場合があるため、依存しているだけではありません。開発者は故意にマルウェアをコードに配置するのではなく、それらの開発者が優れた運用セキュリティ慣行を持っていることも確認します。
さらに大きな問題は、多くの場合、インストールするライブラリに依存関係があり、場合によっては多数の依存関係があるため、それらの依存関係の開発者も悪意のない、優れたセキュリティ対策を講じていることを確信できます。
多くのコードライブラリでTerryが言うように、(ライブラリが使用される前に)インストール時に任意のコードを実行するためのフックがあるため、特に特権ユーザーとしてインストールした場合、インストールの動作だけで悪影響が生じる可能性があります。
侵害の歴史的な事例に関して言えば、攻撃されているリポジトリの例として、2013年に Rubygems の侵害がありました。
問題の修正に関しては、状況を改善するための pdate Framework イニシアチブがあります。