本週早些時候,兩個包含惡意代碼的Python庫已從Python第三方軟件包官方存儲庫Python Package Index(PyPI)中  刪除

這是許多現代軟件開發社區所面臨的問題的最新化身,這對所有依賴開源軟件的開發人員提出了一個重要問題:如何使人們能夠將自己的代碼貢獻給通用存儲庫以供重用,而沒有那些回購成為攻擊的載體?

總的來說,作為開放源代碼項目(如Python)運行的語言的官方第三方庫是安全的。但是,如果未經檢查,則庫的惡意版本可以迅速傳播。而且,大多數這樣的語言存儲庫都由志願者監督,這一事實意味著,只有如此多的目光注視著監視者,而捐款並不一定總能得到所需的審查。

本週從PyPI刪除的兩個惡意軟件包使用了一種稱為“ typo squatting”的技巧,即選擇與常用軟件包足夠相似的名稱以引起注意,如果有人誤輸入了預期的名稱,可能會導致意外安裝。試圖偽裝為dateutiljellyfish軟件包(分別用於處理Python日期時間對象和對字符串執行近似匹配),惡意軟件包被命名為  python-dateutiljeIlyfish (用大寫字母I代替第一個小寫字母L)。

安裝後,  python-dateutiljeIlyfish行為與原始行為完全相同,只是嘗試從開發人員那裡竊取個人數據。dateutil團隊的開發人員Paul Ganssle 告訴ZDNet,攻擊的可能原因是弄清楚受害者從事的項目,以便隨後對這些項目發起攻擊。

Python庫通常分為兩個陣營:構成Python運行時附帶的標準庫的模塊,以及託管在PyPI上的第三方程序包。儘管對標準庫中的模塊進行了仔細檢查和嚴格審查,但PyPI在設計上更加開放,從而允許Python用戶社區自由貢獻軟件包以供重用。

以前在PyPI上發現了惡意項目。在一種情況下,惡意軟件包打錯了Django框架Django框架是Python Web開發的主要內容。但是問題似乎變得更加緊迫。 

“作為Python安全團隊(PSRT)的成員,我每週都會收到有關打字錯誤或惡意程序包的報告,” Python的核心開發人員Christian Heimes在Python的官方開發討論區中說道。“(有趣的事實:本月有四個關於PyPI上惡意內容的電子郵件線程,而今天只是12月4日。)” 

Python軟件基金會已經制定了保護PyPI免受濫用的計劃,但要全面推出它們需要一些時間。今年早些時候,Python團隊  推出了兩因素身份驗證,作為上傳軟件包的PyPI用戶的一種選擇。這為上傳到PyPI的開發人員提供了一層保護,這使得劫持他們的帳戶和以他們的名義上傳惡意軟件變得更加困難。但這並未解決錯字搶注或其他濫用公地的問題。

其他舉措包括尋找通過自動化來解決這些問題的方法。Python軟件基金會中負責包裝的工作組已獲得Facebook Research的撥款,用於創建更高級的PyPI安全功能,例如PyPI軟件包的加密簽名以及自動檢測惡意上載(而不是費力的手動篩選)。

第三方也提供一些保護。獨立的安全公司Reversing Labs  在掃描整個存儲庫中的可疑文件格式後發現了基於PyPI的攻擊。但是該公司承認,這種掃描並不能代替內部審查。該公司寫道:“為大大減少託管惡意軟件的可能性,此類存儲庫都將受益於持續的處理和更好的審核流程。”

正如Python自己的開發人員所知道的那樣,最佳解決方案必須來自內部。