買(mǎi)bug送軟件:四大最危險(xiǎn)編程語(yǔ)言
上周,第三方漏洞收購(gòu)平臺(tái)Zerodium宣布未來(lái)2-3月暫停收購(gòu)iOS漏洞,因?yàn)槎唐趦?nèi)提交的iOS漏洞利用程序太多。這條新聞讓很多安全人士感到詫異,畢竟,iOS的安全性曾經(jīng)是蘋(píng)果公司引以為傲的最大賣(mài)點(diǎn)之一,5年前iOS的零日漏洞售價(jià)動(dòng)輒高達(dá)百萬(wàn)美元,但近年Android系統(tǒng)安全性不斷提升,漏洞價(jià)格也反超了iOS,如今Android零點(diǎn)擊漏洞(無(wú)需用戶交互便可利用)價(jià)格已經(jīng)飆升至250萬(wàn)美元,而iOS的類(lèi)似漏洞價(jià)格“只有”200萬(wàn)美元。
除去谷歌和蘋(píng)果公司在應(yīng)用安全領(lǐng)域的投入和關(guān)注度等因素,還有一個(gè)導(dǎo)致iOS漏洞大面積爆發(fā),安全性被Android逆襲的深層次原因,那就是編程語(yǔ)言平臺(tái)和開(kāi)源程序庫(kù)的安全性問(wèn)題。
Bug之王
根據(jù)Veracode最新發(fā)布的年度軟件安全現(xiàn)狀報(bào)告,全球所有應(yīng)用軟件中,70%都包含至少一個(gè)開(kāi)源代碼庫(kù)導(dǎo)致的安全缺陷/漏洞,其中Swift代碼庫(kù)的軟件缺陷密度(每個(gè)代碼庫(kù)的缺陷數(shù)量)已經(jīng)超過(guò)了web安全人士的“衣食父母”——PHP。(下圖)
Veracode的軟件安全狀況報(bào)告指出,這些開(kāi)源庫(kù)(免費(fèi)的集中式代碼存儲(chǔ)庫(kù),為開(kāi)發(fā)人員提供現(xiàn)成的應(yīng)用程序“構(gòu)建塊”)不僅無(wú)處不在,而且存在風(fēng)險(xiǎn)。
分析檢查了85,000個(gè)應(yīng)用程序中的351,000個(gè)外部庫(kù),發(fā)現(xiàn)開(kāi)源庫(kù)非常普遍。例如,大多數(shù)JavaScript應(yīng)用程序包含數(shù)百個(gè)開(kāi)源庫(kù),有些甚至包含1000多個(gè)不同的庫(kù)。此外,大多數(shù)語(yǔ)言都具有相同的核心庫(kù)集。
報(bào)告說(shuō):“特別是JavaScript和PHP,幾乎在每個(gè)應(yīng)用程序中都有幾個(gè)核心庫(kù)。”
與其他軟件一樣,這些庫(kù)也有bug。問(wèn)題在于,由于代碼復(fù)用,單個(gè)bug可能會(huì)影響數(shù)百個(gè)應(yīng)用程序。
Veracode表示:“在當(dāng)今幾乎所有應(yīng)用程序中,開(kāi)源庫(kù)都很重要,它使開(kāi)發(fā)人員可以通過(guò)快速添加基本功能來(lái)加快開(kāi)發(fā)進(jìn)度。” “實(shí)際上,如果沒(méi)有這些庫(kù),使用軟件進(jìn)行創(chuàng)新幾乎是不可能的。但是,缺乏如何正確使用開(kāi)源庫(kù)及必要的風(fēng)險(xiǎn)意識(shí)已經(jīng)成為一個(gè)嚴(yán)重的問(wèn)題。”
四大最危險(xiǎn)語(yǔ)言
根據(jù)報(bào)告,開(kāi)源代碼庫(kù)中bug最多的四個(gè)主要語(yǔ)言是:Swift、.NET、Go和PHP(上圖)。
其中Swift的bug密度(7個(gè))高居榜首,而PHP漏洞則分布最廣(覆蓋近60%的代碼庫(kù))。由于Swift是Apple生態(tài)系統(tǒng)的專(zhuān)業(yè)開(kāi)發(fā)語(yǔ)言,因此雖然其bug密度很高,但是分布并不算廣泛。
.NET的bug分布百分比在這四個(gè)庫(kù)中最低(不到10%),但其代碼庫(kù)的數(shù)量是Swift的17倍以上。
Go包含bug的庫(kù)比例很高,接近PHP,但是平均每個(gè)代碼庫(kù)的bug總數(shù)較低。與Go相比,PHP的每代碼庫(kù)bug數(shù)量更高(6.5),bug密度是后者的兩倍。
不過(guò)在可利用PoC數(shù)量上,Swift的表現(xiàn)不算最糟糕,PHP依然是無(wú)可爭(zhēng)議的“王者”:
最好的防御:及時(shí)更新
報(bào)告還發(fā)現(xiàn)跨站點(diǎn)腳本(XSS)是開(kāi)源庫(kù)中最常見(jiàn)的漏洞類(lèi)別,占比接近30%其次是不安全的反序列化(23.5%)和訪問(wèn)控制入侵(20.3%),如下圖所示:
“不安全的反序列化(Insecure Deserialization)過(guò)去是自主開(kāi)發(fā)應(yīng)用程序中相對(duì)罕見(jiàn)的缺陷,其排名快速上升令人不安,因?yàn)檫@類(lèi)缺陷可能導(dǎo)致執(zhí)行意外的代碼路徑,這意味著我們不打算使用的庫(kù)的某些部分也可能會(huì)插入到其應(yīng)用程序的執(zhí)行路徑中。”
數(shù)據(jù)還顯示,由于級(jí)聯(lián)的相互依賴(lài)關(guān)系,大多數(shù)有缺陷的庫(kù)最終都以代碼形式間接存在,因?yàn)殚_(kāi)發(fā)人員使用的開(kāi)源庫(kù)庫(kù)很可能調(diào)用了另一個(gè)開(kāi)源庫(kù)的代碼。
“應(yīng)用程序中47%的有缺陷庫(kù)都是可傳遞的,換句話說(shuō),它們不是由開(kāi)發(fā)人員直接引入的,而是由第一個(gè)被調(diào)用的庫(kù)引入的(42%被直接引入,12%被間接引入)。這意味著開(kāi)發(fā)人員正在引入比預(yù)期更多的代碼,而且常常是有bug的代碼。”
好消息是,大多數(shù)最嚴(yán)重的程序漏洞和bug都可通過(guò)更新解決(下圖)。
“僅通過(guò)較小的版本更新就可以解決應(yīng)用程序中大多數(shù)被引入的bug(將近75%);根據(jù)Veracode報(bào)告,bug修補(bǔ)通常不需要對(duì)主程序庫(kù)進(jìn)行升級(jí),而且超過(guò)90%的OWASP TOP 10榜單中最嚴(yán)重的bug,今天都有可用補(bǔ)丁或更新。”
參考資料
Veracode開(kāi)源軟件安全現(xiàn)狀報(bào)告:
https://www.veracode.com/sites/default/files/pdf/resources/reports/state-of-software-security-open-source-edition-veracode-report.pdf
【本文是51CTO專(zhuān)欄作者“安全牛”的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)通過(guò)安全牛(微信公眾號(hào)id:gooann-sectv)獲取授權(quán)】