如何看待代碼安全保障技術的發展趨勢

應用安全測試

近年來,由於網路邊界愈發模糊、新型攻擊手段層出不窮,軟體安全的重要性也愈加突顯,越來越不容忽視。應用安全測試(Application Security Testing,簡稱AST)作為保障軟體安全的核心手段,自然也取得了快速發展。Gartner在2017年6月的《全球信息安全預測分析報告》中指出:「預計2021年之前,應用安全測試領域的市場將保持14.3%以上的綜合年度增長率(CAGR),這是所有信息安全環節中增長率最高的部分」 。

代碼作為構建各種應用、系統的基礎組件,其安全問題是軟體安全的根源性問題。因此,AST領域中有多類技術都可以應用在代碼安全保障中,例如靜態應用安全測試技術(Static Application Security Testing,簡稱SAST)技術、動態應用安全測試技術(Dynamic Application Security Testing,簡稱DAST)技術、軟體成分分析(Software Component Analysis,簡稱SCA)技術等。

隨著開發模式的不斷演進和信息安全趨勢的變化,對代碼安全保障技術提出了規模化、自動化、智能化的要求,從而實現軟體的快速、安全、自動的發布。未來數年中,代碼安全保障技術將會走向何方,以下是我們根據該領域現狀分析歸納出的幾項趨勢和技術發展方向。

人工智慧與安全

由萬物智能互聯而產生的數據洪流,催生了當今人工智慧的飛速發展。作為分析、挖掘數據價值的創新方法,人工智慧可以充分利用、釋放數據的價值,從而帶來前所未有的增值效應。隨著軟體的複雜度不斷提升,軟體的代碼數量也在迅速增加,從代碼中抽象出的數據也越來越多,同時安全測試往往又是對複雜數據的分析。如此看來,代碼安全對於人工智慧而言,似乎是一個完美的應用場景。

雖然利用人工智慧技術輔助安全和風險管理者進行代碼安全治理的路線目前尚不十分明晰。但是,一些世界頂級的安全廠商,已經開始使用人工智慧在代碼安全領域開展一些研究和嘗試。例如對於SAST產品而言,雖然其應用十分廣泛、價值不可否認,但是其誤報率較高的問題一直受到業界的詬病。引入人工智慧的技術後,可以使用SAST工具的結果作為輸入,以訓練缺陷模式從而發現誤報;然後系統會輸出某個置信水平內的誤報列表(或排除誤報的列表);為了進一步的改進,可以通過結果的審計,識別出新的誤報並反饋到訓練集中,計算出新的模型。隨著這種演算法的迭代進行,新的信息不斷被納入到預測演算法中,以期持續的改進。IBM的SAST產品提供了針對掃描結果的智能查找分析(IFA),以消除誤報,噪音或利用概率低的結果。360代碼衛士團隊也在進行將人工智慧技術應用於代碼安全分析的研究,以期在其產品的後續新版本中提供相應的功能。

雖然人工智慧、機器學習乃至深度學習作為近年來大熱的技術方向,讓人難以區分其價值的真實成分和炒作成分。但是不得不承認,人工智慧技術和傳統代碼安全技術的結合,是AST領域的重要發展趨勢之一。

基於人工智慧的代碼安全分析

Forrester Research 2017年的一份研究則表明,為了加速應用的開發,開發人員常使用開源組件作為應用基礎,這導致80%-90%的代碼來自於開源組件。而VeraCode在《軟體安全報告(第7版)》中指出,大約97%的Java應用程序中至少包含一個存在已知漏洞的組件。由此可見,隨著開源組件在現代軟體中使用比率的持續增長,以及日益嚴峻的組件安全問題,開源(或第三方)組件的發現和管理已經成為AST解決方案中關鍵性甚至強制性的功能之一。

