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