国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于代理模式的SQL注入過(guò)濾方法①

2018-02-07 02:41韓宸望饒緒黎
關(guān)鍵詞:語(yǔ)句應(yīng)用程序解析

韓宸望,林 暉,饒緒黎,黃 川

1(福建師范大學(xué) 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,福州 350117)2(福建師范大學(xué) 福建省網(wǎng)絡(luò)安全與密碼技術(shù)重點(diǎn)實(shí)驗(yàn)室,福州 350117)3(福州職業(yè)技術(shù)學(xué)院 信息技術(shù)工程系,福州 350108)

隨著Web 3.0時(shí)代的到來(lái)以及B/S模式的迅速發(fā)展,Web技術(shù)在許多領(lǐng)域都得到了廣泛的應(yīng)用,且已成為世界經(jīng)濟(jì)發(fā)展中的關(guān)鍵技術(shù)之一[1].與此同時(shí),Web的安全問題也日趨嚴(yán)峻,Web安全威脅已經(jīng)成為網(wǎng)絡(luò)安全威脅最主要的來(lái)源之一.因此,對(duì)Web安全的研究也成為了目前網(wǎng)絡(luò)安全領(lǐng)域的重點(diǎn)和熱點(diǎn)[2].其中,SQL注入作為Web應(yīng)用程序面臨的最普遍、最高危的攻擊之一,連續(xù)多年位列OWASP(開放式Web應(yīng)用程序安全項(xiàng)目,Open Web Application Security Project)年度十大攻擊行為,并且多次排名第一.

基于上述分析,本文結(jié)合URL長(zhǎng)度、訪問頻率及SQL語(yǔ)法樹,提出了一種新的SQL注入過(guò)濾方法——LFS (length-frequency-SQL syntax tree)過(guò)濾方法.該方法包括學(xué)習(xí)和過(guò)濾兩個(gè)階段.學(xué)習(xí)階段在安全的環(huán)境下進(jìn)行,通過(guò)爬蟲和數(shù)據(jù)庫(kù)代理,根據(jù)用戶提供的爬蟲啟始數(shù)據(jù)進(jìn)行爬取,生成URL和SQL語(yǔ)句的映射表.過(guò)濾階段工作在現(xiàn)實(shí)環(huán)境下,通過(guò)檢測(cè)長(zhǎng)度、連接頻率、SQL語(yǔ)法樹特征,以此來(lái)檢測(cè)SQL注入攻擊.仿真實(shí)驗(yàn)及結(jié)果分析表明LFS方法相較于傳統(tǒng)的關(guān)鍵字過(guò)濾和正則表達(dá)式過(guò)濾能夠更有效的防止SQL注入攻擊.

1 相關(guān)工作

針對(duì)SQL注入攻擊檢測(cè),國(guó)內(nèi)外研究人員已經(jīng)做了大量的研究工作,并且取得了一定的研究成果.張燕等[3]提出了一種基于數(shù)據(jù)挖掘技術(shù)的SQL注入攻擊檢測(cè)方法.該方法首先收集了數(shù)據(jù)庫(kù)日志中內(nèi)部查詢樹;然后,根據(jù)查詢樹的語(yǔ)義、語(yǔ)法特征和查詢樹類型提取查詢樹的特征向量;最后,根據(jù)多項(xiàng)式核函數(shù)SVM對(duì)這些特征向量進(jìn)行分類,從而實(shí)現(xiàn)SQL攻擊檢測(cè).

黃保華等人[4]提出了一種SQL語(yǔ)句塊摘要樹模型,用于檢測(cè)SQL注入攻擊.基于該模型的SQL注入檢測(cè)對(duì)SQL語(yǔ)句序列進(jìn)行了檢測(cè),有效地提高了攔截率,但是在數(shù)據(jù)庫(kù)連接共享的環(huán)境中,該模型由于需要對(duì)順序執(zhí)行的SQL序列進(jìn)行檢測(cè)導(dǎo)致實(shí)施起來(lái)存在一定的困難.趙宇飛等人[5]根據(jù)SQL注入攻擊的網(wǎng)絡(luò)流量與正常用戶請(qǐng)求的網(wǎng)絡(luò)流量有較大的區(qū)別,以網(wǎng)絡(luò)流量分析的角度,提出了LFF(length-frequencyfeature)檢測(cè)方法.張志超等人[6]結(jié)合人工神經(jīng)元網(wǎng)絡(luò),提出了一種基于人工神經(jīng)元網(wǎng)絡(luò)的SQL注入漏洞的分析模型.該模型利用人工神經(jīng)網(wǎng)絡(luò)算法對(duì)用戶輸入的SQL語(yǔ)句進(jìn)行檢測(cè),從而判斷用戶是否在進(jìn)行SQL注入攻擊.

