NPM供應鏈的薄弱環節是什么?
VSole2022-06-20 17:14:30
1. 介紹
現代軟件開發經常使用第三方軟件包,引起了人們對供應鏈安全攻擊的關注。許多攻擊者以流行的包管理器(如npm)及其用戶為目標,實施供應鏈攻擊。2021年通過利用開源軟件的供應鏈,安全攻擊同比增長了650%。所以需要積極主動的方法來預測高風險供應鏈攻擊中的包脆弱性。本文的目標是通過實證研究NPM包的元數據,幫助軟件開發者和安全專家測量npm供應鏈薄弱環節信號,以防止未來的供應鏈攻擊。
本文中,作者分析了163萬JS的NPM包的元數據。作者提出了軟件供應鏈中安全弱點的六個信號,例如存在安裝腳本、過期電子郵件域相關的維護人員賬戶,以及具有不活躍維護人員的不活躍軟件包。一個案例研究,從安裝腳本信號中識別出了11個惡意軟件包。同時研究發現2818個過期域相關的維護者電子郵件地址,允許攻擊者通過接管npm帳戶劫持8494個包。作者從開發人員中獲得反饋,大多數開發人員支持所提出的六個弱鏈接信號中的三個。開發人員還表示,他們希望在使用第三方軟件包之前得到有關弱鏈接信號的通知。此外,作者還討論了包開發人員建議的新信號。
在本文研究中,作者認為,如果一個信號可以使軟件包面臨更高的供應鏈攻擊風險,并且攻擊者可以利用該信號執行供應鏈攻擊,那么便將該信號定義為薄弱環節。
2. 論文主要成果
- 作者提出了六個薄弱環節信號,其中三個以及經過了470名的NPM機組維護人員的調查,并確認為強信號
- 調查參與者建議了八個新的薄弱環節信號
3. 薄弱環節信號
作者提出了六種薄弱環節信號
- 維護者域名過期:如果維護者的域過期,并且沒有在其賬戶上設置2FA身份驗證,則攻擊者可以劫持其組件
- 在NPM注冊表中,攻擊者可以執行更簡單的方法來劫持電子郵件地址。攻擊者可以在域注冊站點中跟蹤維護者的域。如果域以及過期并且可以出售,攻擊者可以注冊并且更改DNS的“郵件交換”(MX)記錄,來劫持維護者的電子郵件地址。在大多數情況下,維護者的賬戶和包注冊表中的電子郵件地址是相關聯的。可以通過電子郵件地址直接充值NPM賬戶,除非維護人員激活2FA身份驗證或在用戶賬戶中使用不同的電子郵件地址
- 作者從每個package.json文件中提取并存儲了維護者的名字和電子郵件地址。我們發現有2818個維護者的域名可供出售,可以購買。這些維護人員在npm注冊表中擁有8494個軟件包,在過去12個月內,平均直接依賴于2.43個軟件包,平均下載量為53K
- 安裝腳本:攻擊者可以使用安裝腳本運行通過包安裝步驟執行的惡意行為的命令
- 攻擊者可以竊取用戶敏感數據或執行新的子進程來創建后門訪問或獲得遠程執行一系列命令的訪問權限。此外,攻擊者可以滲透第三方的依賴關系,因為目標軟件包以及其用戶在安裝過程中自動的運行該安裝腳本。雖然安裝腳本本身并不是直接的惡意表現,但自動運行的權限使安裝腳本成為供應鏈中的薄弱環節信號。即使是npm registry也建議避免安裝腳本-“不要使用安裝…您幾乎不必顯式設置預安裝或安裝腳本”。雖然通過安裝腳本進行此類攻擊的證據并不罕見,但未來很可能會發生攻擊
- 我們發現2.2%(33249)的軟件包使用安裝腳本,這表明97.8%的軟件包可能遵循npm的建議。此外,作者從npm收集了3,635個惡意的packages.json文件。我們發現93.9%(3412)的惡意軟件包至少有一個安裝腳本,這表明惡意攻擊者經常使用安裝腳本。從作者的研究中,他們發現攻擊者經常使用的四種類型的攻擊模式:發送用戶數據、下載惡意工具并運行、反彈Shell、刪除目錄
- 未維護軟件包:攻擊者可以針對攻擊那些由于缺乏維護而更有可能掌控并且植入惡意軟件的軟件包。
- 即使包自身可能沒有需要維護,但由于依賴關系中存在的安全問題,它仍可能需要維護,或者使用新的語法來提高性能、修復bug或者改進文檔。2020年開源項目中修復安全問題的平均時間為68天,NPM包中有66%的安全漏洞仍未修補。因此,修復未維護包中的安全問題所需的時間仍然是未知的。
- 作者發現發現58.7%的軟件包和44.3%的維護人員在npm注冊表中處于非活動狀態。還有5532個不推薦使用的軟件包,其中不推薦使用的日期超過了作者所建議的閾值(近兩年未更新)
- 太多的維護者:一個包含太多維護人員的包將為攻擊者提供許多攻擊目標,以利用帳戶接管和社會工程攻擊
- 開源軟件的開放性以及npm沒有強制實施雙因素身份驗證,使得維護者的安全帳戶更難得到保證。經驗表明,擁有更多的開發人員的項目通常會存在著更多的漏洞。自攻擊以來,當前版本的維護人員比以前少。雖然作者還不清楚攻擊者是如何破壞維護者的帳戶的,但已經觀察到了攻擊解決后維護者數據所發生的變化
- NPM中,維護人員的數量可能會更少,150萬個NPM包的平均有1.7名維護者。作者選擇了NPM中按維護人員總數排名的前1%的包。作者發現,他們選擇的1%的包中,平均每個包有32.4個維護者,這是整個注冊表中平均包維護者的19倍。
- 太多的參與者:當維護人員對許多的參與者負責時,攻擊者可以繞過維護人員的警惕來植入惡意代碼。
- 以前的研究表明,當多個參與者更改一個文件時,該文件更可能會出現更多的問題,其中包括安全問題。如果維護者沒有足夠重視審視參與者的請求,包的質量將不可避免地受到影響。攻擊者可以將具有多個參與者的包作為目標,在這些包中,攻擊者可以進行社會工程以成為受信任的參與者,然后來植入惡意的代碼
- 作者研究發現,選定的1%(389)軟件包的平均維護者與參與者的比率為1:40,是平均比率的60倍
- 維護者超負荷:攻擊者可能把擁有多個包的維護人員當作目標,因為維護人員可能沒有足夠的的時間來維護所有包的安全性
- 具有以下幾個特征的維護者超負荷屬于薄弱環節:有大量的依賴;在包中使用較大的依賴鏈,攻擊者可以在依賴中注入惡意代碼;如果這些維護者有不活躍的包,攻擊者就可以嘗試控制這些包
- 作者發現48.2%的維護者擁有多個包,而只有24.8%擁有下游用戶。作者再次挑選了按最高維護人員覆蓋率排名前1%的包,來了解極端情況。最終發現,前1%的維護者平均擁有180.3個包,直接依賴4010個軟件包
4. 從業人員所提出的新信號
- 所有權轉移或添加新的維護人員:包維護人員列表中的任何突然變化都被認為是從業者的薄弱環節
- 維護者的身份:從業人員就維護人員專業知識和身份驗證在供應鏈中的作用發表了評論。那些擁有真實圖片、組織背景和電子郵件地址、鏈接的社交媒體或存儲庫、與其他維護人員合作的歷史的維護人員將使得這些維護人員比任何新的維護人員更可靠
- 維護者雙重身份驗證:在維護人員發布包的時候,2FA應該作為一種強制措施
5. 限制
作者認為所提出的這些薄弱環節信號并不只是唯一應該考慮的因素。從業者所提出的其他的一些薄弱環節信號表明,還需要對此進行進一步的研究。此外作者對后三個薄弱環節并沒有進行有效的評估,因為沒有足夠的數據來驗證,只是基于直覺。為了解決這一個點,未來作者可以嘗試收集和利用其他維護者的元數據,包括提交的歷史記錄、漏洞修復、和維護者更替等。
VSole
網絡安全專家