軟件安全訪談:ZipSlip、NodeJS安全性和BBS攻擊

正如Nodejs Security WG成員和Snyk開發者佈道師Liran Tal所寫的那樣,自BBS早期以來,這種漏洞利用的矢量攻擊已經爲人所知。InfoQ採訪了Tal,瞭解了更多有關軟件安全性(尤其是Nodejs安全性)的相關信息。

今年早些時候,Bower軟件包管理器被發現在解壓縮包方面存在漏洞,攻擊者可以在用戶磁盤上寫入任意文件。正如Nodejs Security WG成員和Snyk開發者佈道師Liran Tal所寫的那樣,自BBS早期以來,這種漏洞利用的矢量攻擊已經爲人所知。

據安全研究人員skyn3t在2019年1月1日報道,攻擊者可以通過一個惡意zip存檔來利用符號鏈接的不正確驗證在zip解壓縮目錄之外寫入任意文件。根據Tal的說法,在使用Bower時,啓用路徑遍歷的罪魁禍首是一個小小的Nodejs包——decompress-zip,但這種情況並不只在這裏出現。事實上,這種漏洞也已經在其他幾個生態系統中找到,包括JavaScript、Ruby、.NET、Go和Java,並且似乎影響了數千個項目,因此它被稱爲ZipSlip。令人感到震驚的是,ZipSlip使用的基本攻擊向量已經是衆所周知的,並且自Bulletin Board Systems(BBS)早期以來可能已經被多次利用。

InfoQ藉此機會採訪了Tal,瞭解了更多有關軟件安全性(尤其是Nodejs安全性)的相關信息。

InfoQ:你能介紹一下自己並簡要描述一下你在Snyk做什麼嗎?

Liran Tal:我做過很長一段時間的軟件開發,最近五年在帶Web開發團隊。我是作爲一名開發者佈道師加入Snyk的,任務是幫助其他開發人員使用開源軟件並保證安全,並進一步擴展我在Node.js和JavaScript生態系統安全性方面的工作。在Snyk工作是非常棒的經歷,我在這裏認識了很多人,並且我在以前的幾個公司也使用過snyk。

InfoQ:全球統計數據顯示,軟件漏洞在過去幾年中一直在穩步增長,對軟件系統產生了很大的影響,從基本組件(CPU、操作系統、網絡棧等)到面向用戶的應用程序,從而可以以前所未有的規模竊取用戶數據。這是不是說明我們的系統變得越來越脆弱,越來越複雜,還是對安全的重要性有了更多認識?

Tal:我認爲你說得沒錯。毫無疑問,系統已經變得越來越複雜,而且我們今天看到的抽象比20年前要多得多。並不是說這很糟糕,但它確實增加了複雜性並增加了所需的技能和專業知識。

系統變得更容易受到攻擊並非有意的,但我確信所有開發人員都能夠理解——我們添加的代碼越多,存在錯誤和安全漏洞的風險就越高。近十年來,開源軟件得到了廣泛的應用,這對於任何一個從開源軟件運動早期就開始接觸開源軟件的人來說,都是令人驚訝和真正振奮人心的。與此同時,這意味着我們使用可能由很多開發人員(或者說是陌生人)構建的軟件組件來構建我們的產品,而我們對他們的安全知識一無所知,也不知道他們評審代碼庫的頻率是怎樣的(如果有的話)。

我真的很高興你提到了這個話題,因爲我在過去幾周裏一直在努力製作一份報告,報告揭示了有關開源安全狀態的詳細信息和真實數據。它關注應用程序庫、系統庫以及開源開發人員和維護人員的狀態。我們瞭解到了一些有關代碼庫安全方面的有趣內容,例如他們是如何發現安全漏洞的,以及他們的CI中有多少是包含了自動化安全測試。Snyk去年也發佈了一份報告,2019年的最新報告將在幾周後發佈。