軟體代碼成分分析(SCA)技術是指通過對軟體的組成進行分析,識別出軟體中使用的開源和第三方組件(如底層庫、框架等等),從而進一步發現開源安全風險和第三方組件的漏洞。通常,SCA的檢測目標可以是源代碼、位元組碼、二進位文件、可執行文件等的一種或幾種。除了在安全測試階段採用SCA技術對軟體進行分析以外,SCA技術還可以集成到MSVC、Eclipse等IDE或SVN、Git等版本控制系統,從而實現對開發者使用開源組件的控制。

SCA技術和其他AST技術的深入融合,也是代碼安全技術發展的趨勢之一。當使用單一SAST技術掃描某個項目的源代碼之後,你可能會得到開發人員的反饋:「檢測結果中有90%是開源代碼的問題,我處理不了」。而當SAST融合了SCA技術之後,開發人員拿到的結果將是開源組件中的已知漏洞信息和實際開發代碼中的SAST掃描結果。

面向DevSecOps的代碼安全測試

由於敏捷開發和DevOps的開發技術趨勢,傳統應用安全的形態不斷發生著變化。很多具體的技術路線仍然在不斷演進,但是對於自動化、工具化、時間控制的要求越來越明顯了。面向DevSecOps的代碼安全測試,並不是一門全新的技術,但是幾乎所有的傳統安全測試技術,都會因為DevOps而產生變化,演化出新的產品形態。

由於開發運維的一體化,原本開發人員的一次普通Tag或Merge操作,也被賦予了更多的含義。提交代碼中的安全問題,可能就意味著一次失敗的發布。因此,代碼安全的需求也被前置到了前所未有的程度。能夠在代碼編寫的同時,發現代碼中的安全隱患,從而在第一時間內修復,成為了DevSecOps的基本需求。因而IDE插件、輕量級的客戶端快速檢測模式,也成為了下一代代碼安全產品的標配。

由於持續集成、持續部署在DevOps中的大量應用,自動化的、快速地代碼安全測試也勢在必行。因此,代碼安全產品需要與Jenkins、Bamboo等持續集成系統,Bugzilla、Jira等生命周期管理系統進行集成,實現有效的自動化;同時,提供針對代碼安全基線的檢測,以及增量分析、審計信息攜帶等功能,從而在少量或沒有人工參與的情況下,儘可能快速地、有效地保證軟體的安全性。

互動式應用安全測試

SAST產品,通常從源代碼層面對程序進行建模和模擬執行分析,但是由於缺少一些必要的運行時信息,容易產生較高的誤報;DAST產品雖然能夠通過攻擊的方式,發現一些確實存在的安全問題,但其對應用的覆蓋率很低。

互動式應用安全測試(Interactive Application Security Testing,簡稱IAST)技術,是解決上述問題的一個新的嘗試。關於IAST,Gartner分析師給出的定義是:「IAST產品結合了DAST和SAST的技術,從而提高測試的準確率(類似於DAST對於攻擊成功的確認),同時對代碼的測試覆蓋率達到與SAST相似的水平」。 IAST在其準確度、代碼覆蓋率、可擴展性等方面,有著獨到之處。但又受限於它自身的技術路線,無法在所有場景中替代DAST產品。

IAST產品的解決方案通常包含兩個部分:應用探針和測試伺服器。應用探針會部署於被測Web應用所在的伺服器,從而捕獲來自於用戶代碼、庫、框架、應用伺服器、運行時環境中的安全信息,並傳輸給測試伺服器;測試伺服器會對收集來的安全數據進行分析,得出漏洞的信息進而生成報告。另外,值得一提的是,基於這種應用深度探測與分析的技術,還能夠實現實時的應用層攻擊的自我防護,阻斷對諸如SQL注入、跨站腳本等漏洞進行的利用和攻擊,這就是實時應用程序自我保護(Runtime Application Self-Protection)技術。

(本文作者:360企業安全集團代碼安全事業部技術總監 章磊)


推薦閱讀:

一次驚心動魄的滲透測試
王寶強離婚與徐玉玉被騙(下)

TAG:代码安全 | 网络安全 | 代码 |