邊 莉,薛念明,張明巖,謝吉倫,林 秀
(山東魯能軟件技術有限公司,山東 濟南 250014)
隨著計算機應用技術的發展和信息化建設的深入,WEB技術得到飛速發展。目前以WEB技術為主的應用系統發展規模越來越大,相應地,針對WEB應用漏洞所發起的攻擊在各類攻擊中占據的比重也越來越高,帶來了巨大的危害[1-3]。其中以結構化查詢語言(Structured Query Language,SQL)注入為主體的注入漏洞已位居WEB 安全漏洞的榜首,其危害程度和普遍程度都呈現上升的趨勢[4-8]。攻擊者可利用SQL 注入漏洞獲取系統管理權限、竊取機密資源和敏感數據或上傳木馬病毒等,帶來極其嚴重的潛在威脅[9-10]。因此,SQL 注入漏洞檢測與防護是保證WEB應用系統安全必不可少的一個重要因素。
目前SQL 注入漏洞檢測技術分為自動化掃描和手工滲透兩種方式。自動化掃描工具主要由網絡爬蟲和滲透測試兩部分組成。首先利用網絡爬蟲搜索目標系統鏈接到服務器的統一資源定位符(Universal Resource Locator,URL)列表,然后對其進行滲透測試。該方式能夠快速檢測SQL 注入漏洞,但爬蟲所得測試數據的覆蓋率影響檢測能力。由于目前爬蟲技術的限制和不穩定性,大部分掃描工具的誤報和漏報概率都比較大,檢測準確率較低[11-16]。手工分析需要測試者對當前系統有比較深入的了解,從中過濾出目標測試點,采取手工的方式逐條測試。雖然此種可以保證漏洞檢測的準確度,但對測試人員技術要求較高,且檢測過程需要消耗大量時間導致效率比較低下[17-20]。
通過分析SQL 注入漏洞檢測技術,可以得知SQL 注入具有非常復雜和多變的攻擊方式[21],而現有的檢測技術并不能很好地滿足應用程序的需求。基于此,提出一種精準SQL 注入漏洞批量檢測方案。通過此種方案可確保檢測的高效性和準確性,并能最大限度地降低漏測和誤報情況。
應用程序通過SQL 語句完成與數據庫服務器的交互。未對用戶輸入進行有效的驗證和過濾是SQL注入漏洞產生的主要原因,攻擊者通過控制應用程序發送給服務端的SQL 輸入,并將該輸入解析為執行代碼,進而獲取較高的數據庫操作權限,實現對數據庫的任意操作,達到控制后臺服務器、獲取重要數據信息的目的[22-25]。
圖1 顯示了普通用戶和SQL 注入攻擊者訪問同一個系統的對比。通過圖1 可方便理解SQL 注入原理。登錄時程序使用了Java 數據庫連接(Java Data Base Connectivity,JDBC)查詢,且開發人員使用了語句拼接的方式:select * from user where name=‘$username’and password=‘$password’。

圖1 普通用戶和SQL注入攻擊者訪問系統
對于普通用戶的輸入:$username=admin,$password=admin 此時執行的SQL 語句為select *from user where name=‘admin’and password=‘admin’;服務端正常返回user 表中用戶名為admin,密碼為admin的用戶信息。
對于攻擊者的輸入:$username=admin’--,$password=123 此時程序執行的SQL 語句變為select* from user where name=‘admin’--’and password=‘123’;由于用戶名中的單引號與SQL 語句中前半部分的單引號相匹配,且SQL 后半部分內容因“--”進行了注釋,其結果就是只根據用戶名就能查出user 表中admin 用戶的所有信息。若數據庫中的密碼是用明文顯示的,則可直接查出該用戶的密碼,攻擊者就可以用該用戶的賬號進行進一步的操作。
針對WEB 應用程序特點,提出了一種精準SQL注入漏洞批量檢測方案。該方案集數據定制化收集和批量自動執行于一體,充分結合自動化掃描和人工滲透分析的優點,可兼顧檢測效率和準確性,并且可以減少漏測和誤報情況的發生。
精準SQL 注入漏洞檢測能夠有效地快速識別被測系統中的SQL 注入漏洞,同時結合響應分析設計,可依據測試過程數據精準定位注入點。相應的架構設計方案如圖2所示。