王偉平等人[7]利用正則表達(dá)式對(duì)SQL注入攻擊的特征進(jìn)行描述,并提出了基于正則表達(dá)式的SQL注入攻擊過(guò)濾方案.該方案與關(guān)鍵字過(guò)濾相比,具有更高的識(shí)別率和較低的誤報(bào)率.Ivan Ristc開發(fā)的開源項(xiàng)目ModSecurity[8]和Roesch M開發(fā)的入侵檢測(cè)軟件Snort[9]同樣根據(jù)SQL注入攻擊的特征定制SQL注入攻擊的特征規(guī)則集,并以此過(guò)濾用戶的輸入來(lái)抵擋SQL注入攻擊.田玉杰等人[10]提出了一種基于分類的SQL注入攻擊雙層防御模型.該模型采用了基于Http請(qǐng)求分類的用戶輸入過(guò)濾,以此降低用戶輸入過(guò)對(duì)正常數(shù)據(jù)的誤報(bào)率.應(yīng)用SQL語(yǔ)法結(jié)構(gòu)比較和于參數(shù)化分類的動(dòng)態(tài)查詢匹配,從而提高了用戶輸入過(guò)濾的攔截率和語(yǔ)法結(jié)構(gòu)比較的檢測(cè)效率.

Ain Zubaidah Mohd Saleh等人[11]將提出了一種Web應(yīng)用程序漏洞檢測(cè)方法.該方法結(jié)合了Boyer-Moore字符串查找算法,能夠有效地檢測(cè)多種Web安全漏洞,例如SQL注入,XSS等Web安全漏洞.Nency Patel等人[12]改進(jìn)了Aho-Corasick模式匹配算法,并將該算法應(yīng)用于SQL注入攻擊防御.傳統(tǒng)的防止SQL注入的模式匹配往往采用靜態(tài)的模式匹配算法.但是改進(jìn)的Aho-Corasick模式匹配算法能夠捕捉SQL注入引起的新異常模式,并將反復(fù)出現(xiàn)的新異常模式自動(dòng)加入模式匹配庫(kù)中.Jemal Abawajy等人[13]針對(duì)SQL注入攻擊在RFID系統(tǒng)中的危害,提出了一種基于策略的SQL注入攻擊檢測(cè)方法.該方法通過(guò)制定合法的SQL查詢語(yǔ)句規(guī)則形成規(guī)則庫(kù),之后對(duì)RFID系統(tǒng)傳輸?shù)臄?shù)據(jù)進(jìn)行攔截驗(yàn)證,并根據(jù)合法的SQL查詢語(yǔ)句規(guī)則庫(kù)進(jìn)行檢測(cè),以此來(lái)防御SQL注入.

同時(shí),還可以通過(guò)采用參數(shù)化查詢,在代碼層對(duì)SQL注入攻擊進(jìn)行防御[14].使用參數(shù)化查詢?cè)L問數(shù)據(jù)庫(kù),能夠防止SQL注入,使Web應(yīng)用程序更加安全.此外,通過(guò)對(duì)存儲(chǔ)過(guò)程的訪問權(quán)限的正確配置也能夠防止SQL注入,提高系統(tǒng)安全性.存儲(chǔ)過(guò)程將一組SQL語(yǔ)句集編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,以此來(lái)提高安全性、防止SQL注入.例如,黃龍軍[15]在網(wǎng)上考試系統(tǒng)中利用SQL Server存儲(chǔ)過(guò)程有效地防御SQL注入攻擊,提高了系統(tǒng)的安全性.

2 SQL注入過(guò)濾方法概述

2.1 SQL注入攻擊概述

SQL注入攻擊是一種由攻擊者通過(guò)影響應(yīng)用程序向后臺(tái)數(shù)據(jù)庫(kù)傳遞的SQL查詢而引發(fā)的攻擊.SQL注入攻擊是一種通過(guò)操縱Web輸入來(lái)修改后臺(tái)SQL語(yǔ)句以利用代碼進(jìn)行攻擊的技術(shù)[16].雖然不同種類的SQL注入的攻擊方式有所區(qū)別,但它們的原理和過(guò)程基本相同.SQL注入攻擊過(guò)程和原理如圖1所示.

攻擊者在登錄界面使用賬號(hào)admin’和密碼admin進(jìn)行登錄.客戶端瀏覽器向Web服務(wù)器發(fā)送URL為:http://www.test.com/login.asp?username=ad min’&password=admin的請(qǐng)求.之后Web服務(wù)器向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送SQL語(yǔ)句,該SQL語(yǔ)句為:select * from accounts where username=’admin’ and password=’admin’.數(shù)據(jù)庫(kù)執(zhí)行該SQL語(yǔ)句后向Web服務(wù)器返回敏感信息,并最終由Web服務(wù)器將該敏感信息轉(zhuǎn)發(fā)給了客戶端瀏覽器,從而被攻擊者獲取.

圖1 SQL注入攻擊過(guò)程

2.2 SQL注入過(guò)濾方法

