李浩杰,裘國永
(陜西師范大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,陜西 西安 710119)
Web應(yīng)用程序是互聯(lián)網(wǎng)上傳遞信息最流行的方式。由于其分布性和開放性的特點(diǎn),使得Web應(yīng)用程序面臨諸多潛在的安全攻擊。例如SQL注入[1]、文件包含、目錄遍歷、參數(shù)篡改等,可能管理員配置了正確的防火墻和WAF,但是這些安全防御軟件仍然存在策略性的繞過。因此,需要定期的對(duì)Web應(yīng)用進(jìn)行掃描,由于手動(dòng)測(cè)試的復(fù)雜性和費(fèi)時(shí)的特點(diǎn),自動(dòng)化的滲透測(cè)試工具的出現(xiàn)就可以幫助我們完成這項(xiàng)工作。主要有兩種方法來測(cè)試Web應(yīng)用程序的漏洞:白盒測(cè)試和黑盒測(cè)試。白盒測(cè)試:也就是對(duì)Web應(yīng)用程序源代碼的分析。這可以通過手動(dòng)或者使用像FORTIFY這樣的代碼分析工具來完成。黑盒測(cè)試:在代碼執(zhí)行過程中查找漏洞。這種方法也被稱為滲透測(cè)試,掃描器并不清楚Web應(yīng)用程序的內(nèi)部信息,它是通過在Web的HTTP請(qǐng)求中使用模糊測(cè)試技術(shù)。本論文就是通過對(duì)比3款自動(dòng)化滲透測(cè)試工具掃描的結(jié)果,找到Web應(yīng)用程序中常見的安全漏洞,并分析使用工具掃描漏洞的一些局限性。
在正式的試驗(yàn)之前,要先明確一些關(guān)注的重點(diǎn):
1)掃描器檢測(cè)到的漏洞的覆蓋率。
2)檢測(cè)結(jié)果中的誤報(bào)[2]。
3)Web應(yīng)用程序中常見的漏洞類型。
實(shí)驗(yàn)步驟包括:
1)準(zhǔn)備階段:挑選進(jìn)行測(cè)試的Web應(yīng)用程序和掃描器。
2)執(zhí)行階段:使用漏洞掃描器來掃描Web服務(wù)以識(shí)別出潛在的漏洞。
3)驗(yàn)證階段:通過手動(dòng)測(cè)試來確認(rèn)由掃描器識(shí)別出來的漏洞。
4)分析階段:對(duì)實(shí)驗(yàn)結(jié)果數(shù)據(jù)進(jìn)行系統(tǒng)化分析。
Web應(yīng)用程序可能由各種開發(fā)語言編寫,不可能對(duì)所有涉及到的技術(shù)進(jìn)行測(cè)試,為此,我們隨機(jī)的挑選一些用PHP語言編寫的,能夠免費(fèi)下載使用的,涵蓋諸多應(yīng)用領(lǐng)域(包括電子商務(wù)、論壇、博客等等)的20個(gè)Web應(yīng)用程序進(jìn)行測(cè)試。在挑選的過程中,因?yàn)橐韵碌囊恍┰颍枰獙⑵鋪G棄[3],即:
無效的WSDL:至少有一個(gè)掃描器不符合WSDL的語法描述。
無法檢索WSDL:至少有一個(gè)掃描器找不到WSDL。
沒有發(fā)現(xiàn)方法:Web服務(wù)沒有操作來掃描。
認(rèn)證要求:某個(gè)操作需要認(rèn)證,這意味著有些服務(wù)是不能完全檢測(cè)到的。
未處理的異常:測(cè)試中斷并且/或者有一個(gè)掃描器異常關(guān)閉。
通信錯(cuò)誤:至少有一個(gè)掃描器因?yàn)镠TTP請(qǐng)求或者SSL連接錯(cuò)誤問題而不能進(jìn)行完整請(qǐng)求。
掃描問題:至少有一個(gè)掃描器報(bào)告了一個(gè)像“無法添加事務(wù)”或“不能渲染對(duì)象”這樣的通用錯(cuò)誤。
在試驗(yàn)中我們使用了3款知名的商業(yè)Web漏洞掃描器:AWVS、HP WebInspect以及 IBM Rational AppScan。
AWVS,全稱為 Acunetix Web Vulnerability Scanner。 它是一個(gè)自動(dòng)化的Web應(yīng)用程序測(cè)試工具,審計(jì)、檢查漏洞。如SQL 注入、XSS[4](跨站腳本)、CSRF(跨站請(qǐng)求偽造)等等。
HP WebInspect:WebInspect是最準(zhǔn)確和全面的自動(dòng)化的Web應(yīng)用程序和Web服務(wù)漏洞評(píng)估解決方案。惠普WebInspect可以提供快速掃描功能、廣泛的安全評(píng)估范圍以及準(zhǔn)確的Web應(yīng)用程序安全掃描結(jié)果。該工具具有開創(chuàng)性的評(píng)估技術(shù)、包括同時(shí)爬行和審計(jì)以及并發(fā)掃描。它是一個(gè)廣泛的可用于基于Web的應(yīng)用程序的滲透測(cè)試工具。
IBM Rational AppScan:它是Web應(yīng)用程序滲透測(cè)試舞臺(tái)上使用廣泛的工具之一,有助于安全人員進(jìn)行Web應(yīng)用程序自動(dòng)化漏洞測(cè)試評(píng)估。它可以自動(dòng)進(jìn)行漏洞評(píng)估、掃描和檢測(cè)所有常見的Web應(yīng)用程序漏洞,包括SQL注入、跨站腳本、緩沖區(qū)溢出和Flash/Flex應(yīng)用程序。
在本地使用虛擬機(jī)搭建環(huán)境,對(duì)上述挑選的20個(gè)Web應(yīng)用程序使用掃描器AWVS、WebInspect和AppScan進(jìn)行掃描測(cè)試。
表1 存在漏洞的測(cè)試網(wǎng)站Tab.1 Vulnerabilities in tested websites
從表1可以看到:對(duì)每一款掃描器而言,表中體現(xiàn)的是檢測(cè)到的漏洞的總數(shù)量以及每種掃描器檢測(cè)到的漏洞情況。掃描器指出了五種不同類型的漏洞,即:SQL注入、代碼執(zhí)行、緩沖區(qū)溢出、用戶名/密碼泄露以及服務(wù)器路徑暴漏。
圖1 檢測(cè)到的應(yīng)用程序錯(cuò)誤Fig.1 Application errors detected
掃描器將因?yàn)闊o效的參數(shù)而導(dǎo)致的應(yīng)用程序錯(cuò)誤歸類為低的安全問題。實(shí)際上,這些錯(cuò)誤是基于這樣一個(gè)事實(shí),就是輸入的參數(shù)沒有進(jìn)行正確的檢查(例如:該應(yīng)用程序可能有魯棒性問題)。正如圖1所示,3款掃描器檢測(cè)到了不同的應(yīng)用程序錯(cuò)誤。這明顯是依賴于每個(gè)掃描器所執(zhí)行的測(cè)試。盡管有一小部分情況下,應(yīng)用程序錯(cuò)誤可能會(huì)導(dǎo)致惡意的暴漏(例如:錯(cuò)誤信息泄露敏感的服務(wù)代碼或結(jié)構(gòu)信息),在大多數(shù)情況下,它們并不是安全漏洞。因此,可以將它們排除在進(jìn)一步分析之外。
正如在表1中看到的,不同的掃描器檢測(cè)到了不同類型的漏洞。唯一的例外就是所有的掃描器都報(bào)告了SQL注入漏洞。這暗示了掃描器執(zhí)行了不同形式的滲透測(cè)試并且不同掃描器得到的掃描結(jié)果可能很難進(jìn)行比較。這樣的結(jié)果給我們的啟示就是:為了得到一個(gè)較好的漏洞覆蓋率,在滲透測(cè)試的時(shí)候,需要使用多款掃描器而不是僅依賴于一種掃描器。
正如前面所述,SQL注入是唯一一個(gè)3款掃描器都檢測(cè)到的漏洞。然而,不同掃描器報(bào)告了不同的Web服務(wù)中的不同漏洞。實(shí)際上,掃描器AWVS檢測(cè)到的SQL注入漏洞的數(shù)目要遠(yuǎn)高于掃描器WebInspect和AppScan所檢測(cè)到的SQL注入漏洞。
到目前為止,顯示的結(jié)果還沒有考慮誤報(bào)(就是說掃描器檢測(cè)到了漏洞但是實(shí)際中并不存在)的問題。眾所周知,誤報(bào)是不可避免。這樣的話,決定手動(dòng)來確認(rèn)每一個(gè)檢測(cè)到的漏洞是否存在。
確認(rèn)漏洞的存在性而不能訪問程序的源代碼是一項(xiàng)困難的任務(wù)。因此,定義了一套規(guī)則和相應(yīng)的檢查來對(duì)掃描器檢測(cè)到的漏洞分為3類:確實(shí)是誤報(bào)、確認(rèn)是漏洞以及不確定。
當(dāng)滿足下列條件之一的,檢測(cè)到的漏洞就歸類為誤報(bào):
1)對(duì)于SQL注入漏洞,如果得到的錯(cuò)誤/應(yīng)答與應(yīng)用程序的魯棒性問題相關(guān)并且不是一個(gè)SQL命令。
2)在Web服務(wù)中響應(yīng)的錯(cuò)誤并不是由掃描器的注入引起的。換句話說,當(dāng)Web服務(wù)因有效的輸入而執(zhí)行的時(shí)候,相同的問題就會(huì)出現(xiàn)。
3)對(duì)于路徑和用戶名/密碼泄露,當(dāng)喚醒Web服務(wù)的時(shí)候,Web服務(wù)返回的信息與客戶端提交的信息是一樣的。也就是說,沒有信息泄露。
檢測(cè)到的漏洞如果滿足下列條件之一就歸類為確認(rèn)的漏洞[5]:
1)對(duì)于SQL注入漏洞,如果是注入的值引發(fā)導(dǎo)致數(shù)據(jù)庫服務(wù)的異常。
2)可能訪問未授權(quán)的服務(wù)或Web頁面(例如:用SQL注入繞過認(rèn)證過程)。
3)對(duì)于路徑泄露,可能觀測(cè)到服務(wù)器中文件或文件夾的位置。
4)對(duì)于緩沖區(qū)溢出,如果服務(wù)器不回答請(qǐng)求或者引起特別是與緩沖區(qū)溢出有關(guān)的異常。
如果這些規(guī)則中沒有一個(gè)滿足的,那么就沒有辦法確認(rèn)該漏洞是否真的存在。這些情況就歸類為無法確定。圖2顯示了SQL注入漏洞的結(jié)果。
圖2 SQL注入漏洞的誤報(bào)Fig.2 False positives for SQL injection
正如圖2所示,用AWVS掃描到的SQL注入漏洞中,相對(duì)來說,不確定的數(shù)據(jù)結(jié)果是比較低的。但是對(duì)于WebInspect和AppScan來講,這個(gè)比例就相對(duì)來說是相當(dāng)高的。這意味著對(duì)于AWVS這款掃描器而言,誤報(bào)的結(jié)果是相對(duì)準(zhǔn)確的。確定的誤報(bào)對(duì)掃描器AWVS來說是比較高的,相對(duì)而言,對(duì)于AppScan也是比較高的。只有掃描器WebInspect顯示0誤報(bào)。
表2顯示了其他漏洞的誤報(bào)結(jié)果。
表2 其他漏洞的誤報(bào)Tab.2 False positives of other vulnerabilities
我們關(guān)心的另一個(gè)很重要的方面就是檢測(cè)到的漏洞的覆蓋率。覆蓋率是檢測(cè)到的漏洞數(shù)量與總漏洞數(shù)量的比。很明顯,在該試驗(yàn)中,我們不可能知道總共又多少漏洞,因?yàn)椴煌膾呙杵鞯玫降膾呙杞Y(jié)果是不一樣的。因此,不可能計(jì)算出檢測(cè)到的漏洞覆蓋率。然而,對(duì)于目前已經(jīng)得到的檢測(cè)結(jié)果數(shù)據(jù),我們可以得到一個(gè)近似的漏洞覆蓋率。
實(shí)際上,我們知道檢測(cè)到的漏洞 (相對(duì)于移除誤報(bào)后3款掃描器檢測(cè)到的漏洞的總和)的總數(shù)量以及每個(gè)掃描器檢測(cè)到的漏洞的數(shù)量?;谶@些信息來可以對(duì)每一款掃描器獲取一個(gè)積極的覆蓋率指標(biāo)(實(shí)際的覆蓋率要比表現(xiàn)出來的數(shù)字低)。很明顯,這對(duì)SQL注入漏洞是中肯的,因?yàn)樗撬袙呙杵鞫紮z測(cè)到的唯一一種類型。
表3顯示的是覆蓋率結(jié)果。正如表3所示的那樣,有12個(gè)SQL注入漏洞被檢測(cè)到了(和前面一樣,我們決定包含不確定的情況為存在的漏洞)。每個(gè)掃描器檢測(cè)了這些漏洞中的一小群部分,結(jié)果就是檢測(cè)覆蓋率的一部分。掃描器AWVS表現(xiàn)了良好的結(jié)果。相反,掃描器WebInspect和AppScan的覆蓋率就比較低了。
表3 SQL注入的覆蓋率Tab.3 Coverage for SQL injection
下面對(duì)前面的一些分析做一下總結(jié):第一個(gè)就是,對(duì)于同一個(gè)Web應(yīng)用程序,不同的掃描器會(huì)檢測(cè)到不同類型的漏洞。SQL注入漏洞是所有掃描器都檢測(cè)到的唯一類型。只有掃描器AppScan檢測(cè)到了緩沖區(qū)溢出、用戶名和密碼泄露以及服務(wù)器端路徑暴漏等漏洞。WebInspect只檢測(cè)到了SQL注入漏洞。SQL注入漏洞是在所有受測(cè)試的Web應(yīng)用程序中發(fā)現(xiàn)的主要的漏洞類型。
而對(duì)于掃描器檢測(cè)結(jié)果中出現(xiàn)的誤報(bào)問題。實(shí)際上,掃描器中AWVS和AppScan的誤報(bào)比例已經(jīng)超過了30%。只有WebInspect表現(xiàn)出了0誤報(bào),但是該掃描器檢測(cè)到的3個(gè)SQL注入漏洞中就有1個(gè)是不能確定的(不能手動(dòng)確認(rèn)是一個(gè)真正的漏洞還是誤報(bào))。
掃描器WebInspect和AppScan有一個(gè)很低的覆蓋率,低于17%,然而掃描器AWVS表現(xiàn)出了高達(dá)67%的覆蓋率。請(qǐng)注意,這個(gè)數(shù)是一個(gè)樂觀的覆蓋率,因?yàn)槭軠y(cè)試的掃描器的實(shí)際覆蓋率肯定要比觀測(cè)到的數(shù)值低。
圖3體現(xiàn)出了每種類型的漏洞的最終分布,在移除了確認(rèn)的誤報(bào)但是要包括那些不確定的情形(例如:掃描器的樂觀估計(jì))。正如前文所述,主要的漏洞是SQL注入。在發(fā)現(xiàn)的漏洞中占據(jù)了80%。這是一個(gè)重要的發(fā)現(xiàn),因?yàn)榘l(fā)現(xiàn)在很多的案例中該高危漏洞都存在。
圖3 每種漏洞的分布Fig.3 Vulnerabilities distributed per type
本文進(jìn)行了一次試驗(yàn)探索,通過使用3款商業(yè)的漏洞掃描器對(duì)20個(gè)公開的Web應(yīng)用程序進(jìn)行安全漏洞檢測(cè),證實(shí)了許多Web應(yīng)用程序在部署之前沒有進(jìn)行合適的安全測(cè)試。對(duì)于挑選Web漏洞掃描器以對(duì)Web應(yīng)用程序進(jìn)行安全檢查并不是一件容易的事。首先,不同的掃描器會(huì)檢測(cè)到不同類型的漏洞。其次,存在的誤報(bào)也不容忽視,這嚴(yán)重影響到了檢測(cè)漏洞的精確性。最后,在某些情況下,檢測(cè)到的漏洞的覆蓋率是很低的,說明仍然有沒有檢測(cè)到的漏洞。而SQL注入漏洞在受測(cè)試的Web服務(wù)中是普遍存在的,因?yàn)樗鼈冋紦?jù)了所有檢測(cè)到的漏洞的80%左右。在今后的工作中,基于這次的試驗(yàn)研究,借鑒不同掃描工具形成優(yōu)勢(shì)互補(bǔ),促進(jìn)Web應(yīng)用程序的安全研究。
[1]秦廣贊,郭帆,徐芳,等.一種防SQL注入的靜態(tài)分析方法[J].計(jì)算機(jī)工程與科學(xué),2013,35(2):68-73.
[2]Jayakanthan N,Sivakumar R.A Novel Frame Work to Detect Malicious Attacks in Web Applications[J].International Journal Research in Computer Application&Information Technology,2014,2(1):23-28.
[3]馮谷,高鵬.新型SQL注入技術(shù)研究與分析[J].計(jì)算機(jī)科學(xué),2012,39(11):415-417.
[4]Navdeep Kaur,Parminder Kaur.Input Validation Vulnerabilities in Web Applications[J].Journal of Software Engineering,2014,8(3):116-126.
[5]符泉麟.基于OWASP的WEB應(yīng)用安全檢測(cè)與防范[J].微型電腦應(yīng)用,2012,28(8):51-53.
[6]Williams J,Wichers D.2013.OWASP TOP10-2013:The ten most critical web application security risks[BE/OL].http://www.owasp.org.cn/owasp-project/download/OWASPTop10 2013V1.2.pdf.
[7]Hossain Shahriar*,Sarah M.North,YoonJi Lee,Roger Hu.Server-side code injection attack detection based on Kullback-Leibler distance[J].Internet Technology and Secured Transactions,2014,5(3):240-253.
[8]賈文超,汪永益,施凡,等.基于動(dòng)態(tài)污點(diǎn)傳播模型的DOM XSS檢測(cè)漏洞[J].計(jì)算機(jī)應(yīng)用研究,2014,31(7):2119-2126.
[9]邢斌,高嶺,孫騫,等.一種自動(dòng)化的滲透測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2010,27(4):1384-1387.