pip ユーザーのセキュリティに関する考え方¶
問題¶
pip を使ってパッケージをインストールする際の、pip ユーザーのセキュリティに関する考え方を理解したいと考えました。
調査¶
参加者に対し、pip でインストールする Python パッケージと、作成するソフトウェアのセキュリティと整合性に関する行動と習慣について質問しました。
参加者には、以下の頻度について尋ねました。
pip でインストールする Python ソフトウェアのコード監査を実施する
(pip で) インストールする (Python) ソフトウェアのセキュリティと整合性について検討する
作成する (Python) コードのセキュリティと整合性について検討する
結果¶
ユーザーがインストールするソフトウェア (51%) と作成するソフトウェア (71%) のセキュリティと整合性は調査参加者にとって重要ですが、pip でインストールするパッケージまたはコードのコード監査を実施しているのは 7% 未満です。
これは、大規模なパッケージを監査する時間がないこと、専門知識の不足、広く採用されている Python パッケージへの依存、pip がハッシュを自動的にチェックするという期待、そして炭鉱のカナリアとして機能するより広範な Python コミュニティへの依存によるものです。
この行動は、すべてのユーザータイプとソフトウェア開発経験のベースラインに共通していました.
これらの結果、特にパッケージ監査における専門知識の不足は、pip ユーザーの大多数が「古典的に訓練された」(つまり、ソフトウェア開発を正式に学んだ) ソフトウェア開発者ではないため、ソフトウェア開発プラクティスに関する専門知識や正式なトレーニングが不足しているという全体的な調査結果と一致しています。
メンテナーがユーザーに考えてほしいこと、心配してほしいことと、ユーザーが実際に心配していること、考えていることの間には大きな隔たりがあります。現在、pip はインストールするソフトウェアの保証を提供するという点で、ユーザーを「自力で対処」させています。これは批判ではなく、観察です。
質問への回答: Python ソフトウェアを pip でインストールする前に、コード監査を実施します¶
参加者の大多数 (82%) は、pip を使用してインストールするソフトウェアパッケージのコード監査を (まれに、または決して) 実施していません。理由は以下で説明します。
Python ソフトウェアを pip でインストールする前に、コード監査を実施します |
回答数 |
---|---|
常に |
3 |
頻繁に |
9 |
まれに |
66 |
決して |
68 |
意味がわかりません |
5 |
意見なし |
13 |
参加者総数 |
164 |
質問への回答: インストールするソフトウェアのセキュリティと整合性について検討します¶
参加者の大多数は、インストールするソフトウェアのセキュリティと整合性について検討しており、コード監査に関する回答とは異なり、場合によっては参加者はインストールするソフトウェアのセキュリティと整合性を検証しようとしました。
ほとんどの試みは、ソフトウェア開発の経験がある人によって行われましたが、場合によっては、諦めた人もいました.
古典的に訓練されたソフトウェア開発者ではなかった人は、どこから始めればよいかわかりませんでした。
これらのグループはどちらも「影響範囲」を特定し、これをカバーするために最善を尽くしました.
ユーザーのセキュリティに関する考え方¶
ソフトウェアパッケージへの依存¶
参加者はまた、コードセキュリティスキャンとソフトウェアパッケージのチェックに依存していると説明しました。
「リンター (Bandit) を使用して、作成したコードをスキャンし、問題が発生した場合はレッドフラグを上げます。」
「ファズテストには Hypothesis を使用しています。」
優れたソフトウェア開発プラクティスへの依存¶
少数の参加者は、安全なソフトウェアの作成に役立つ優れたソフトウェアプラクティスが導入されていると説明しました。
「コードの倫理に関する本があります。必須の認定があります。」
「また、セキュリティポリシーと報告メカニズムが整備されていることにも依存しています。暗号は避け、他の人々に頼っています。」
pip のハッシュチェック機能を使用したユーザーのうち
1 人はエラーメッセージが「うるさくて邪魔」だと感じており、ファイル名とハッシュを一致させるのが難しいと感じています
もう 1 人は、ハッシュを明示的に固定するプロセスが (特に依存関係の場合) 面倒だと感じています
1 人のユーザーは、NPM audit が気に入っており、Python エコシステムにも同様の機能が欲しいと述べています.
時間の不足¶
パッケージコードと依存関係の監査を実施する時間の不足が、非常に一般的な理由として挙げられました。ほとんどの場合、参加者は目標を達成するための手段として Python コードを使用しました。
監査を実施するための専門知識の不足¶
ソフトウェア監査の専門知識や知識の不足は、主に参加者の専門知識がソフトウェア開発ではないことによるものでした。ただし、参加者が「古典的に」ソフトウェア開発者であった場合でも、専門知識の不足は監査を実施しない一般的な理由として挙げられました。
広く使用され、十分に確立されたパッケージのみを使用する¶
十分に確立され、高品質なパッケージの使用は、すべてのタイプの参加者(プロのPythonソフトウェア開発者とPythonをツールとして使用する人)の間で共通の理由でした。
ユーザーは「十分に確立され、高品質なパッケージ」を次のように定義しました。
長年存在している
人気があり、コミュニティや業界で一般的に使用されている
対応の良いメンテナーがいる
参加者が聞いたことのある人がメンテナンスしている
数百人または数千人のユーザーがいる
活発に開発されている(多くの未解決の問題、多くのフォーク、GitHubスター)
オープンで透過的に開発されている
その歴史が知られている、または公に知ることができる
問題を発見するためのPythonコミュニティへの依存¶
問題を発見し、公に知らしめるためにコミュニティに依存していました - 「多くの目が浅いバグ」です。
「私はめったにコード監査を行いません。ほとんどの場合、コミュニティの意見に頼っています。メンテナーが何人いるかを確認します。良い習慣ではないかもしれませんが、コードを詳しく調べる時間はありません。」 - 参加者 240315091
内部パッケージのみを使用する¶
「内部パッケージのみをインストールするので、これについて心配する必要はありません。」
このテーマはそれほど一般的ではなく、主に大規模なソフトウェア開発環境またはセキュリティが非常に重要な場合に見られました。
pipがパッケージを監査するという期待¶
一部のユーザーは、pip(およびPyPI)がハッシュを自動的にチェックしたり、悪意のあるパッケージを検出したりするなどして、悪意のある行為者から「保護」してくれることを期待/想定しています。
「自分でパッケージをダウンロードする場合はハッシュをチェックしますが、pipによってインストールされる場合はチェックしません。pipがそれを行うことを期待しています。そうでない場合は驚きます。すべてのパッケージマネージャーは、ダウンロードした内容に対してハッシュをチェックします。ハッシュはすでにpypiで知られています。」 - 参加者 240312164(原子核物理学者)
その他の注目すべきコメント¶
「いいえ、(コード監査は)しません。すべきですが、決してしません。私は逸脱せず、リスク回避的です。すでに良いパッケージをインストールします。私のリスク表面は小さいと考えています。それらを監査する時間やリソースがありません。エコシステムが自己監査を行うのに十分な信頼を置いています。よく知られたパッケージで何かが見つかった場合、コミュニティは騒ぎ立てることでよく知られています。いずれにせよ、コード監査ではそれは検出されません。」 - 参加者 240326752(プロのPython開発者)
「プライベートレベル(職場)では、コードは内部で開発されています。pypiのコードは監査しません。依存関係を監査する時間がないため、信頼しています。数年前にセキュリティ侵害があったことは知っていますが、それほど頻繁には発生しません。何も監査していないことは知っていますが、それでもコードを監査しません。」
「(コード監査の)方法がわかりません。また、これは自分用に書いています。動作するかどうかです。時々、2つか3つのパッケージをインストールして、何か他のものをインストールする必要があることに気付くことがあります。うまくいかない場合は先に進みます。最後の手段は、自分でコードを書くことです。」
「私はかなり信頼しています。Pythonはオープンソースであり、パッケージが pypi.org にある場合、問題ないはずです。最初にパッケージをインストールしてから、それを確認します。特定のタスクを実行する必要があることを理解し、インターネットで検索し、ドキュメントを見て、インストールしてから、それが望んでいるものであるかどうかを確認することで、パッケージを見つけます。」 - 参加者 240278297
「パッケージをインストールしたい場合は、理由があります。PyEphemで月のアジマスと仰角を計算したいのです。コード監査?うーん。私がやっていることのほとんどは平凡です。依存関係を満たす必要があるため、インストールします。コード監査はしません。気にしません。決してしませんが、これは、pypiのパッケージがGithubで見られる正確なソースであるかどうかという疑問の1つです。異なる方法で配布されるファイルになる可能性があります。おそらく(私はそうしません)なぜなら、見るのが怖すぎるからです。pipが(パッケージの)ハッシュを検証するというものがあります。これは、これを防ぐための機能です。何のハッシュですか?わかりません。ローカルのpythonインストールにあります。」 - 参加者 240426799(システム管理者)
「いいえ(コード監査はしません)。[笑い] なぜなら、パッケージをインストールする前に何千行ものコードを読むつもりはないからです。なんてこった。[..] 見つけることができないでしょう。正直なところ、パッケージの人気の度合い、GHのスターの数とのトレードオフです。pypiには、ダウンロード数を示すUIがありません。もしあれば、それを使用するでしょう。」 - 参加者 240386315(IT管理者)
「まあ、Numerical Pythonのようなもののコード監査を行うためのバックグラウンドがありません。私が使用するほとんどのパッケージは巨大です。メンテナーを除いて、ほとんどの人はそれらのパッケージのコードを作成していません。パッケージのセキュリティについては、pipに組み込まれているものに頼っています。また、悪用があれば誰かがそれを見つけて世界に知らせるだろうと想定しています。私は本当に怠惰です。」 - 参加者 240312164(原子核物理学者)
「セキュリティアドバイザーが欲しいです。npmのように - それは非常にうまく機能します。パッケージをインストールすると、「このパッケージにはセキュリティの脆弱性があります - 低1、中5、高8」と表示されます。Pythonパッケージのセキュリティ問題に遭遇したことはありません。」 - CZI招集研究参加者
推奨事項¶
パッケージセキュリティガイダンスまたは監査メカニズムを提供する¶
研究期間中、少数の参加者(3〜4人)が NPM auditコマンドをパッケージセキュリティを評価するための良い方法の例として挙げました。これは、このユーザーニーズへのアプローチ方法のモデルを提供する可能性があります。
パッケージハッシュを自動的にチェックする¶
pipは、インストール中に**デフォルトで**パッケージハッシュをチェックし、ユーザーがこの動作をオフにする方法を提供する必要があります。
ハッシュがない場合、pipはユーザーに警告し、最も簡単なものから最も高度なものまで、ユーザーに推奨事項を提供する必要があります。
不審なパッケージを報告するメカニズム¶
ユーザーは、疑わしい、または悪意のあるパッケージ/動作を報告するメカニズムが必要です。このメカニズムがどこに存在するかは議論の余地があります。最低限、ユーザーがpypi.orgでパッケージにフラグを立てるメカニズムが必要です。
pipのアクティビティの出力をより理解しやすくする¶
現在、pipの出力は圧倒的で、多くの情報が含まれていますが、ユーザーが認識できるものはほとんどありません。つまり、「テキストの壁」の中で意味が失われています。
Pipの出力は、セキュリティ警告を含む適切な情報を適切なタイミングでユーザーに提供するように再設計する必要があります。