對(duì)于特定的Web應(yīng)用程序,其發(fā)送的HTTP請(qǐng)求報(bào)文的URL和參數(shù)與Web應(yīng)用程序收到請(qǐng)求報(bào)文執(zhí)行的SQL語(yǔ)句存在一定的映射關(guān)系.并且任何擁有SQL攻擊特征的輸入都將改變?cè)械腟QL語(yǔ)句的語(yǔ)法結(jié)構(gòu).因此若用戶輸入構(gòu)成的SQL語(yǔ)句的語(yǔ)法結(jié)構(gòu)和期望中的語(yǔ)法結(jié)構(gòu)不一致,則該輸入為SQL注入.本文方法基于上述前提,提出了一種新的SQL注入過(guò)濾方法,該方法將SQL注入防護(hù)分為兩個(gè)階段:學(xué)習(xí)階段和過(guò)濾階段.

2.2.1 學(xué)習(xí)階段

學(xué)習(xí)階段工作在安全環(huán)境下,利用爬蟲和數(shù)據(jù)庫(kù)代理,根據(jù)用戶提供的啟始文件(XML文件),該文件包含爬蟲的啟始數(shù)據(jù),對(duì)該Web應(yīng)用程序進(jìn)行爬取,生成該Web應(yīng)用程序的HTTP請(qǐng)求報(bào)文中的URL和Web應(yīng)用程序執(zhí)行的SQL語(yǔ)句的映射表(XML文件).其運(yùn)行環(huán)境如圖2所示.

圖2 學(xué)習(xí)階段運(yùn)行環(huán)境

以圖1為例,假設(shè)用戶發(fā)送的URL為http://www.test.com/login.asp?username=admin&password=123456&type=admin,則之后Web應(yīng)用程式執(zhí)行的SQL語(yǔ)句為:select * from accounts where username=‘a(chǎn)dmin’ and password=‘123456’ and type=‘a(chǎn)dmin’.過(guò)濾系統(tǒng)先對(duì)該SQL語(yǔ)句進(jìn)行解析生成對(duì)應(yīng)的語(yǔ)法樹,之后將語(yǔ)法樹的結(jié)點(diǎn)與爬蟲發(fā)出的HTTP報(bào)文中的數(shù)據(jù)進(jìn)行對(duì)比,其數(shù)據(jù)發(fā)出時(shí)必須不重復(fù),并且不包含有SQL關(guān)鍵字如select,and,or等.若數(shù)據(jù)一致并且該數(shù)據(jù)在原SQL語(yǔ)句中被‘’(一對(duì)單引號(hào))所引用,則該數(shù)據(jù)類型為字符型,將SQL語(yǔ)句中對(duì)應(yīng)的數(shù)據(jù)改為該數(shù)據(jù)對(duì)應(yīng)的Http數(shù)據(jù)報(bào)文中的參數(shù)名.若數(shù)據(jù)一致,該數(shù)據(jù)為數(shù)字并且在原SQL語(yǔ)句中沒有被‘’所引用,則該數(shù)據(jù)類型為數(shù)字型,將SQL語(yǔ)句中對(duì)應(yīng)的數(shù)據(jù)改為該數(shù)據(jù)對(duì)應(yīng)的Http數(shù)據(jù)報(bào)文中的參數(shù)名并在該參數(shù)名兩側(cè)加上*符號(hào).據(jù)此將Web生成的SQL語(yǔ)句改為:select *from accounts where username=‘username’ and password=‘passwor d’ and type=‘type’.若該 url會(huì)根據(jù)用戶輸入的執(zhí)行不同的SQL語(yǔ)句,則需在相應(yīng)的啟始文件寫入各種情況的啟始數(shù)據(jù)并將該對(duì)應(yīng)的<param>的change屬性設(shè)置為true.生成的映射表(XML文件)利用選擇標(biāo)簽<if>和<elseif>分情況存儲(chǔ)SQL語(yǔ)句.假設(shè)上面的例子根據(jù)type屬性執(zhí)行不同的SQL語(yǔ)句,則圖3和圖4分別給出了相對(duì)應(yīng)的啟始文件和URL與SQL語(yǔ)句映射表的XML文件.表1和表2分別給出了啟始文件的標(biāo)簽和映射表標(biāo)簽.其中圖3的sql標(biāo)簽的元素 where username =‘username’ and password = ‘password’中,其中對(duì) SQL 的抽取的原理如下.

圖3 啟始文件數(shù)據(jù)

圖4 URL和SQL語(yǔ)句映射表

表1 爬蟲啟始數(shù)據(jù)XML文件標(biāo)簽

表2 映射表標(biāo)簽

