郭新海 張小梅 劉 安 丁 攀 藍鑫沖
中國聯(lián)通研究院 北京 100048
Web應(yīng)用作為信息化和數(shù)字化時代的重要應(yīng)用程序一直被各行各業(yè)所廣泛使用,其作為互聯(lián)網(wǎng)的重要組成部分,與人們的工作、生活密切相連。正因為Web應(yīng)用的使用廣泛,其面臨的網(wǎng)絡(luò)安全攻擊也最多,近年來針對Web應(yīng)用發(fā)起的攻擊行為層出不窮,如典型的注入類攻擊、跨站請求偽造攻擊、XML外部實體引用攻擊、數(shù)據(jù)泄露攻擊等[1]。根據(jù)Gartner的調(diào)查統(tǒng)計,信息安全攻擊有75%都發(fā)生在應(yīng)用層面而非網(wǎng)絡(luò)層面上,有效保證Web應(yīng)用的安全已經(jīng)成為關(guān)系到整個業(yè)務(wù)系統(tǒng)的重中之重。從Web應(yīng)用安全防護之初到如今,其防護手段仍然主要依靠防火墻、防毒墻、Web應(yīng)用安全防護網(wǎng)關(guān)、Web漏洞掃描等,這些手段注重的是在Web應(yīng)用上線運行后,在其外圍建立多重的安全防線和縱深防御體系。通過這些手段的有效運用,在一定程度上阻止了攻擊行為,保證了Web應(yīng)用的安全,但是并未從Web應(yīng)用自身的防御水平出發(fā),提高其自身的免疫力。
如今,開源和云原生時代已經(jīng)到來,國內(nèi)外的安全研究都逐步開始從單純構(gòu)筑應(yīng)用外圍縱深的防御體系轉(zhuǎn)移到構(gòu)筑外圍防御體系和增強應(yīng)用自身免疫力并重的方向上來,特別是軟件供應(yīng)鏈安全提出后,人們開始更加重視整個軟件供應(yīng)鏈的安全。開源和云原生技術(shù)的應(yīng)用,使軟件供應(yīng)鏈越來越趨于復雜化和多樣性,因此針對軟件供應(yīng)鏈的網(wǎng)絡(luò)攻擊也就越來越多,并且呈現(xiàn)出投入少、獲利多的特點。Web應(yīng)用作為軟件應(yīng)用的重要組成部分也正在遭受軟件供應(yīng)鏈所受到的各類安全攻擊,有效保證Web應(yīng)用安全,防止攻擊者以Web應(yīng)用為起點進而對內(nèi)網(wǎng)進行端口探測、漏洞挖掘與利用、橫向滲透、特權(quán)提升等攻擊,才能夠進一步保證大量業(yè)務(wù)系統(tǒng)的安全。因此,為更全面地保證Web應(yīng)用安全,需要多種Web應(yīng)用檢測技術(shù)來對應(yīng)用進行全生命周期檢測,綜合應(yīng)用多種Web應(yīng)用檢測技術(shù)發(fā)現(xiàn)安全漏洞并進行修復,在應(yīng)用上線之前使應(yīng)用本身就具有良好的健康水平,從根源上消除大部分攻擊發(fā)生的可能。
Web應(yīng)用自被廣泛應(yīng)用以來就面臨著大量的網(wǎng)絡(luò)攻擊,OWASP(開放式Web應(yīng)用程序安全項目)作為全球最權(quán)威的研究Web應(yīng)用安全的開放社區(qū),其提出的10項最嚴重的Web應(yīng)用程序安全風險列表“OWASP TOP10 2017”中指出,Web應(yīng)用所面臨的10大類風險有:注入攻擊、失效的驗證與連接管理、跨站腳本攻擊、不安全的直接對象引用、安全配置錯誤、敏感數(shù)據(jù)泄露、缺少功能級別的訪問控制、跨站請求偽造、使用含有已經(jīng)漏洞的組件、未驗證的重定向與轉(zhuǎn)發(fā)。這些風險作為典型的安全問題已經(jīng)廣泛被攻擊者所利用,并且成為Web應(yīng)用系統(tǒng)面臨的主要威脅。
如今,隨著國內(nèi)外科技的高速發(fā)展,軟件面臨的攻擊在原來的基礎(chǔ)上已經(jīng)擴展覆蓋到了其整個供應(yīng)鏈,并且呈現(xiàn)出多來源化、覆蓋面廣、攻擊方式多的新特點,新的攻擊類型主要有源代碼污染、預留后門、開發(fā)工具污染、升級劫持等[2]。
Web應(yīng)用作為軟件的重要部分在當前形式下也自然面臨著傳統(tǒng)的Web攻擊和軟件供應(yīng)鏈攻擊的雙重威脅,針對其所面臨的各類攻擊,需要將安全檢測方法覆蓋到應(yīng)用的開發(fā)階段、測試階段以及運營階段,以SDL軟件安全開發(fā)的生命周期和DevSecOps[3]為基準,將安全檢測技術(shù)貫穿于應(yīng)用的整個生命周期[4]。
目前針對Web應(yīng)用安全檢測的方法存在多種,主要可以分為靜態(tài)應(yīng)用安全檢測技術(shù)(Static Application Security Testing,SAST)、交互式應(yīng)用安全檢測技術(shù)(Interactive Application Security Testing,IAST)和動態(tài)應(yīng)用安全檢測技術(shù)(Dynamic Application Security Testing,DAST),三大類技術(shù)[5]均能對Web應(yīng)用的安全風險進行檢測,并且互相配合覆蓋了應(yīng)用從開發(fā)到運營的整個生命周期。分析三類技術(shù)的檢測原理、特點、使用場景和檢測效果等,有助于針對具體的場景選擇相應(yīng)的檢測技術(shù),并更好地保證Web應(yīng)用安全。以下將對三類技術(shù)進行分析和實驗驗證。
2.1.1 SAST技術(shù)
在當前Web應(yīng)用開發(fā)強調(diào)持續(xù)交付和開發(fā)周期不斷縮短的情況下,應(yīng)用系統(tǒng)在開發(fā)階段成為了風險和漏洞大量引入的階段,其來源主要有兩個方面:一是開發(fā)人員自己編寫的代碼存在的安全風險和漏洞;二是開源組件或開源框架的引用所帶來的風險和漏洞。要修復這些安全風險和漏洞,首先需要將風險和漏洞有效地檢測出來。SAST技術(shù)能夠在應(yīng)用的開發(fā)階段對源代碼或二進制文件的語法、結(jié)構(gòu)、過程、接口等進行分析從而自動化地檢測出應(yīng)用代碼存在的安全漏洞[6]。另外,SAST技術(shù)除了進行應(yīng)用代碼審計功能之外,也隨著軟件供應(yīng)鏈安全的發(fā)展增加了軟件成分分析(Software Composition Analysis,SCA)功能,通過代碼審計功能和SCA功能既能自動化地完成應(yīng)用的代碼檢測又能對應(yīng)用程序的開源組件和開源框架進行分析。
代碼審計的技術(shù)原理主要是自動化地將源代碼通過調(diào)用編譯器或解釋器轉(zhuǎn)換成中間代碼,然后明確源代碼之間的調(diào)用關(guān)系、執(zhí)行環(huán)境和上下文,并利用詞法分析、語義分析、數(shù)據(jù)流分析、控制流分析、配置分析和結(jié)構(gòu)分析等方法,分析程序的組成和特點,最終結(jié)合分析結(jié)果匹配已有的規(guī)則庫,發(fā)現(xiàn)程序中的漏洞。
SCA技術(shù)對二進制軟件的組成部分進行識別、分析和追蹤,通過讀取軟件的lib文件或者pom.xml文件識別和清點開源軟件(OSS)的組件構(gòu)成和依賴關(guān)系,然后通過對比國內(nèi)外的漏洞庫如CVE、CNNVD和CNVD確定開源組件中存在的已知安全漏洞和潛在的許可授權(quán)問題等。
2.1.2 IAST技術(shù)
IAST技術(shù)是2012年Gartner公司提出的一種新的應(yīng)用程序安全測試技術(shù),如今隨著軟件供應(yīng)鏈面臨安全風險的增多開始受到廣泛重視,IAST技術(shù)推動了整個安全測試工作的左移,該技術(shù)在應(yīng)用的功能測試階段同時進行安全漏洞檢測,成為了SDL軟件安全開發(fā)生命周期和DevSecOps安全工具鏈中的必備測試手段,該技術(shù)能有效地發(fā)現(xiàn)靜態(tài)安全檢測和動態(tài)安全檢測無法發(fā)現(xiàn)的安全漏洞。
IAST技術(shù)具有兩種代表性的模式,分別為插樁模式和流量代理模式[6],兩種模式的原理不相同,下面分別說明兩種模式的原理。
插樁模式采用污點跟蹤和對底層函數(shù)進行hook的方法,利用插樁的Agent通過字節(jié)碼注入的方式,將Agent自身融入到應(yīng)用程序中,對應(yīng)用程序輸入的參數(shù)進行污點跟蹤和數(shù)據(jù)標記,同時它還對應(yīng)用系統(tǒng)的關(guān)鍵函數(shù)進行hook[7]。當受污染的數(shù)據(jù)進入hook點的時候,IAST就能對系統(tǒng)進行安全檢測,定位安全漏洞所在的代碼行位置,展示出風險參數(shù)或者風險數(shù)據(jù)的字節(jié)碼流走向,同時上報安全漏洞。通過結(jié)合動態(tài)污點分析技術(shù)還能在線對Web應(yīng)用程序所使用的第三方組件進行檢測并匹配CVE、CNNVD和CNVD漏洞庫,從而確定開源組件中存在的已知安全漏洞和潛在的許可授權(quán)問題等。插樁模式可以細分為被動插樁模式和主動插樁模式,兩種插樁模式的原理圖分別如圖1和圖2所示。
圖1 IAST檢測被動插樁模式原理
圖2 IAST檢測主動插樁模式原理
圖1中被動插樁模式的漏洞檢測流程如下:
1)終端用戶向已經(jīng)安裝好IAST agent的Web服務(wù)器發(fā)送正常請求,正常請求到達Web服務(wù)器后,IAST的agent對請求的參數(shù)和代碼流進行標記和跟蹤;
2)agent將獲取的信息傳送給IAST服務(wù)器,IAST服務(wù)器依據(jù)內(nèi)置的規(guī)則展示漏洞風險信息;
3)終端用戶登錄IAST服務(wù)器,可以查看Web服務(wù)器存在的安全漏洞和風險。
圖2中主動插樁模式的漏洞檢測流程如下:
1)掃描引擎服務(wù)器向裝有IAST agent的Web應(yīng)用服務(wù)器發(fā)起掃描測試任務(wù),agent獲取掃描測試請求并對代碼流進行標記和跟蹤;
2)agent將獲取的信息傳送給IAST服務(wù)器,IAST服務(wù)器依據(jù)內(nèi)置的規(guī)則展示漏洞風險信息;
3)終端用戶登錄IAST服務(wù)器,可以查看Web服務(wù)器存在的安全漏洞和風險。
流量代理模式是將IAST系統(tǒng)設(shè)置為代理服務(wù)器,代理服務(wù)器收集到功能測試的流量后,IAST系統(tǒng)可以將流量復制一份然后對流量進行重新改造,改造成含有安全測試payload的流量包進行轉(zhuǎn)發(fā),根據(jù)應(yīng)用系統(tǒng)返回數(shù)據(jù)包中所包含的信息判斷應(yīng)用是否存在漏洞。代理模式的原理圖如圖3所示。
圖3 IAST檢測代理模式原理
圖3中代理模式的漏洞檢測流程如下:
1)終端用戶將自己的代理服務(wù)器設(shè)置為IAST服務(wù)器后發(fā)起請求;
2)IAST服務(wù)器轉(zhuǎn)發(fā)正常的用戶請求發(fā)送給Web服務(wù)器;
3)IAST服務(wù)器復制一份用戶請求流量,并改造為含有測試payload的請求包發(fā)送給Web服務(wù)器;
4)Web服務(wù)器將對測試請求的響應(yīng)信息回傳給IAST服務(wù)器,IAST服務(wù)器完成對響應(yīng)信息的分析,并展示漏洞風險信息;
5)終端用戶登錄IAST服務(wù)器可以查看漏洞風險信息。
2.1.3 DAST技術(shù)
DAST作為一種傳統(tǒng)的黑盒測試技術(shù)主要是在Web應(yīng)用上線運行后,通過利用專用的Web應(yīng)用漏洞掃描器來進行漏洞掃描,作為最傳統(tǒng)和應(yīng)用最廣泛的Web應(yīng)用檢測技術(shù),其能夠發(fā)現(xiàn)一些典型的Web應(yīng)用漏洞,如各類注入類漏洞、跨站腳本漏洞、安全配置錯誤、敏感數(shù)據(jù)泄露等風險。利用該技術(shù)發(fā)現(xiàn)漏洞后,需要運營人員和開發(fā)人員進行漏洞修復,修復漏洞后再更新業(yè)務(wù)系統(tǒng),因此整個漏洞的修復完成周期會更長,但是由于該方法使用的簡易性和便捷性,其仍然居于很重要的地位。
目前國內(nèi)外都已經(jīng)有相當成熟的Web應(yīng)用漏洞掃描器,國內(nèi)的主要有啟明星辰Web漏掃、綠盟Web漏掃和安恒Web漏掃,國外的主要有AWVS和AppScan等,各類漏洞掃描器的原理基本相同,如圖4所示,主要是通過掃描器向Web應(yīng)用服務(wù)器發(fā)起漏洞掃描任務(wù),任務(wù)會爬取整個Web應(yīng)用的頁面和參數(shù),然后依托爬站的結(jié)果繼續(xù)對Web應(yīng)用發(fā)起含有攻擊的payload請求包,通過Web應(yīng)用返回的response響應(yīng)信息來確定應(yīng)用系統(tǒng)是否存在漏洞[8]。
圖4中漏洞掃描流程如下:
圖4 DAST檢測原理
1)掃描器建立掃描任務(wù)向Web服務(wù)器發(fā)起漏洞掃描;
2)Web服務(wù)器將response響應(yīng)回傳給掃描器,掃描器完成漏洞分析;
3)終端用戶登錄掃描器,查看漏洞信息。
在了解SAST、IAST和DAST三種檢測技術(shù)原理的基礎(chǔ)上,需要分析三種檢測技術(shù)漏洞檢測的效果和優(yōu)劣。本次檢測分析使用的安全漏洞靶場有3個,分別是WebGoat7、Benchmark1.2和場景化靶場。
WebGoat是OWASP組織提供的Web漏洞實驗型Java靶場,該靶場中含有多類Web應(yīng)用漏洞,主要包括:跨站點腳本攻擊(XSS)、外部實體引用(XXE)、弱會話cookie、SQL盲注、數(shù)字型SQL注入、字符串型SQL注入、Open Authentication失效、危險的HTML注釋等。
Benchmark是OWASP組織提供的一個用于驗證檢測工具檢測準確度、覆蓋率和速率的開源Java靶場,其包含命令注入、弱密碼、弱哈希、LDAP注入、路徑遍歷、不安全的cookie、SQL注入、違反信任邊界、弱隨機數(shù)、XSS、Xpath注入等共計2740個漏洞,其中真漏洞有1415個,假漏洞1325個,各種檢測器利用Benchmark靶場掃描后,能生成相應(yīng)的評分表,得分成績能夠有效顯示出檢測工具的檢測準確性、誤報率、漏報率等。
場景化靶場為自研靶場,包含的漏洞主要有防篡改場景、一次性資源場景、多污染源場景、編碼場景,利用這些場景來驗證不同的檢測技術(shù)對這些場景中漏洞的檢測能力。
各靶場的檢測效果說明如表1~3所示。
表1 Webgoat7靶場檢測漏洞報出情況
通過上述實驗對三種檢測技術(shù)的效果進行總結(jié)可知道三類技術(shù)各有優(yōu)劣,其中SAST技術(shù)作為靜態(tài)檢測技術(shù)是從代碼級別進行檢測,可以支持多種語言,檢出率高但是誤報率也高;IAST技術(shù)基于字節(jié)碼流進行檢測,語言覆蓋率是其面臨的一大問題,目前Java語言的支持性比較好,其他語言的支撐仍需要改進,漏洞檢出率高,誤報率極低;DAST基于請求payload,通過response信息進行檢測,不區(qū)分語言和平臺,漏洞的檢出率相對IAST技術(shù)要低一些,誤報率也比較低。三種技術(shù)的詳細檢測效果和功能性對比見表4。
表2 Benchmark1.2靶場檢測得分情況
表3 場景靶場檢測
表4 三種技術(shù)檢測效果和功能性對比
Web應(yīng)用一直受到廣泛的網(wǎng)絡(luò)攻擊,特別是在當前軟件供應(yīng)鏈被威脅的時代,Web應(yīng)用也同樣受到了供應(yīng)鏈攻擊。為了保護Web應(yīng)用整個供應(yīng)鏈安全,需要的已經(jīng)不再是某一種單一的檢測或防御技術(shù),而是需要各類技術(shù)共同配合展開全方位的檢測防御,構(gòu)建覆蓋軟件系統(tǒng)全生命周期的縱深防御體系。本文詳細講述了三類主流Web應(yīng)用檢測技術(shù)的原理并進行了實驗驗證,客觀分析了三類技術(shù)的優(yōu)劣和特點,希望能為Web應(yīng)用檢測技術(shù)的選擇和使用提供參考,以在新形勢下更好地保證Web應(yīng)用的安全性。