那些我們還不知道的程序驚人復(fù)雜性
在過去幾十年的高速編碼中,我們已經(jīng)飛速實(shí)現(xiàn)自動(dòng)化,導(dǎo)致我們現(xiàn)在已經(jīng)無法保護(hù)我們構(gòu)建的東西。首先,讓我們看幾個(gè)事實(shí):
通常情況下,中等規(guī)模的金融機(jī)構(gòu)擁有超過1000個(gè)應(yīng)用程序,而大型企業(yè)則超過10000個(gè)應(yīng)用程序。平均來說,這些應(yīng)用程序都有數(shù)十萬行自定義代碼,最大的應(yīng)用程序可能有超過千萬行代碼。此外,每個(gè)應(yīng)用程序都包含幾十個(gè)到幾百個(gè)軟件庫、框架和組件,這通常超過自定義代碼的10倍。并且,這個(gè)數(shù)量正在迅速增長,超過20%的應(yīng)用程序每年都會(huì)有新增和更新的代碼。
例如美國聯(lián)邦政府稅代碼(US Federal Tax Code),在過去幾年已經(jīng)大幅增長,目前,該代碼已經(jīng)擁有超過440萬行,但卻只有幾個(gè)應(yīng)用程序。作為安全研究人員,筆者發(fā)現(xiàn)代碼中包含數(shù)千個(gè)漏洞。但作為前任首席執(zhí)行官,筆者還分析了法律合同中的漏洞。有趣的是,無論筆者審查軟件代碼還是法律語言,這兩種分析并沒有你想象的那么不同。這兩種分析都需要了解專門的語言以及基本業(yè)務(wù)。
當(dāng)前的安全形勢
在摩根大通安全泄露事故的細(xì)節(jié)披露后,該公司一名前雇員告訴《紐約時(shí)報(bào)》,攻擊者仿佛竊取了國會(huì)大廈的構(gòu)造圖,摩根大通沒辦法監(jiān)控每個(gè)門和玻璃窗。實(shí)際上,筆者認(rèn)為情況更糟糕,摩根大通花了幾十年時(shí)間來創(chuàng)建其軟件基礎(chǔ)設(shè)施,沒有簡單的辦法可以對其作出改變。
現(xiàn)在,根據(jù)安全專家表示,典型的企業(yè)web應(yīng)用程序一般包含22.4個(gè)嚴(yán)重漏洞。這些漏洞通常很容易找到,但其嚴(yán)重程度不相同。通過結(jié)合這些漏洞以及日益復(fù)雜的威脅,我們看到越來越多的安全泄露事故。單單是今年的安全泄露事故已經(jīng)非常發(fā)人深省。
傳統(tǒng)應(yīng)用安全的局限性
在過去,我們進(jìn)行手動(dòng)滲透測試和代碼審查來發(fā)現(xiàn)漏洞。這些審查可以很好地發(fā)現(xiàn)漏洞,而開發(fā)人員也有時(shí)間在代碼進(jìn)入生產(chǎn)之前來修復(fù)問題。但最近軟件開發(fā)領(lǐng)域的進(jìn)步,包括庫和組件的廣泛使用、高速開發(fā)方法、復(fù)雜的框架以及高深莫測的協(xié)議,都減慢了手動(dòng)分析。
很多行業(yè)已經(jīng)發(fā)展到,生產(chǎn)速度已經(jīng)最大化,而質(zhì)量卻無法跟上。汽車行業(yè)經(jīng)過很多艱苦歲月來換裝備以提高質(zhì)量。Agile和DevOps社區(qū)已經(jīng)成功地使用更快的迭代來保持軟件項(xiàng)目不會(huì)偏離軌道太遠(yuǎn)?,F(xiàn)在,我們正在越來越快地構(gòu)建代碼,但安全沒有同步發(fā)展。我們必須找到新的技術(shù)來確保快速發(fā)展和擴(kuò)展中的安全性。
重構(gòu)應(yīng)用安全
首先,我們需要摒棄安全例外的觀念,并從其他行業(yè)借鑒經(jīng)驗(yàn)。我們可以監(jiān)控整個(gè)軟件開發(fā)過程(設(shè)計(jì)、開發(fā)、測試和生產(chǎn)),確保應(yīng)用程序不斷測試自己并提供實(shí)時(shí)安全反饋信息。從本質(zhì)上講,我們必須將安全測試、入侵檢測和響應(yīng)以及運(yùn)行時(shí)保護(hù)作為每個(gè)應(yīng)用程序的一部分。
Etsy、Netflix、Twitter和Yelp等公司已經(jīng)意識到這個(gè)問題,并開始部署新的安全工具。這些工具不像傳統(tǒng)工具,在開發(fā)過程的最后使用。這些工具用于軟件開發(fā)過程中,在應(yīng)用程序被構(gòu)建、集成、測試和部署時(shí)實(shí)時(shí)收集安全信息。最重要的是,這些工具(例如連續(xù)集成和連續(xù)交付工具)并不會(huì)干擾正常的軟件交付過程。干擾或者減緩軟件交付的安全工具不會(huì)被使用。正如Signal Science公司的Zane Lackey所說,企業(yè)把延誤視為破壞,會(huì)盡量避免。
我們怎樣才能實(shí)現(xiàn)那樣的情況?這并沒有你想象的困難。你可以從創(chuàng)建腳本、測試用例或執(zhí)行簡單測試的工具開始?;蛘呤褂妹赓M(fèi)的Contrast for Eclipse插件。你將需要的大部分基礎(chǔ)設(shè)施可能已經(jīng)由Agile and DevOps團(tuán)隊(duì)創(chuàng)建好了。
我們需要重新構(gòu)想我們所有的安全測試技術(shù),讓它們可以共同發(fā)揮作用。我們還需要我們的安全專家變成教練和工具達(dá)人,而不只是追逐漏洞,因?yàn)檫@樣永遠(yuǎn)不會(huì)形成規(guī)模。