SQL注入攻擊往往會(huì)改變?cè)械腟QL語(yǔ)句語(yǔ)法樹的結(jié)構(gòu).以 SQL 語(yǔ)句“select a from b where c=?”(其中? 為占位符)為例,對(duì)于正常的用戶輸入,假設(shè)用戶輸入為admin,則其SQL語(yǔ)法樹結(jié)構(gòu)如圖5所示.對(duì)于SQL 注入攻擊,假設(shè)用戶輸入為 admin ‘or’ 1 ‘=’ 1 ,則其SQL語(yǔ)法樹結(jié)構(gòu)如圖6所示.由圖5和圖6中的語(yǔ)法樹結(jié)構(gòu)可見,由于SQL語(yǔ)句“select a from b where c=?”(其中? 為占位符)中用戶輸入的數(shù)據(jù)位于where子樹,所以其它SQL語(yǔ)法樹中并沒有改變結(jié)構(gòu).因此對(duì)SQL的抽取沒有必要抽取整個(gè)SQL語(yǔ)句,只需根據(jù)用戶輸入數(shù)據(jù)所對(duì)應(yīng)的位置,對(duì)該子樹進(jìn)行解析并記錄下該子樹的根節(jié)點(diǎn)和特征(該子樹的結(jié)點(diǎn)總數(shù)),抽取對(duì)應(yīng)的SQL語(yǔ)句.以SQL語(yǔ)句“select a from b where c=?”(其中? 為占位符)為例,則對(duì)應(yīng)抽取的SQL語(yǔ)句為:where c=?(其中? 為占位符,根據(jù)與爬蟲發(fā)出的數(shù)據(jù)的對(duì)比結(jié)果確定的Http數(shù)據(jù)報(bào)文中的參數(shù)名),并記錄該子樹根結(jié)點(diǎn)為where,特征為4.

圖5 正常的SQL語(yǔ)法樹

圖6 注入攻擊SQL語(yǔ)法樹

2.2.2 過(guò)濾階段

過(guò)濾階段工作在現(xiàn)實(shí)環(huán)境下,通過(guò)檢測(cè)長(zhǎng)度、連接頻率,并根據(jù)映射表和用戶的輸入構(gòu)建SQL語(yǔ)句,再對(duì)該SQL語(yǔ)句進(jìn)行解析獲取特征值,之后將該特征值與映射表的SQL語(yǔ)句特征進(jìn)行匹配,以此來(lái)檢測(cè)SQL注入攻擊.其工作環(huán)境如圖7所示.

圖7 注入攻擊SQL語(yǔ)法樹

在HTTP的get請(qǐng)求方式中,SQL注入攻擊過(guò)程往往需要向URL中拼接SQL語(yǔ)句,所以SQL注入的URL長(zhǎng)度相較于正常的URL長(zhǎng)度會(huì)有所區(qū)別.因此當(dāng)HTTP的URL長(zhǎng)度超過(guò)某個(gè)閾值時(shí),則該用戶輸入可能為SQL注入攻擊,需要進(jìn)行進(jìn)一步判斷.文獻(xiàn)[7]中研究表明,大部分的HTTP的get請(qǐng)求方式中URL的長(zhǎng)度普遍在5–70 byte之間,所以本文設(shè)置URL長(zhǎng)度閾值為70 byte,當(dāng)URL長(zhǎng)度大于70時(shí),則記錄該請(qǐng)求由人工進(jìn)行進(jìn)一步判斷.

SQL注入攻擊的HTTP連接頻率往往高于正常用戶的HTTP連接頻率.所以,單位時(shí)間內(nèi)HTTP請(qǐng)求的三元組<源IP,目的IP,目的端口>的頻率能夠作為檢測(cè)SQL注入的一個(gè)標(biāo)準(zhǔn).文獻(xiàn)[7]中研究表明,正常網(wǎng)絡(luò)的HTTP連接頻率為4.87次/s,但其中大部分連接頻率遠(yuǎn)低于該值.因此,本文將連接頻率的閾值定為3次/s.檢測(cè)中,如果某個(gè)三元組的連接頻率大于3次/秒,則記錄該請(qǐng)求由人工進(jìn)行進(jìn)一步判斷.

SQL注入攻擊往往會(huì)改變?cè)械腟QL語(yǔ)法樹結(jié)構(gòu).因此,可以根據(jù)用戶的輸入提取映射表中對(duì)應(yīng)的SQL語(yǔ)句信息,之后根據(jù)相應(yīng)的信息進(jìn)行SQL解析.再與映射表的SQL語(yǔ)句特征進(jìn)行匹配,若匹配成功則為正常輸入.若匹配失敗則為SQL注入攻擊.以上文中的圖4為例,假設(shè)用戶的正常輸入為admin和123456,則對(duì)應(yīng)的解析后的SQL語(yǔ)法樹子樹如圖8所示.假設(shè)SQL注入攻擊的輸入為admin和123456’or’1’=’1,則對(duì)應(yīng)的解析后的 SQL 語(yǔ)法樹子樹如圖9所示.由此可見用戶正常輸入的SQL語(yǔ)法樹子樹的特征與SQL注入攻擊的SQL語(yǔ)法樹子樹的特征有所區(qū)別.因此,可以根據(jù)SQL語(yǔ)法樹子樹的特征來(lái)檢測(cè)SQL注入攻擊.