圖2 批量SQL注入漏洞檢測架構
1)請求采集與存儲。通過二次開發的代理工具對瀏覽器進行監聽,實現對請求數據的精準采集并自動本地存儲。
2)批量執行漏洞檢測。集成SQLMAP 漏洞檢測工具,SQL 注入檢測規則定制模塊自定義導入payload,調用SQL 注入批量檢測執行模塊和測試結果數據存儲模塊,完成批量漏洞檢測執行,并對響應數據進行記錄和存儲。
這時,餐廳的大門突然打開,整個屋里瞬間鴉雀無聲。我回過頭去看,一個年輕人走了進來,周圍一片死寂,連一根針掉到地上都能聽到。他臉上到處都是穿孔,多到數不過來,一頭長發又黑又油膩。但讓他看起來很有威脅的還不是這些,而是他掃視一切時的那種冷酷眼神。
3)結果分析。通過關鍵字掃描,對測試結果進行分析,定位存在SQL 注入漏洞的目標數據請求位置。
依此綜合實現SQL 注入漏洞的分析、核查、注入等功能。該SQL 注入漏洞檢測模型具有實現代價小、運行效率高,并且誤報率低的優勢,可有效提升SQL注入漏洞的檢測能力。
該過程的關鍵在于通過對代理工具Fiddler進行二次開發以高效準確地記錄待測請求數據。
Fiddler 是一款HTTP 協議調試代理工具,它可以監視和記錄客戶端和服務器之間的所有通信數據和請求信息。Fiddler 的代理功能是實現批量漏洞檢測的前提條件,測試者只需要通過前端訪問WEB 應用程序的各個輸入點,Fiddler 便可通過監聽準確收集和記錄測試請求數據,為后續批量滲透檢測提供數據輸入,具體操作步驟及原理如圖3所示。

圖3 采用Fiddler代理工具進行請求數據采集與本地存儲的原理
1)對Fiddler 代理工具進行二次開發,修改Fiddler Script Editor 文件,添加命令行save 指令代碼:實現格式化數據請求文件保存類型,設置本地存放路徑以及對目標請求數據的一鍵保存功能。
2)調試開發完成后,打開Fiddler 對瀏覽器進行監聽,用戶可根據業務需求自定義Fiddler 過濾器規則(包括域名過濾、請求類型過濾及其相應狀態過濾)監聽目標請求數據。
3)手工瀏覽測試站點,此時Fiddler 會自動記錄根據步驟2)規則過濾后的所有客戶端與服務器通信的HTTP/HTTPS請求。
4)確保遍歷應用程序的每項功能后,根據步驟1)的命令行指令save,導出Fiddler 記錄的所有目標請求數據。
使用二次開發后的Fiddler的代理功能是測試流程的關鍵步驟,記錄并保存的數據請求皆為目標站點請求,有效提高了測試準確率;目的請求數據按照特定文件格式保存,為滲透工具提供數據輸入,有效提高了測試效率。此種方法可以很好地彌補自動化掃描工具在測試數據收集方面的缺點。
由Fiddler 獲取的請求數據,通過有效性檢查后連接SQLMAP 批處理檢測程序,完成檢測規則和配置文件的定義和配置后,由檢測程序向目標請求數據進行SQL注入滲透檢測。
1)數據有效性檢查。從Fiddler 中收集到的每一個數據包都包含一個完整的請求過程,若應用程序是需要登錄才能訪問的,則應在滲透測試開始前檢查請求中的會話信息是否有效,否則應將有效的會話信息替換到每個請求文件中,如圖4所示。

