周康成


摘 要:隨著互聯網的快速發展,網絡安全顯得格外重要。Web應用漏洞掃描工具能夠有效地檢測出Web應用漏洞,防止黑客利用漏洞。但目前的Web應用漏洞掃描工具大多是單機應用,掃描效率不高。本文設計一種新的Web應用漏洞掃描系統架構,將以往的單機應用分解為多個模塊,每個模塊部署在不同的計算機上,利用多臺計算機的計算能力來提高掃描效率。
關鍵詞:Web漏洞;系統架構;網絡安全
文章編號:2095-2163(2019)04-0177-03 中圖分類號:TP311.1 文獻標志碼:A
0 引 言
Web應用漏洞中最常見且危害較大的2類安全漏洞是SQL注入漏洞和XSS跨站腳本漏洞。目前的一些開源掃描工具主要是針對這2類安全漏洞進行安全掃描。在研究與設計Web應用漏洞掃描工具的方向上,許多學者已經做了大量研究,研究的主要目的就是為了解決Web應用漏洞掃描工具的掃描效率不高、漏洞誤報率高和掃描覆蓋不完全等問題。文獻[1]考慮到了HTML5的一些新的特性,在系統設計上,對這些新特性提供了相應的支持。文獻[2]通過在工具中集成Webkit來支持解析JavaScript腳本,解決網頁動態渲染的問題,并利用分布式技術來提高掃描效率。文獻[3]提出了基于爬蟲和特征識別的漏洞檢測模型,目的是為了解決注入點獲取不準確等問題。文獻[4]采用了Fuzzing測試技術,并且在系統實現上考慮到了反爬蟲機制。本文在研究總結前人工作的基礎上,提出了一種新的Web應用漏洞掃描系統架構,提高掃描效率。深入分析了各個模塊之間的依賴關系,利用中間件將單機應用進行分解,將分解后的各個模塊部署在不同的計算機上,利用多臺計算機的計算能力來解決單機系統掃描效率不高的問題。
1 SQL注入漏洞
SQL注入漏洞是最常見Web應用漏洞之一,也是危害較大的一種Web應用漏洞。
1.1 產生原因
Web應用分為前端和后端,后端數據通過前端展示給用戶,后端接收前端發送過來的數據,進行處理、查詢,然后將結果返回到前端。一般情況下,后端如果要獲取相應的數據,就需要將用戶輸入的數據拼接成SQL語句,在數據庫中執行。如果在這個過程中,前端提交了包含惡意數據的信息,后端對用戶的輸入信息不做任何檢測或者檢測不徹底,就將用戶數據拼接到SQL語句中,那么就會造成SQL注入攻擊。
1.2 檢測方法
SQL注入漏洞檢測一般是采用黑盒測試的辦法,通過構造各種各樣的HTTP請求包,這些HTTP請求包中包含的參數在SQL語句中具有特殊意義,當后端接收到這類HTTP請求包,并作出響應,根據后端的響應數據來判斷該Web站點是否存在SQL注入漏洞。一般的檢測步驟如下:
(1)提取URL鏈接中的參數信息。
(2)將參數值替換為精心設計的具有特殊意義的字符串。
(3)利用修改后的參數值構造HTTP請求數據包,并發送請求至后端。
(4)接收后端返回的響應數據,并分析響應,判斷是否存在漏洞。
(5)重復步驟(1)。
2 XSS漏洞
2.1 產生原因與分類
XSS跨站腳本漏洞根據不同的產生原因,主要分為3類:基于DOM的跨站腳本漏洞、反射型XSS跨站腳本漏洞和存儲型XSS漏洞。
(1)基于DOM的跨站腳本漏洞。是一種基于DOM文檔對象模型的漏洞,惡意的JavaScript腳本在瀏覽器中被執行,獲取和修改DOM中的數據。
(2)反射型XSS跨站腳本漏洞。后端對用戶提交的數據沒有做過濾操作或過濾不完全,就直接將數據提交給其它用戶,而這些數據中包含了惡意的JavaScript腳本,從而產生反射型XSS漏洞。
(3)存儲型XSS漏洞。這種類型的XSS漏洞危害高于前兩者,而且更加難以被發現,后端對用戶提交的數據沒有做過濾或過濾不完全,就將這些數據存儲在數據庫中,當其它用戶訪問站點,獲取這些數據時,就會造成存儲型XSS漏洞。
2.2 檢測方法
XSS漏洞檢測方法類似于SQL注入漏洞檢測方法,均是采用黑盒測試方法,通過構造HTTP請求包,發送到后端,分析后端返回的響應數據來判斷是否存在XSS漏洞。XSS漏洞檢測的一般步驟如下:
(1)提取頁面和URL鏈接中的注入點。
(2)將參數值替換為精心構造的字符串,這些字符串中包含JavaScript腳本。
(3)構造HTTP請求包,并發送至后端。
(4)接收后端的響應數據,根據響應數據判斷是否存在XSS跨站腳本漏洞。
(5)重復步驟(1)。
3 掃描系統架構設計與分析
Web應用漏洞掃描系統一般分為爬蟲階段和檢測階段。通過網絡爬蟲獲取目標站點所有的URL鏈接,并分析提取出URL鏈接和Web頁面中的注入點,然后在檢測階段中,利用精心構造好的字符串去替換參數值,構造HTTP請求包,提交給后端,根據后端返回的響應數據分析判斷是否存在Web漏洞。在深入分析了這2個階段之后發現,爬蟲階段與檢測階段具有較弱的依賴關系,檢測階段只需要給出待檢測的URL鏈接即可,爬蟲階段也不依賴于檢測階段,而目前已有的Web應用漏洞掃描工具將爬蟲模塊與檢測模塊耦合在一個單體應用中,單機系統的計算能力有限,無法大幅度提高系統掃描效率。
針對上面提出的問題,本文設計實現了一種新的Web應用漏洞掃描系統,該系統利用爬蟲模塊與檢測模塊不具有強依賴關系,采用消息中間件將爬蟲模塊與檢測模塊分離,爬蟲模塊與檢測模塊可分別部署在不同的計算機上,爬蟲模塊負責爬取站點所有的URL鏈接,并將可能存在注入點的URL鏈接的相關信息提交到消息中間件中;檢測模塊開啟一個線程監聽消息中間件,當消息中間件中存在待掃描的URL鏈接時,會主動從消息中間件中拉取URL鏈接的相關信息,并放入本地的阻塞隊列中。作為一個掃描任務,阻塞隊列中任務由線程池中的線程去完成。系統整體的架構如圖1所示。
整個系統采用B/S架構,瀏覽器端用于接收用戶輸入,提交掃描任務,并實時向用戶展示最新的掃描情況。后端主要分為爬蟲模塊、消息中間件以及檢測模塊,可分別部署在3臺不同的計算機上。
3.1 爬蟲模塊設計與實現
爬蟲模塊的主要功能是負責爬取Web站點所有的URL鏈接,并將可能存在注入點的URL鏈接提交至消息中間件中。其部分核心代碼如下。
SimplePageProcessor processor=new SimeplePage Processor();
Spider spider=Spider.create(processor);
spider.run();
public void send(String rootUrl,String url){
if(hasInjectionPoint(url)){
rabbitTemplate.convertAndSend(rootUrl,url);
}
}
3.2 檢測模塊的設計與實現
本文設計的Web應用漏洞掃描系統主要對SQL注入漏洞和XSS跨站腳本漏洞進行掃描。
檢測模塊會開啟一個線程監聽消息中間件,當消息中間件中存在待掃描的URL時,就會主動從消息中間件中獲取該URL及其相關信息,并封裝成DetectTask對象,DetectTask對象實現了Runnable接口,最后將該對象提交的線程池的阻塞隊列中,由線程池中的線程去執行檢測功能,部分核心代碼如下。
public void run(){
while(true){
String message[WB]=rabbitTemplate.get(QUEUE
[DW]_NAME);
DetectTask task=new DetectTask(message);
service.excute(task);
}
}
4 系統測試
本文設計的系統測試方案分為2大部分,第一部分為功能測試,主要目的是為了驗證各個模塊能夠完成預期的功能;第二部分為性能測試,測試系統在模塊分離前后的掃描時間。
4.1 功能測試
4.1.1 前端展示模塊
前端展示模塊的預期效果:并能正常將用戶輸入的掃描任務提交至后端,能實時展示后端掃描情況。
測試結果:前端成功將任務提交至后端,并實時展示后端掃描情況,測試通過。
4.1.2 爬蟲模塊
爬蟲模塊的預期效果:能夠對目前站點的URL鏈接進行爬取;能夠與消息中間件建立通信,并提交URL鏈接及相關信息至消息中間件。
測試結果:能夠正常執行爬蟲功能,并且將待掃描的URL鏈接成功提交至消息中間件中,測試通過。
4.1.3 檢測模塊
檢測模塊的預期效果:能夠檢測出部分SQL注入漏洞和XSS跨站腳本漏洞;能夠與消息中間件建立通信,從而獲取待掃描的URL鏈接。
測試結果:能夠從消息中間件中獲取待掃描的URL鏈接,并完成檢測功能,測試通過。
4.2 性能測試
主要測試模塊分離對系統掃描時間的影響。對同一Web站點,分別采用單體應用與模塊分離后的系統進行掃描。
測試機器選擇2個4G內存,第八代I5處理器,消息中間件RabbitMQ部署在2G內存,單核CPU上。
為了進行測試,在本地部署了一個Web站點,用于掃描。測試結果見表1。
5 結束語
本文研究了SQL注入漏洞和XSS漏洞的產生原因和檢測方法,分析了目前Web應用漏洞掃描工具存在的不足,針對存在的問題,設計了一種新的Web應用漏洞掃描系統。通過消息中間件將單體應用中的2個模塊進行分離,利用多臺計算機的計算能力提高掃描效率,突破單體掃描系統的局限性。
參考文獻
[1]吳柳. 基于HTML5的跨站腳本攻擊檢測技術研究與實現[D]. 北京: 北京郵電大學,2016.
[2] 孫曉飛. Web應用漏洞分析與檢測的研究[D]. 北京:北京郵電大學,2016.
[3] 姬碩. 基于爬蟲與分布式技術的Web應用漏洞掃描工具的研究與設計[D]. 北京:北京郵電大學,2016.
[4] 路艷華. Web應用漏洞檢測系統研究與設計[D]. 西安:西安電子科技大學,2014.