3 SQL注入過(guò)濾方法詳細(xì)流程及模塊介紹

3.1 學(xué)習(xí)階段流程

本文提出的SQL注入過(guò)濾方法的學(xué)習(xí)階段的具體流程描述如下:

步驟1.讀取用戶提供的爬蟲啟始數(shù)據(jù)放入待抓取URL隊(duì)列并生成URL與SQL語(yǔ)句的映射表.之后讀取待抓取URL隊(duì)列的隊(duì)頭數(shù)據(jù).

步驟2.判斷步驟1中提取的URL是在已抓取URL隊(duì)列中,若存在則直接結(jié)束,準(zhǔn)備讀取下一個(gè)待抓取URL.若不存在則進(jìn)行步驟3.

步驟3.發(fā)送HTTP請(qǐng)求,并根據(jù)其中的URL和請(qǐng)求方式在映射表中相應(yīng)的位置生成<url>和<type>標(biāo)簽.之后獲取SQL語(yǔ)句并解析成SQL語(yǔ)法樹.

圖8 正常輸入的SQL語(yǔ)法樹中的where子樹

圖9 SQL注入攻擊的SQL語(yǔ)法樹中的where子樹

步驟4.將步驟3生成的SQL語(yǔ)法樹的葉子結(jié)點(diǎn)逐個(gè)與HTTP報(bào)文中參數(shù)的數(shù)據(jù)進(jìn)行比較.若數(shù)據(jù)不一致,則比較下一個(gè)結(jié)點(diǎn);若所有結(jié)點(diǎn)都不一致,則直接結(jié)束,準(zhǔn)備讀取下一個(gè)待抓取URL;若數(shù)據(jù)一致,則進(jìn)行步驟5.

步驟5.判斷步驟4的數(shù)據(jù)是否被’’所引用,若被’’所引用,則該數(shù)據(jù)類型為字符型,將SQL語(yǔ)句中對(duì)應(yīng)的數(shù)據(jù)改為該數(shù)據(jù)對(duì)應(yīng)的Http數(shù)據(jù)報(bào)文中的參數(shù)名.若該數(shù)據(jù)為數(shù)字并且在原SQL語(yǔ)句中沒有被’’所引用,則該數(shù)據(jù)類型為數(shù)字型,將SQL語(yǔ)句中對(duì)應(yīng)的數(shù)據(jù)改為該數(shù)據(jù)對(duì)應(yīng)的Http數(shù)據(jù)報(bào)文中的參數(shù)名并在該參數(shù)名兩側(cè)加上*符號(hào).

步驟6.抽取SQL語(yǔ)法樹,記錄下抽取子樹的根結(jié)點(diǎn)和特征.之后在映射表中對(duì)應(yīng)的<url>標(biāo)簽中生成對(duì)應(yīng)的<sql>標(biāo)簽.

步驟7.準(zhǔn)備讀取下一個(gè)待抓取URL,重復(fù)步驟1到步驟6.

3.2 過(guò)濾階段流程

本文提出的SQL注入過(guò)濾方法的過(guò)濾階段的具體流程描述如下:

步驟1.首先,將對(duì)HTTP請(qǐng)求方式進(jìn)行判斷.如果是GET方式,提取URL進(jìn)入步驟2,如果是POST方式,提取實(shí)體進(jìn)入步驟3.

步驟2.對(duì)URL的長(zhǎng)度進(jìn)行檢測(cè),若長(zhǎng)度大于70 byte,則記錄該請(qǐng)求由人工進(jìn)行進(jìn)一步判斷,之后進(jìn)入步驟3.否則直接進(jìn)入步驟3.

步驟3.提取當(dāng)前HTTP請(qǐng)求中的三元組<源IP,目的IP,目的端口>,若其不存在于三元組表中,則創(chuàng)建該三元組.若存在于三元組表中,則相應(yīng)的三元組連接數(shù)加1,并對(duì)該三元組進(jìn)行連接頻率檢測(cè),若連接頻率大于3次/秒,則記錄該請(qǐng)求由人工進(jìn)行進(jìn)一步判斷,之后進(jìn)入步驟4.否則直接進(jìn)入步驟4.

步驟4.根據(jù)URL查找學(xué)習(xí)階段生成的URL和SQL語(yǔ)句映射表,獲取相應(yīng)的SQL語(yǔ)句,子樹根結(jié)點(diǎn),語(yǔ)法樹特征等信息.從HTTP請(qǐng)求中提取相應(yīng)的參數(shù)值,構(gòu)建SQL子句.根據(jù)映射表中的子樹根結(jié)點(diǎn),對(duì)該SQL子句進(jìn)行進(jìn)行對(duì)應(yīng)的SQL解析得到SQL語(yǔ)法子樹.若解析析失敗則進(jìn)行二次解析;若解析成功繼續(xù)步驟5.二次解析時(shí)過(guò)濾模塊自動(dòng)生成完整的SQL語(yǔ)句進(jìn)行解析.以上文中的 where username=’admin’ and password=’123456’ and type=’admin’為例,生成 select a from b where username=’admin’ and password=’123456’and type=’admin’進(jìn)行解析.若仍解析失敗則判斷該輸入為SQL注入攻擊,解析成功則繼續(xù)步驟5.