總的來說,我認爲E.S Raymond說得對,所有的缺陷都是很淺層的。作爲一個平臺,GitHub極大地降低了參與開源社區的門檻,在我看來,這是對採用開源的重大貢獻。它使代碼庫相對容易經受安全評審,並與維護人員就漏洞和修復問題進行交流。我們從去年的報告中收集到的一個有趣指標是,引入代碼庫的漏洞所需的最長時間爲5.9年。對於一個漏洞來說,藏在源代碼中直到有人發現並被公開,5.9年已經是很長時間了。我們研究過的一些流行的庫,中位數時間是2.5年。

InfoQ:說到你的專業領域NodeJS,你最近在Bower(一個目前仍在廣泛使用的軟件包管理器)中發現了一個漏洞。但更令人擔憂的是NPM(NodeJS/JavaScript生態系統的包管理器)的安全狀態。開發人員應該做些什麼來最小化交付軟件的風險?

Tal:因爲問題太普遍了,以至於解決這些問題可能有點令人望而生畏。說到NPM的安全性,有兩個方面需要提一下——NPM註冊表本身的安全性及其開發人員和維護人員的平臺安全性。前者在過去曾被批評有米有在採取適當措施爲生態系統提供安全基礎。後者是託管在NPM註冊表上的JavaScript源代碼集合中的安全級別。

儘可能早地考慮安全性是認真對待安全性的一個好的開始。Tanya Janca說,首先,這是一種安全思維,理解安全問題是每個人的工作。將安全問題作爲設計和代碼評審流程的一部分,然後在日常開發流程中繼續集成一組支持安全性的流程和工具。

例如,採用靜態代碼分析插件作爲構建過程的一部分,或者掃描項目中的開源依賴項漏洞,Snyk在這方面做得最好,因爲它擁有非常全面的漏洞數據庫,而且它還提供了報告漏洞的方法,並通過升級依賴項所需的最小semver變更自動創建拉取請求。

安全性並沒有止步於使用CI集成來掃描漏洞。請考慮一下這種情況——你開發了一個Web應用程序,將其發佈到生產環境中,然後繼續下一個項目。舊代碼沒有繼續維護,但正如我們從最近的報告和多年的安全經驗中瞭解到的那樣,漏洞將會在稍後出現。那麼怎樣才能知道是不是出現了漏洞呢?你需要隨時監控項目的依賴項,以便在發現安全問題時可以返回項目並修復漏洞。snyk就提供了這些東西,可以將它集成到整個軟件開發生命週期中。

你之前提到了Bower漏洞的一個有趣的事實——它與去年snyk的安全團隊所做的研究有關,並且在大約二十年前的一篇有關Phrack的文章中首次提到過。這些研究工作揭示了數以千計的項目容易受zip壓縮包行爲漏洞的影響,這些行爲可能導致寫入任意文件和潛在的遠程代碼執行。這進一步說明了使用開源軟件的影響,一個庫中的漏洞可以在數千個項目和代碼庫中體現出來。

可以想象,像NPM、yarn或Bower這樣的供應鏈服務都需要做一些與壓縮包相關的事情,而Bower特別容易受到幾種類型的ZipSlip漏洞的攻擊。如果有人對概念驗證感興趣,想知道它的原理,我可以介紹這個故事,並一步一步說明如何利用這個漏洞。

InfoQ:在NodeJS生態系統中,是否應該在更加結構化的層面上進行一些努力?

Tal:從Node.js的角度來看,安全工作組的任務是負責爲Node.js創建一個更安全的生態系統,同時也是間接爲整個JavaScript生態系統創建一個更安全的生態系統。

我們正在積極地評審和改進安全焦點,例如相關的Node.js API、安全代碼評審和Noe.js核心的安全測試工作。工作組還充當了NPM Registry中的第三方生態系統模塊以及Node.js核心的事件響應團隊。

有一些外部力量在爲社區提供安全知識,例如Node.js安全路線圖,以及鞏固安全資源的努力,例如我自己的awesome-nodejs-security。我們希望從安全工作組內部看到更多這樣的東西。

爲了提高Node.js生態系統的安全性,有很多努力和舉措。InfoQ將繼續對此進行報道,並及時讓讀者知道。

查看英文原文https://www.infoq.com/news/2019/02/zipslip-nodejs-vulnerability

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章