圖4 數據有效性控制和SQLMAP集成與批處理
2)SQLMAP集成與批量檢測。首先集成SQLMAP開源檢測工具,通過調用SQLMAP 檢測庫中的既有掃描規則和自定義payload 進行檢測規則定制。然后在配置文件中對請求執行路徑以及相關數據庫信息進行配置,根據配置信息啟動批量檢測程序從而實現對目標數據請求的批量SQL 注入檢測。為了提高執行效率,該過程采用了多進程并發模式進行批量滲透執行,充分利用系統資源,提高了程序的執行速度,如圖4所示。
同時SQL 注入批量檢測執行過程中產生的中間數據會自動保存在本地,每個數據請求文件對應一個檢測結果文件,且有唯一編號標識。例如1_Request.txt 數據請求文件對應檢測結果文件為1_Request.txt-------Result.txt。
結果分析模塊對SQL 注入批量檢測結果進行關鍵字掃描,確定存在SQL 注入漏洞的檢測結果文件,并根據編號標識定位到對應的數據請求文件,從而快速定位到存在漏洞的系統URL 地址,如圖5 所示。定位到注入點后可做一步滲透攻擊,從而可獲取數據庫表結構和表數據等。根據測試結果給出系統加固修復建議。

圖5 結果分析與漏洞定位模塊操作原理
為了證實新型SQL 注入測試方案的可行性,在內網搭建測試環境部署3個不同復雜度的WEB應用信息系統,分別使用精準SQL 注入漏洞批量檢測方案、自動化掃描工具APPSCAN 和手工滲透3 種方案對3 個WEB 應用信息系統進行測試。其中,精準SQL 注入漏洞批量檢測方案對項目2 測試執行過程如圖6所示。


圖6 精準SQL注入批量檢測方案執行過程
1)使用二次開發的Fiddler 作為代理工具,收集并格式化保存目標請求數據;
2)配置XML文件,集成SQLMAP工具;
3)實現批處理,對有效的目標請求文件執行批量SQL注入檢測;
4)結果分析和SQL注入點定位。
對測試結果進行統計分析,得到3種方案的SQL注入檢測準確率和執行效率對比結果。其中檢測準確率是指檢測SQL 注入漏洞數量與實際SQL 注入漏洞數量的比值。執行時間是一次全量應用系統SQL注入漏洞檢測所耗費的時間。對比結果如表1 和表2所示。

表1 3種方案漏洞檢測準確率 單位:%

表2 3種方案漏洞檢測執行時間 單位:min
由測試結果可知,精準SQL 注入漏洞批量檢測方案可快速檢測到WEB 應用程序的SQL 注入漏洞;自動化工具因受爬蟲技術限制,并不能準確定位漏洞的注入點,誤報和漏測率很高;而手工測試在一般的項目測試中,因耗時太長一般不予以使用。
由此得出基于代理模式的SQL 注入檢測方法不僅極大地提高了檢測效率,更能提高檢測準確率,保證測試質量。
由于現有的自動化掃描工具受限于檢測模式單一、爬蟲數據收集不穩定等因素的影響,漏測和誤報現象較為嚴重。基于此,提出一種精準SQL 注入批量漏洞檢測方案。此方案一方面能保證待測數據的穩定性和全面性,減少對數據輸入點的漏測現象;另一方面,借助FIDDLER 監聽技術,準確收集和記錄測試請求數據,為后續批量滲透檢測提供數據輸入,確保了漏洞檢測的高效性。
SQL注入是WEB應用程序威脅最大的安全漏洞之一,應當結合系統業務特點和安全事件,進一步優化安全檢測技術,這對于促進WEB 應用安全質量在各個行業的推廣,具有積極作用和戰略意義。同時應不斷深入學習漏洞檢測技術,科學結合現有工具并實現優勢互補,適應信息安全的動態發展趨勢。