上周,Snyk發(fā)布了第一份年度 State of Open Source Security report(開源生態(tài)安全報告),開源生態(tài)的安全問題必須引起廣大程序員的重視。Snyk發(fā)起并分析了一項由500多名開源維護(hù)人員和用戶填寫的調(diào)查,同時收集了40,000多個項目、Red Hat Linux發(fā)布的信息以及掃描數(shù)百萬個GitHub存儲庫和軟件包的數(shù)據(jù),最終給出了這份調(diào)查報告。
報告的一項重大發(fā)現(xiàn)是:在對433,000個網(wǎng)站的分析中發(fā)現(xiàn),77%的網(wǎng)站至少使用了一個具有已知安全漏洞的前端JavaScript庫。這個數(shù)字與Snyk在三月份報告的數(shù)字不謀而合,但是現(xiàn)在Google Chrome的Lighthouse可以使用Snyk測試易受攻擊的JavaScript庫,從而得到更徹底的結(jié)果。
Lighthouse data是作為HTTP存檔的一部分收集的,數(shù)據(jù)可通過BigQuery查詢。因此,可以在很大范圍內(nèi)查詢Lighthouse審計數(shù)據(jù)。
看看有多少網(wǎng)站是脆弱的吧!
BigQuery中10月15日的結(jié)果(最近一次可用)包含439176個不同網(wǎng)址來源的數(shù)據(jù)。除去Lighthouse無法運(yùn)行的URL或者審計本身無論如何都沒有完成的情況,可以得到418,112個不同網(wǎng)站的數(shù)據(jù)集。
這些網(wǎng)站中有多少存在已知漏洞呢?可以運(yùn)行一個查詢來獲取這些信息:
結(jié)果與3月份小規(guī)模調(diào)查結(jié)果非常接近:77.3%(323,132)的網(wǎng)站沒有通過審計。換句話說,這些站點中有77.3%至少包含一個客戶端JavaScript庫存在已知安全漏洞,這是最少的情況。新版本的HTTP存檔網(wǎng)站將報告這種情況如何隨著時間的推移而變化。
我們可以深入下去,看看這些庫有多少已知的安全漏洞:
事實證明,如果已知至少存在一個漏洞,那么最終結(jié)果很可能是更多的漏洞。51.8%的易受攻擊網(wǎng)站存在多個已知的安全漏洞。雖然這些網(wǎng)站大部分都有一兩個,但是長尾是可怕的。9.2%的網(wǎng)站帶有四個或四個以上已知安全漏洞的庫。
哪些庫是網(wǎng)站中最常出現(xiàn)的并且最易受到攻擊呢?
使用Lighthouse審計數(shù)據(jù)也可以了解哪些庫最常被發(fā)現(xiàn)且易受攻擊。
首先,可以查詢哪些庫最常被檢測到 ——在網(wǎng)站中被使用次數(shù)最多,無論是否存在漏洞。 以下查詢抓取十個最常見的JavaScript庫:
毫不奇怪,jQuery位列榜首,而且是遠(yuǎn)遠(yuǎn)超過其他庫。這符合三月份的調(diào)查結(jié)果,當(dāng)然也符合大部分程序員的喜好。沒有庫接近jQuery的普遍吸引力,但是這也導(dǎo)致jQuery在安全漏洞中的占比更高,一旦更新后的檢測腳本被拉入Lighthouse,其數(shù)量將增加(易受攻擊的站點的總體百分比也可能略有增加)。
現(xiàn)在,讓我們看看哪些庫被發(fā)現(xiàn)攜帶已知漏洞。
名單與上述十分相似:
jQuery各版本中有92.5%是迄今為止網(wǎng)上最流行的庫,在生產(chǎn)中存在一個已知的安全漏洞。事實上,在最常見的10個庫中,有6個在生產(chǎn)中發(fā)現(xiàn)的大多數(shù)版本都是脆弱的。
盡管事實上,這些庫都有可用的最新版本并且不存在這些漏洞,但很少有程序員能想起來更新。
不是這些庫存在問題,而是程序員不知道及時更新!
現(xiàn)在的情況有點嚴(yán)峻 - 無法否認(rèn)。雖然這些數(shù)據(jù)并不意味著所有這些網(wǎng)站的77%是可以被黑客利用的,但開源漏洞仍然需要非常重視。雖然這些庫的生產(chǎn)版本存在大量漏洞,但這些漏洞已經(jīng)在庫本身得到解決。每個主要的庫都有可用版本不存在已知的安全漏洞——程序員只需要及時將它們投入生產(chǎn)即可。
為了解決問題,程序員必須采取一些行動。首先是改進(jìn)工具和工具采用。根據(jù)開放源代碼安全調(diào)查顯示,使用開源軟件的人中有38%沒有使用任何類型的自動化工具來幫助保持軟件包的最新狀態(tài)。我敢打賭,如果是前端JavaScript開發(fā),你會看到更低的采用率。
這個數(shù)字應(yīng)該得到改善,對npm和Yarn的改進(jìn)使開發(fā)人員對前端軟件包管理變得更加簡單。將可靠的軟件包管理工作流程與Snyk這樣的工具配合使用,可以幫助程序員查找,預(yù)防,修復(fù)和監(jiān)控這些依賴關(guān)系的軟件包,這將大大提高Web的安全性。
說起npm,唯一值得慶幸的是這些工具的下載量在今年有了顯著增長。據(jù)統(tǒng)計,Rubygems的數(shù)量增加了10.3%,Python庫的數(shù)量增加了32%,Maven artifacts的數(shù)量增加了28%,npm包的數(shù)量增加了57%,Docker Hub上公共應(yīng)用程序的數(shù)量現(xiàn)在已經(jīng)超過了90萬,比一年前的46萬有所增加。
我們需要做的第二件事是提高對問題的普遍認(rèn)識和理解。這就是Snyk發(fā)布“開源安全狀況報告“的原因——闡明開源安全面臨的挑戰(zhàn),并幫助找到可以改進(jìn)的方法。
在Lighthouse(和Sonar)中對脆弱的庫進(jìn)行審計也有幫助,這些工具使開發(fā)人員可以更輕松地在構(gòu)建網(wǎng)站上發(fā)現(xiàn)問題。感謝HTTP Archive和BigQuery,這讓程序員可以輕松訪問數(shù)據(jù)并幫助了解問題規(guī)模。
雖然目前的數(shù)據(jù)并不令人鼓舞,但提高認(rèn)識和改進(jìn)工具是未來可以解決的問題。
(完整報告可查看:http://wenku.it168.com/d_001732970.shtml)