關於安全性,pip 使用者的想法¶
問題¶
我們想了解 pip 使用者在使用 pip 安裝套件時,對於安全性的想法。
研究¶
我們詢問參與者,他們在安裝含有 pip 的 Python 套件、以及他們所建置的軟體時,對於安全性及完整性的行為和慣例是什麼。
我們詢問參與者,他們會多久執行下列動作:
對使用 pip 安裝的 Python 軟體進行程式碼審查
考慮自己安裝的 (Python) 軟體 (使用 pip) 的安全性與完整性
考慮自己建立的 (Python) 程式碼的安全性與完整性
結果¶
對研究參與者而言,他們安裝 (51%) 和製作的 (71%) 軟體的安全性及完整性雖然很重要,但使用 pip 審查套件或程式碼的人數少於 7%。
這是因為時間不足以審查大型套件、缺乏專業知識、仰賴廣泛採用的 Python 套件、預期 pip 會自動檢查雜湊,以及依賴 Python 社群來擔任預警機制。
這樣的行為在所有類型的使用者,以及軟體開發經驗的基準中都很常見。
這些結果(尤其是缺乏審查套件的專業知識)符合整體發現:大多數 pip 使用者並非「傳統受過訓練的」(例如,正式學習過軟體開發)軟體開發人員,因此缺乏軟體開發實務的專業知識和/或正式訓練。
維護者預期使用者會思考和擔心的內容,與使用者實際上擔心和思考的內容之間存在鴻溝。目前,pip 讓使用者在安裝的軟體方面「自求多福」。這並非批評,而是一個觀察結果。
對問題的回應:在使用 pip 安裝任何 Python 軟體之前,我會執行程式碼審查¶
絕大多數參與者(82%)不會(很少或從來不)使用 pip 安裝軟體套件時執行程式碼審查,原因如下。
在使用 pip 安裝任何 Python 軟體之前,我會執行程式碼審查 |
回應次數 |
---|---|
我一直做 |
3 |
我常常做 |
9 |
我很少做 |
66 |
我從不做 |
68 |
我不確定這句話的意思 |
5 |
沒有意見 |
13 |
參與者總人數 |
164 |
對問題的回應:我會想到我安裝的軟體的安全性與完整性¶
絕大多數參與者確實會想到他們安裝的軟體的安全性與完整性,不同於關於程式碼稽核的回應,有些參與者嘗試驗證他們安裝的軟體的安全性與完整性。
大多數嘗試都是由有軟體開發經驗的人執行的,但在有些情況下,人們會放棄。
那些未受過傳統訓練的軟體開發人員不知道從何開始。
這兩群人都找出了他們的「影響範圍」,並盡力涵蓋這個範圍。
使用者關於安全性的想法¶
依賴軟體套件¶
參與者也說明了他們依賴程式碼安全掃描和檢查軟體套件。
「我使用 linters(Bandit),掃描自己建立的程式碼,一旦出現問題,就會升起紅旗。」
「我使用 Hypothesis 進行模糊測試。」
仰賴良好的軟體開發方式¶
少數受訪者 ### 研究受訪者的選擇性引言說明他們實施良好的軟體程序,有助於撰寫安全的軟體。
「我們有一本關於程式碼道德的書籍,需要強制認證。」
「我仰賴既定的安全政策和回報機制,避免接觸密碼學,依賴其他人。」
於使用 pip 的雜湊檢查功能的使用者當中
一人認為錯誤訊息「過於煩人且響亮」,而且難以比對檔案名稱和雜湊。
另一人則認為明確固定雜湊的流程過於冗長(尤其是對於依賴項)。
有一位使用者提到他喜歡 NPM 稽核,希望在 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 上看到的確切來源?你可能會得到以不同方式散布的檔案。可能是我太害怕找,所以(我沒有這麼做)。 естьли это вещь что пип проверяет хэш (пакеты) - так что это такая фича для защиты от этого. хэш от чего? Понятия не имею. Он находится в локальной установке Python.」- Участник 240426799 (системный администратор)
「沒有 [我不會檢查程式碼]。[笑] 因為,在安裝軟體套件以前,我不會去讀好幾千行的程式碼。天啊。[..] 我根本找不到。我權衡一下——老實說那個套件有多熱門,GH 上有多少星。pypi 沒有任何使用者介面可以告訴我它有多少下載量。如果有,我就會去用。」- 參與者 240386315(IT 管理員)
「嗯,我沒有做像數值 Python 這種東西程式碼檢查的背景。我用的大部分套件都很龐大。除了維護人員,大多數人都沒有做這些套件的程式碼。我依賴 Pip 中的任何內建功能來執行套件安全性。我也假設如果有漏洞,有人會發現並讓全世界知道。我真的很懶惰。」- 參與者 240312164(核子物理學家)
「我想要一些安全顧問,就像 npm 中的——在安裝軟體套件時,它執行得非常好「這個套件的安全性存在漏洞——1 個低風險、5 個中等風險、8 個高風險漏洞。我沒有遇到過 Python 套件安全性問題。」- CZI 大會研究參與者
建議¶
提供套件安全性指南或稽核機制¶
在研究期間,少數參與者 (3-4 人) 提及NPM 稽核指令作為評估套件安全性的好方法的範例。它可能提供一種模式,說明如何滿足此使用者的需求。
自動檢查套件雜湊¶
預設情況下,pip 應在安裝時檢查套件雜湊,並提供使用者關閉此行為的方法。
如果沒有雜湊可用,pip 應警告使用者並提供建議——從最簡單到最進階。
回報可疑套件的機制¶
使用者應具備回報可疑或惡意套件/行為的機制。建立此機制地點應進行討論。最少應提供供使用者在 pypi.org 上標示套件的機制。
透過 easier to understand 改進 pip 活動的輸出 ¶
目前 pip 的輸出令人不知所措,儘管包含大量資訊,但使用者幾乎無法理解這些資訊,意思隱藏在「文字牆」中。
Pip 的輸出必須重新設計,在適當的時間提供給使用者適當的資訊,包括安全警告。