步驟5.將步驟4生成的SQL語(yǔ)法子樹的特征(SQL語(yǔ)法子樹的結(jié)點(diǎn)總數(shù))與映射表中的特征進(jìn)行匹配.若一樣則將該輸入判定為正常輸入;若不一樣該則將輸入判定為SQL注入攻擊.

步驟6.獲取下一條HTTP請(qǐng)求,重復(fù)步驟1到步驟5.

3.3 模塊介紹

本文提出的方法的設(shè)計(jì)模塊圖如圖10所示.

1)數(shù)據(jù)提取模塊:負(fù)責(zé)提取HTTP報(bào)文中的數(shù)據(jù).在學(xué)習(xí)階段時(shí),并將相關(guān)的數(shù)據(jù)存入配置文件中.在過(guò)濾階段,并結(jié)合映射表生成相應(yīng)的SQL語(yǔ)句.

2)爬蟲模塊:該模塊包括待抓取URL隊(duì)列和已抓取URL隊(duì)列.爬蟲從待抓取URL隊(duì)列中依次讀取URL,之后根據(jù)URL訪問對(duì)應(yīng)網(wǎng)頁(yè).同時(shí)將已經(jīng)訪問的URL發(fā)送給已抓取URL隊(duì)列,以避免重復(fù)抓取.對(duì)于剛抓取的網(wǎng)頁(yè),則從中抽出所包含的所有鏈接信息,并在已抓起隊(duì)列中檢測(cè),若發(fā)現(xiàn)鏈接還沒被抓取,則將該URL放入待抓取URL隊(duì)列末尾.直至待抓取URL隊(duì)列為空時(shí)才停止抓取網(wǎng)頁(yè).

圖10 系統(tǒng)模塊圖

3)判斷模塊:負(fù)責(zé)對(duì)HTTP連接的URL長(zhǎng)度、連接頻率進(jìn)行檢測(cè).若URL長(zhǎng)度大于70 byte或連接頻率大于3次/s,則記錄該請(qǐng)求由人工進(jìn)行進(jìn)一步判斷.并比較SQL解析模塊生成的SQL語(yǔ)法樹的特征值與映射表中的特征值,根據(jù)結(jié)果判斷該用戶輸入是否為SQL注入攻擊.

4)SQL解析模塊:負(fù)責(zé)對(duì)SQL語(yǔ)句進(jìn)行解析,生成相應(yīng)的SQL語(yǔ)法樹.該模塊包括詞法分析和語(yǔ)法分析.詞法分析負(fù)責(zé)將輸入的SQL語(yǔ)句進(jìn)行分詞.語(yǔ)法分析在詞法分析的基礎(chǔ)上,判斷輸入的SQL語(yǔ)句是否符合語(yǔ)法邏輯.當(dāng)語(yǔ)法分析正常結(jié)束后,則輸出相應(yīng)的抽象語(yǔ)法樹.

5)日志:負(fù)責(zé)接收其他模塊的記錄請(qǐng)求,并將疑似SQL注入攻擊的HTTP請(qǐng)求記錄在日志中.

6)配置文件:配置文件包括用戶提供的啟始文件(XML文件)和URL和SQL語(yǔ)句映射表(XML文件).其中啟始文件包含用戶提供的爬蟲啟始數(shù)據(jù).URL和SQL語(yǔ)句映射表中包含了URL和SQL語(yǔ)句的映射信息.

4 仿真實(shí)驗(yàn)與性能分析

本文通過(guò)搭建實(shí)際的測(cè)試平臺(tái)來(lái)檢測(cè)和分析LFS方法的性能.測(cè)試平臺(tái)使用tomcat服務(wù)器,后臺(tái)數(shù)據(jù)庫(kù)采用MySQL數(shù)據(jù)庫(kù),Web應(yīng)用程序?yàn)樾⌒蚃2EE招聘系統(tǒng),涵蓋登錄,查看簡(jiǎn)歷等功能并代碼中存在SQL注入漏洞.測(cè)試數(shù)據(jù)為SQL注入攻擊輸入,包含SQL關(guān)鍵字的用戶輸入和用戶正常輸入各100條,其中SQL注入攻擊輸入由SQLMAP生成.為了測(cè)試LFS過(guò)濾方法對(duì)于SQL注入攻擊的攔截率和誤報(bào)率,本文對(duì)LFS過(guò)濾,關(guān)鍵字過(guò)濾和正則表達(dá)式過(guò)濾(含30條過(guò)濾規(guī)則)進(jìn)行了比較.測(cè)試結(jié)果如圖11、圖12和表3所示.

