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