池水明 闞歆煒 張旻
摘 要: 針對傳統(tǒng)SQL注入漏洞檢測方法準確率和效率無法達到很好平衡的問題,提出了一種基于Simhash文本相似性檢測的SQL注入漏洞檢測技術。使用特征值來進行網頁間的比較,提高了檢測的精度與效率,據(jù)此設計并實現(xiàn)了一個SQL注入漏洞檢測原型系統(tǒng)。實驗結果表明,該系統(tǒng)在檢測SQL注入漏洞時兼具了準確性與高效性。
關鍵詞: Simhash; SQL注入; Web漏洞檢測; 文本相似性
中圖分類號:TP309 文獻標志碼:A 文章編號:1006-8228(2014)03-03-03
0 引言
在當今社會中,隨著網絡規(guī)模的快速擴大和網絡技術的飛速發(fā)展,網絡已成為了人類獲得信息與服務的主流載體。越來越多的企事業(yè)單位及政府部門通過網絡給人們帶來快捷高效的服務。然而,由于計算機網絡的脆弱性,也隨之出現(xiàn)了大量的網絡漏洞,其中SQL注入漏洞是一種危害性非常大的漏洞,對該漏洞進行攻擊可能會破壞網絡應用的正常運行,泄露數(shù)據(jù)庫中的機密信息,甚至引發(fā)社會的混亂。
如何對動態(tài)網頁中存在的SQL注入漏洞進行檢測和防御一直是網絡安全領域關注的重點問題。針對目前已知的檢測方法準確率與效率難以兩全的情況,本文提出了一種基于Simhash文本相似性檢測的判定技術,設計并實現(xiàn)了相應的SQL注入漏洞檢測原型系統(tǒng)。
1 SQL注入漏洞檢測技術及現(xiàn)有網頁比較方法
目前的黑盒檢測技術主要通過對服務器返回頁面的比較來檢測網頁中的SQL注入漏洞。該方法的原理是通過構造兩個輸入并發(fā)送給服務器,這兩個輸入如果被服務器組裝成SQL語句交給數(shù)據(jù)庫執(zhí)行則會得到不同的查詢結果,從而返回不同的網頁,如果將返回的兩個網頁的內容進行比較,發(fā)現(xiàn)存在差異,就可以確認該輸入項存在SQL注入漏洞。
因此,如何快速并準確地比較出返回網頁間的差異程度就成為了非常關鍵的問題,該比較方法也決定了整個漏洞檢測技術的準確率與效率,因此研究出一個高效的網頁比較方法是十分有必要的。目前,在檢測SQL注入漏洞中所使用的比較服務器所返回網頁間差異的方法主要有以下三種。
⑴ 根據(jù)返回的HTTP狀態(tài)碼和網頁內容長度進行比較
這種方法是最快和最方便的,無需對返回的內容進行處理即可得到比較結果。但是其比較的準確率相當?shù)?,由于完全不關注返回網頁的內容,因此在很多情況下當網頁內容完全不相同而只是長度接近也會被誤判為相似。
⑵ 根據(jù)返回頁面中是否存在關鍵字進行比較[1]
這種方法速度也很快,而且比較方式十分簡單,只要檢查返回的網頁內容中是否含有關鍵字即可。不過如何來選擇關鍵字是一個很大的問題,如果只采用有限的固定關鍵字,對于不同網站中的漏洞會有不同的比較效果,而只靠程序計算,又難以根據(jù)網頁內容即時確定關鍵字,并且選取不同的關鍵字也許會有不同的比較結果,導致結果的不確定性。
⑶ 根據(jù)網頁結構進行比較[2]
這種方法的實現(xiàn)是比較復雜的,首先需要將返回的網頁內容根據(jù)文檔結構及元素的嵌套關系建立網頁模型,然后再進行模型之間的比較。該方法對網頁間結構的變化比較敏感,適用性較強。不過由于需要進行網頁內容規(guī)范化預處理、建立模型、模型的相似性比較等操作步驟多,會消耗大量的時間來進行計算,因此效率并不高。
2 基于Simhash文本相似性檢測的網頁快速比較技術
由于以上的網頁比較方法在判斷結果的準確性和比較的效率上未能達到一個合理的平衡,針對這個問題,本文提出了一種基于Simhash文本相似性檢測的網頁快速比較技術。
SimHash是一種目前公認效果較好的近似文本檢測算法,它是一種對高維數(shù)據(jù)進行概率降維的方法,能夠將高維的向量映射為位數(shù)較小且固定的指紋,被廣泛用于搜索引擎中的網頁去重部分。傳統(tǒng)的Hash函數(shù)能夠將一樣的文本生成一樣的Hash函數(shù),但是通過Simhash算法,內容差不多相同的文本所得到的特征值也比較相近。因此可以使用Simhash算法來計算出一個網頁內容的特征值,然后通過比較兩個網頁的特征值的相近程度來判斷它們是否相似。使用該方法來比較服務器返回頁面的主要流程包括:首先提取服務器返回頁面的HTML文檔并進行分詞處理,然后使用SimHash算法計算出被分詞后的文檔的特征值,最后對網頁間的特征值進行比較,以判斷網頁是否相同。
2.1 HTML文檔分詞處理
HTML是一種用于描述網頁文檔結構的超文本標記語言,它通過標記符號來標記要顯示在網頁中各個部分的內容,每對符號表示不同的意義,用來將網頁分成不同的邏輯結構。由于SimHash算法計算特征值的單位是字符串中的一個個詞,因此要計算出服務器返回的HTML文檔的特征值,就需要對該文檔根據(jù)HTML格式和分隔符來進行分詞操作,將一整段字符串拆分為以詞為單位的序列。
2.2 SimHash算法計算特征值
在得到一個經過分詞的HTML文檔后,就可以使用SimHash算法來計算該文檔的特征值了。該算法首先計算文檔中每一個詞的哈希值并將它們關聯(lián)到一個多維向量上,再將這個向量降維為一個固定位數(shù)的二進制值來作為特征值代表該文檔。對于一個被分詞后的字符串數(shù)組A,使用Simhash算法來計算它的精度為f的特征值的偽代碼如下:
1: m←length[A]
2: for i←1 to f
3: do V[i]←S[i]←0
4: for i←1 to m
5: do 使用哈希算法計算出A[i]的一個大小為f的二進制哈希值數(shù)組b
6: for j←1 to f
7: do if b[j]=1
8: then V[j]+1
9: else V[j]-1
10: for i←1 to f
11: do if V[i]>0
12: then S[i]←1
13: else S[i]←0
14: return 由S數(shù)組轉換而成的二進制碼
其中,f的大小決定了該算法計算出的特征值的精確度,且f越大,計算特征值S的速度越慢。
2.3 特征值比較
只要計算出兩個HTML文檔各自的特征值,就可以通過計算它們的海明距離,即兩個二進制值間不相同的位數(shù),來得到兩個HTML文檔之間的差異程度。該比較方式的優(yōu)點是計算速度極快,因此該比較方法所消耗的時間主要是在計算特征值時所消耗的,且返回的是一個數(shù)字,可以選取不同的閾值來限制所要求網頁間的相似程度。
3 基于Simhash文本相似性檢測的SQL注入漏洞檢測原型系統(tǒng)
為了驗證本比較技術用于SQL注入漏洞檢測時的有效性,設計并實現(xiàn)了一個基于Simhash文本相似性檢測的SQL注入漏洞檢測原型系統(tǒng),并在漏洞檢測方法上有所改進。
3.1 SQL注入漏洞檢測方法的改進
為了提高系統(tǒng)識別SQL注入漏洞的準確率,對檢測SQL注入漏洞的方法進行了一些改進。本方法的主要流程是:先對需要檢測的網頁發(fā)出一次正常的請求,返回的頁面內容記為a,然后對需要檢測的輸入項屬性的屬性值進行構造,產生兩個請求,其中,第一個請求中的參數(shù)如被數(shù)據(jù)庫直接運行,將會返回與正常頁面幾乎完全相同的頁面,該請求返回的頁面內容記為b,第二個請求中的參數(shù)如被數(shù)據(jù)庫直接運行,則不會返回需要的結果或是返回錯誤信息,該請求返回的頁面內容記為c。對于單個輸入項,服務器端可能有如下幾種情況:
⑴ 如數(shù)據(jù)庫直接使用該屬性值進行查詢,則a與b相似且a與c不同;
⑵ 如插入的測試值被過濾刪除,則a、b、c均相似;
⑶ 如插入的測試值被識別并返回錯誤頁面,則b與c相似,a與b及a與c均不同。
因此,當使用Simhash算法對a、b、c三者進行比較后,如發(fā)現(xiàn)a與b相似且a與c不同,即可判斷該屬性的屬性值被數(shù)據(jù)庫直接執(zhí)行了,也就檢測出了SQL注入漏洞。
3.2 原型系統(tǒng)模塊化設計
本文設計的基于Simhash文本相似性檢測的SQL注入漏洞檢測原型系統(tǒng)如圖1所示,其中五個主要模塊的功能如下。
⑴ 測試網址生成模塊
該模塊能夠根據(jù)待檢測的網頁信息來生成測試網址,由于數(shù)據(jù)庫中的數(shù)據(jù)分為數(shù)字型與字符型,因此需要根據(jù)不同的屬性類型來選擇合適的測試代碼添加到測試網址或是附加信息中去,保證數(shù)據(jù)庫運行這些語句時產生應有的效果。
⑵ HTML文檔獲取模塊
該模塊根據(jù)上個模塊所生成的測試網址來獲取需要進行比較的目標網頁的HTML文檔,包括正常網頁的HTML文檔和附加了測試代碼后返回的HTML文檔。在實現(xiàn)時,本系統(tǒng)使用了HttpClient來作為連接服務器的工具,通過GET和POST方法來獲取目標頁面的HTML文檔內容[3]。
⑶ HTML文檔分詞模塊
該模塊主要是對獲得的HTML文檔進行分詞處理,通過使用正則表達式來匹配使用“<”與“>”符號來作為邊界的標簽,而標簽以外的文本內容則根據(jù)文本分割符予以分割成詞。
⑷ 特征值計算模塊
該模塊使用Simhash算法來對分詞處理后的HTML文檔進行計算,產生一個固定位數(shù)的二進制特征值,該特征值包含了整個文檔的相關信息。
⑸ 漏洞判斷模塊
該模塊通過計算兩個HTML文檔特征值的海明距離來得到這兩個頁面間的差異程度。然后根據(jù)三個測試頁面間的比較結果來判斷出該頁面是否存在SQL注入漏洞。
[SQL注入漏洞檢測原型系統(tǒng)][待檢測網頁信息][測試網址生成模塊] [測試網址][HTML文檔獲取模塊] [HTML文檔分詞模塊][HTML文檔][特征值計算模塊] [特征值][漏洞判斷模塊] [判斷結果] [標簽序列]
4 實驗及結果分析
4.1 Simhash算法的有效性驗證
為了驗證通過Simhash算法來計算HTML文檔特征值的效率及準確度,我們進行了一個實驗,將計算大量HTML文檔的特征值并記錄所消耗的時間及特征值比較結果,該實驗的測試環(huán)境為:
⑴ CPU為Intel Pentium、2.6 GHz;
⑵ 內存為1 GB;
⑶ 操作系統(tǒng)為Windows XP SP3;
⑷ 使用Java實現(xiàn)算法及檢測程序。
該實驗結果表明:使用Simhash算法計算一個HTML文檔的特征值,包括分詞處理所消耗的時間在內,所消耗的時間與HTML文檔中包含的詞數(shù)呈線性關系,平均下來約為每10毫秒250詞,一般的網頁文檔中的詞數(shù)不超過1000個,因此計算一個網頁的特征值一般不會超過40毫秒,效率非常高。
對網頁間特征值的比較中,可以發(fā)現(xiàn),當特征值的位數(shù)為64時,特征值間海明距離小于3的網頁幾乎完全相同,海明距離大于5的網頁之間則有著較大的區(qū)別,顯然使用Simhash算法來檢測網頁間的相似程度是可行的。
4.2 檢測系統(tǒng)的有效性驗證
為了驗證基于Simhash文本相似性檢測的SQL注入漏洞檢測系統(tǒng)的優(yōu)越性,我們使用該系統(tǒng)對大量網頁進行了檢測,并對檢測結果的正確性進行手工驗證。結果發(fā)現(xiàn),該系統(tǒng)能夠快速有效地找出網頁中潛在的SQL注入漏洞,且誤報率低于5%。總體而言,本文的比較算法在準確率和效率上都有較好的表現(xiàn),能夠有效地解決其他SQL注入漏洞檢測工具在這兩者上無法兼顧的問題。
5 結束語
SQL注入漏洞檢測對于網絡應用的安全有著很高的價值,準確的檢測結果能夠使應用的漏洞被快速有效地清除。本文將基于Simhash文本相似性檢測的網頁快速比較技術應用于SQL注入漏洞的檢測過程中,同時提高了檢測的效率與和檢測結果的正確率。但檢測系統(tǒng)在對擁有簡易防注入措施的網絡應用的檢測中有可能判斷錯誤,產生誤報,在一定的程度上影響了檢測結果的正確率。因此還需要再強化系統(tǒng)對不同情況中存在的SQL注入漏洞的檢測能力,優(yōu)化系統(tǒng)的功能。
參考文獻:
[1] CLARKE J,黃曉磊,李化譯.SQL注入攻擊與防御[M].清華大學出版
社,2010.
[2] 張晨,汪永益,王雄等.基于網頁DOM樹比對的SQL注入漏洞檢測[J].
計算機工程,2012.18:111-115
[3] 姜麗華.防范SQL注入的應用分析[J].煤炭技術,2011.12:220-221