圖11 SQL注入攔截率

圖12 SQL注入誤報(bào)率

表3 SQL注入攔截率和誤報(bào)率

測(cè)試結(jié)果表3、圖11和圖12表明了本文提出的LFS過(guò)濾方法相較于關(guān)鍵字過(guò)濾和正則表達(dá)式過(guò)濾有更高的攔截率和更低的誤報(bào)率,能夠較好的對(duì)SQL注入進(jìn)行防御.

為了測(cè)試LFS過(guò)濾方法對(duì)于Web應(yīng)用程序性能的影響,本文分別對(duì)Web應(yīng)用程序未加載過(guò)濾模塊和Web應(yīng)用程序加載了過(guò)濾模塊這兩種情況分別進(jìn)行測(cè)試,測(cè)試結(jié)果如圖13、圖14、圖15和表4所示.

圖13 正常輸入測(cè)試時(shí)間

圖14 含關(guān)鍵字的正常輸入測(cè)試時(shí)間

圖15 SQL注入攻擊測(cè)試時(shí)間

圖13表明,對(duì)于不含關(guān)鍵字的正常訪問,加載過(guò)濾模塊與否對(duì)Web應(yīng)用程序響應(yīng)時(shí)間有略微的影響,加載了過(guò)濾模塊將導(dǎo)致Web應(yīng)用程序響應(yīng)時(shí)間有略微的延遲,但對(duì)用戶體驗(yàn)影響不大.圖14表明,對(duì)于含有關(guān)鍵字的正常訪問,過(guò)濾模塊需要對(duì)該用戶請(qǐng)求進(jìn)行URL長(zhǎng)度和連接頻率的檢測(cè).之后需要根據(jù)映射表和用戶輸入的數(shù)據(jù)進(jìn)行SQL解析,但是用戶輸入中含有SQL關(guān)鍵字(如select、order by等)可能會(huì)改變了原有的SQL語(yǔ)句的語(yǔ)法,造成SQL解析失敗,進(jìn)行二次解析,致使系統(tǒng)響應(yīng)時(shí)間較長(zhǎng).圖15表明,對(duì)于SQL注入攻擊,當(dāng)沒有加載過(guò)濾模塊時(shí),SQL注入攻擊能夠改變Web應(yīng)用程序的SQL語(yǔ)句,使得后臺(tái)數(shù)據(jù)庫(kù)執(zhí)行該SQL語(yǔ)句,從而導(dǎo)致Web應(yīng)用程序響應(yīng)時(shí)間有明顯;當(dāng)加載了過(guò)濾模塊時(shí),由于要對(duì)url長(zhǎng)度和連接頻率進(jìn)行檢測(cè),并且過(guò)濾模塊對(duì)復(fù)雜的SQL語(yǔ)句的解析時(shí)間較長(zhǎng),導(dǎo)致系統(tǒng)響應(yīng)時(shí)間增加.表4則給出了加載過(guò)濾模塊與否,在三種輸入中的平均系統(tǒng)響應(yīng)時(shí)間.因此對(duì)于SQL注入攻擊,不論加載了過(guò)濾模塊與否和系統(tǒng)響應(yīng)時(shí)間都會(huì)有所延遲,導(dǎo)致了兩者的系統(tǒng)響應(yīng)時(shí)間較為接近.因此,該過(guò)濾模塊對(duì)于系統(tǒng)的響應(yīng)延遲在可接受的范圍內(nèi),對(duì)用戶體驗(yàn)的影響不大.

表4 系統(tǒng)響應(yīng)時(shí)間(單位:ms)

5 結(jié)束語(yǔ)

論文針對(duì)SQL注入攻擊問題展開研究,并結(jié)合爬蟲、數(shù)據(jù)庫(kù)代理等技術(shù),提出了一種新的SQL注入過(guò)濾方法——LFS過(guò)濾方法.首先,通過(guò)采用爬蟲和數(shù)據(jù)庫(kù)代理技術(shù)構(gòu)建URL和SQL語(yǔ)句映射表,完成學(xué)習(xí)過(guò)程;其次,通過(guò)對(duì)URL長(zhǎng)度、訪問頻率及SQL語(yǔ)法樹這三個(gè)方面進(jìn)行檢測(cè),實(shí)現(xiàn)對(duì)用戶輸入進(jìn)行過(guò)濾,防止SQL注入,完成過(guò)濾過(guò)程;最終,將學(xué)習(xí)過(guò)程和過(guò)濾過(guò)程有機(jī)結(jié)合,實(shí)現(xiàn)了新的LFS過(guò)濾方法.仿真實(shí)驗(yàn)和性能分析結(jié)果表明,論文提出的LFS過(guò)濾方法能夠有效的防止SQL注入攻擊,在攔截率和誤報(bào)率方面優(yōu)于關(guān)鍵字過(guò)濾方法和正則表達(dá)式過(guò)濾方法.

