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