軟件開發安全,是網絡安全行業近年想積極探索的技術領域,雖然這個技術領域已經存在了將近20年時間,但是直到2020年2月的RSAC大會,開發安全才真正成為網絡安全行業的關注熱點。同樣,2019年12月1日正式實施的《網絡安全等級保護條例2.0版》也給軟件開發安全領域注入了一針“強心劑”,業界和政策對“安全左移”和DevSecOps的空前重視讓無數網絡安全從業者看到了新的機會。
筆者團隊通過對軟件開發安全的認知和對軟件安全測試的摸索,并結合行業主流的軟件安全測試技術進行了實踐。本文根據筆者團隊的實踐經驗為大家分析有關軟件安全測試的實踐收獲。
韓敏
現任國網思極檢測技術(北京)有限公司執行董事、總經理。軟件工程工程碩士,國網公司辦公自動化系統業務方向信息化資深專家、中國電力科學研究院先進工作者、“茶杯式脫敏理論”提出者、“思極風”系列產品創始人。
1.當前軟件安全測試的五大痛點
隨著DevOps方式的普及,軟件開發正向著“快速迭代、快速開發、快速交付”的方式發展、提供業務支撐,開發團隊也不斷平衡和融合開發、測試與業務之間的關系。但是,軟件安全測試仍存在如下典型問題。
(1)開發迭代周期短,難以做到每個版本迭代執行安全測試;
(2)開發人員和測試人員通常缺乏應用安全知識,網絡安全人員不懂軟件開發,雙方較難建立起溝通語言;
(3)主流采用的軟件安全測試仍為滲透測試,難以在研發過程中體系化檢測代碼級和功能級缺陷;
(4)基于代碼審計的安全檢測普遍存在誤報和漏報,需人工復合;
(5)無法準確掌握軟件所使用開源組件的資產使用情況和安全漏洞情況。
2.軟件安全測試的主要思路
理論上來講,軟件安全測試是從安全的視角對軟件的安全質量進行審核的過程,主要包括:
(1)確認軟件的安全功能十分滿足安全設計要求;
(2)識別軟件自身存在的設計缺陷、錯誤編碼和運行故障;
(3)評估軟件的其他質量屬性,包括可靠性、可擴展性、可恢復性等。
其中,軟件自身漏洞識別是軟件安全測試的主要內容。那么,安全測試的主要思路包括:
2.1. 將自動化安全測試工具與研發流程融合
全球頂級咨詢公司Gartner于2020年發布的《應用安全測試魔力象限2020》報告中,明確指出了當前應用軟件安全測試領域包括的主流技術為SAST、DAST、IAST和SCA。可以說,通過這四類技術的實踐應用和有機融合,能夠有效開展軟件安全測試。
而當前軟件研發團隊普遍使用的研發流程為“需求、設計、編碼、測試、部署運營”,并在DevOps過程中做到流程的快速迭代。研發團隊根據軟件安全保障的需要和自身的能力,選擇、配置和實施有關軟件安全測試的實踐,如:使用SAST技術執行白盒安全測試、使用DAST技術執行黑盒安全測試。因此,用于軟件安全測試的自動化工具需要與研發團隊現有的研發流程和安全實踐匹配融合,并具備與研發管理平臺融合的能力。
2.2. 檢測效率與成本投入之間的平衡
安全測試工具能對DevOps中的安全測試提供支撐,這就需要自動化安全測試平臺具備“耗時短、精度高”的特征。
2.3. 對于軟件研發資產的保護
安全檢測過程中的研發資產安全保護是研發團隊必須重視的。受開源理念的影響,行業中存在使用開源組件支撐軟件開發功能實現、使用開源安全檢測工具執行安全保障的情況。但從“軟件供應鏈安全”的角度來看,由于開源工具的非商業性和開放性,可能存在其所屬開源社區缺乏對開源組件維護而導致安全漏洞未修復、無后續版本升級的情況,也可能存在在其傳播下載途徑中被惡意人員植入惡意代碼的風險。因此,需要對使用的軟件研發資產進行合理的管控。
3.軟件安全測試的技術實施方案
3.1. 安全測試技術選型
行業內主要使用自動化軟件安全測試技術和工具都能解決常見的技術性安全問題,且通常都能覆蓋OWASP Top 10中定義的應用安全風險,以及PCI DSS這樣的行業標準等。
(1)動態應用安全測試(DAST)
通常在測試或運行階段分析應用軟件的動態運行狀態。通過模擬黑客攻擊行為,收集和判斷應用軟件做出的反應,從而確定該應用軟件是否存在安全缺陷。
(2)靜態應用安全測試(SAST)
源代碼級別的安全測試,通過將軟件安全規則、開發規范融入到檢查列表中進行匹配,從代碼實現的源頭遏制安全風險。通常在編碼階段分析應用軟件的源代碼或二進制文件的語法、結構、過程、接口等來發現程序代碼存在的安全漏洞。
(3)交互式應用安全測試(IAST)
通過部署的代理程序,收集、監控應用軟件運行時函數執行、數據流,與掃描器端進行實時交互,高效、準確的識別應用軟件中的安全缺陷及漏洞,同時可準確識別安全缺陷及漏洞所在的代碼文件、行數、函數及參數。IAST技術可以說是SAST技術和DAST技術結合的一種實時應用軟件安全檢測技術。
有關DST、SAST和IAST的實現原理、優劣勢分析等技術信息,可參考安全牛網站2019年4月發布的《一文洞悉DAST、SAST、IAST ——Web應用安全測試技術對比淺談》文章,這里不再復述。但我們對上述三種安全測試技術做一個綜合性的對比:
3.2. 軟件成分分析安全檢測
軟件研發過程中大量使用第三方組件(包括:商業和開源)已成為軟件研發的主流。而第三方組件也可能同樣引用了其他類似的安全或者不安全的組件,這就形成了一個沒有安全保障的軟件供應鏈或調用鏈。任何一個薄弱環節都可能成為一個入口點導致軟件被攻擊。因此,為了檢測研發過程中所使用第三方組件的安全性,軟件成分分析(SCA)技術已變得非常重要。
2019年,Gartner在軟件成分分析的技術洞察報告中對軟件成分分析技術進行了定義:軟件組件分析產品對應用程序進行分析,以檢測開源軟件組件是否帶有已知的安全漏洞或功能漏洞,及需要恰當授權許可的商業軟件或第三方產品。它有助于確保企業軟件供應鏈僅包含安全的組件,從而支持安全的應用程序開發和組裝。
準確的說,SCA技術用于檢測軟件中的開源組件是否帶有已知的安全漏洞或功能漏洞,及需要恰當授權許可的商業軟件或第三方產品。SCA技術有助于確保企業軟件供應鏈僅包含安全的組件,從而支持安全的應用軟件開發和組裝。有關軟件成分分析的解讀,可參考安全牛網站2020年7月發布的《掌控開源 企業開展軟件成分分析工作的思路與實踐》文章。
3.3. 軟件安全測試工作流程
在軟件開發的安全測試過程中全部應用上述四種安全測試技術,考慮的流程如下。
(1)開發人員在編碼階段完成代碼編制、構建代碼包,此階段引入SAST技術和SCA技術對代碼進行全面檢測,識別代碼級安全缺陷和軟件中自帶安全漏洞的組件情況;
(2)開發人員或測試人員在測試階段進行單元測試或集成測試驗證功能的可用性,此階段中引入IAST技術對代碼執行交互式安全測試,以掌握代碼安全和邏輯安全的狀況,提前識別并修復代碼和邏輯中的安全缺陷;
(3)在測試環境中開展完整的業務測試,使用DAST技術對軟件進行動態掃描。此階段也可以引入人工的安全測試,自動化平臺提供安全漏洞錄入和跟蹤功能;
(4)當應用軟件發布后,不定期組織開展滲透測試以開展進一步的業務安全測試。
3.4. 行業代表工具
目前,各安全測試技術已在國內外形成了各自的行業代表性工具,包括開源工具和商業工具。在開源工具方面,全球頂級應用安全組織OWASP提供了多款工具支持DAST技術和SCA技術的驗證和應用。而在商業工具方面,除進入Gartner評估視野的國外知名公司(如:Synopsys、Checkmarx、Micro Focus、Rapid 7、HCL等)外,還有諸如奇安信、開源網安、酷德啄木鳥、默安等國內優秀廠商提供國產工具。
4.實踐經驗
筆者團隊基于國產安全測試工具對團隊自研的軟件系統開展安全測試,和大家分享經驗如下。
(1)安全測試是實踐DevSecOps的基礎
隨著對信息安全保障的重視和軟件安全開發的實踐,“DevOps”逐步吸收和融合“安全(Sec)”形成了“DevSecOps”。而DevSecOps的重要思想就是在開發和運維一體化的基礎上,開發能快速推出軟件進行安全測試,并通過多個版本的迭代和安全保障,使軟件變得成熟穩定,同時也使軟件功能變得豐富。然而,DAST和SAST安全測試在DevSecOps模式下顯得過于厚重,檢測耗時長、需人工核實檢測結果自然就約束了DAST和SAST在DevSecOps流程中的應用。因此,要從DevOps轉向并實施DevSecOps,能融入開發流程、速度快、準確率高、低人員參與度的自動化安全測試技術就成了前提保障。基于此,IAST安全測試和SCA檢測是支持DevSecOps落地的優先選擇。
(2)與質量管理體系相結合
通常,研發團隊實施安全測試是基于網絡安全管理方面的要求。在軟件安全測試的落地過程中,將測試標準、測試過程、測試人員和測試結果納入軟件的質量管理體系,是保障軟件安全效果的基礎。當軟件的某項安全指標沒有達到要求時,質量部門有權否決軟件的上市發布或上線運營。因此,鑒于DAST、SAST、IAST和SCA各自的技術特征,將基于IAST技術的安全測試與軟件功能測試結合,將基于SCA技術的組件分析在測試階段執行,既能做到對功能測試與安全測試的同步覆蓋,又能從代碼、邏輯、組件等不同維度對軟件進行安全分析,同時能對質量管理體系提供必要且低成本的支撐。
5.總結
在實踐過程中,筆者團隊雖然在測試流程、人員能力、工具配置、漏洞修復等方面仍處于摸索和經驗積累階段,但較以往的軟件而言在軟件發布前已大幅減少了不同威脅等級的軟件安全漏洞,可以說,軟件安全測試為軟件開發提供了明顯而有效的安全技術支撐。眾所周知,安全是動態變化的,也沒有百分之百絕對的安全,但若能在軟件上線前設置好卡口、做好充足的軟件安全測試,檢測并修復能夠發現的軟件安全漏洞,那么對于軟件上線應用后的網絡安全和數據安全保障工作就奠定了堅實的基礎。