然而隨著系統(tǒng)業(yè)務(wù)的不斷提高,應(yīng)用程序可能會(huì)隨著用戶輸入的不同而產(chǎn)生不同的SQL語(yǔ)句,這給本方法帶來(lái)很大的挑戰(zhàn).一方面導(dǎo)致本方法在學(xué)習(xí)階段可能無(wú)法獲取所有的SQL語(yǔ)句,另一方面由于SQL語(yǔ)句的數(shù)量不可控,可能導(dǎo)致學(xué)習(xí)階段產(chǎn)生的URL和SQL語(yǔ)句映射表數(shù)據(jù)量巨大,從而導(dǎo)致在過(guò)濾階段耗時(shí)有顯著增加.我們同時(shí)注意到可變語(yǔ)句(隨著用戶輸入的不同而產(chǎn)生不同的SQL語(yǔ)句)的產(chǎn)生有和大相似度,例如相關(guān)的SQL語(yǔ)法樹結(jié)構(gòu)有很大的相似性,變化的只有SQL語(yǔ)句的局部.因此,在未來(lái)的研究工作中,我們考慮采用基于SQL語(yǔ)法樹的相似度的方法來(lái)對(duì)學(xué)習(xí)階段產(chǎn)生的URL和SQL語(yǔ)句映射表進(jìn)行壓縮,以此減少過(guò)濾時(shí)間.

1 鄭成興.網(wǎng)絡(luò)入侵防范的理論與實(shí)踐.北京:機(jī)械工業(yè)出版社,2006.

2 高鵬,嚴(yán)望佳.構(gòu)建安全的Web站點(diǎn).北京:清華大學(xué)出版社,1999.

3 張燕.數(shù)據(jù)挖掘提取查詢樹特征的SQL注入攻擊檢測(cè).電子技術(shù)應(yīng)用,2016,42(3):90–94.

4 黃保華,馬巖,謝統(tǒng)義.用于SQL注入檢測(cè)的語(yǔ)句塊摘要樹模型.信息安全與技術(shù),2012,(3):34–37.

5 趙宇飛,熊剛,賀龍濤,等.面向網(wǎng)絡(luò)環(huán)境的SQL注入行為檢測(cè)方法.通信學(xué)報(bào),2016,37(2):88–97.[doi:10.11959/j.issn.1000-436x.2016034]

6 張志超,王丹,趙文兵,等.一種基于神經(jīng)網(wǎng)絡(luò)的SQL注入漏洞的檢測(cè)模型.計(jì)算機(jī)與現(xiàn)代化,2016,(10):67–71.[doi:10.3969/j.issn.1006-2475.2016.10.014]

7 王偉平,李昌,段桂華.基于正則表示的SQL注入過(guò)濾模塊設(shè)計(jì).計(jì)算機(jī)工程,2011,37(5):158–160.

8 Becher M.Web application firewalls.Akademikerverlag:Universiti Teknologi MARA,2012.

9 Roesch M.Snort-lightweight intrusion detection for networks.Proceedings of the 13th USENIX Conference on System Administration.Berkeley,CA,USA.1999.229–238.

10 田玉杰,趙澤茂,王麗君,等.基于分類的SQL注入攻擊雙層防御模型研究.信息網(wǎng)絡(luò)安全,2015,(6):1–6.

11 Saleh AZM,Rozali NA,Buja AG,et al.A method for web application vulnerabilities detection by using boyer-moore string matching algorithm.Procedia Computer Science,2015,(72):112–121.[doi:10.1016/j.procs.2015.12.111]

12 Patel N,Shekokar N.Implementation of pattern matching algorithm to defend SQLIA.Procedia Computer Science,2015,(45):453–459.[doi:10.1016/j.procs.2015.03.078]

13 Abawajy J,Fernando H.Policy-based SQLIA detection and prevention approach for RFID systems.Computer Standards&Interfaces,2015,(38):64–71.

14 Wei K,Muthuprasanna M,Kothari S.Preventing SQL injection attacks in stored procedures.Proceedings of 2006 Software Engineering Conference.Sydney,Australia.2006.191–198.

15 黃龍軍.存儲(chǔ)過(guò)程技術(shù)在網(wǎng)絡(luò)考試系統(tǒng)SQL注入攻擊防御上的應(yīng)用.計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(1):103–106.

16 Clarke J.SQL Injection Attacks and Defense.Amsterdam:Elsevier,2009.

猜你喜歡
語(yǔ)句應(yīng)用程序解析
三角函數(shù)解析式中ω的幾種求法
重點(diǎn):語(yǔ)句銜接
刪除Win10中自帶的應(yīng)用程序
谷歌禁止加密貨幣應(yīng)用程序
睡夢(mèng)解析儀
電競(jìng)初解析
對(duì)稱巧用解析妙解
我喜歡
三星電子將開設(shè)應(yīng)用程序下載商店
作文語(yǔ)句實(shí)錄