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

?

基于語義分析的SQL注入行為檢測方案研究

2019-11-28 13:40曹鵬飛潘緒超王凡潘曉峰包婷婷
計(jì)算機(jī)時(shí)代 2019年11期
關(guān)鍵詞:語義分析

曹鵬飛 潘緒超 王凡 潘曉峰 包婷婷

摘 ?要: 目前SQL注入攻擊已成為Web安全領(lǐng)域中最為常見的攻擊方式,SQL注入攻擊可以泄露用戶信息,獲取系統(tǒng)權(quán)限和篡改網(wǎng)頁信息等。文章設(shè)計(jì)了基于語義分析的SQL注入行為檢測方案,能夠?qū)粜袨閺恼Z義的角度進(jìn)行檢測。該方案包括數(shù)據(jù)預(yù)處理,抽象語法樹,語義分析等功能模塊,針對漏洞相關(guān)語言的編譯器,通過對攻擊者輸入的內(nèi)容串進(jìn)行語法語義檢查來判斷該請求的惡意程度,理解攻擊者意圖,能實(shí)現(xiàn)對SQL注入攻擊的精準(zhǔn)識別。

關(guān)鍵詞: SQL注入; Web攻擊; 語法分析; 語義分析

中圖分類號:TP399 ? ? ? ? ?文獻(xiàn)標(biāo)志碼:A ? ? 文章編號:1006-8228(2019)11-18-05

Abstract: At present, SQL injection attack has become the most common attack mode in the field of Web security. SQL injection attack can reveal user information, obtain system privileges and tamper with Webpage information. This paper designs a SQL injection behavior detection scheme based on semantic analysis, which can detect attack behavior from the semantic point of view. The function modules of the scheme include data preprocessing, abstract grammar tree and semantic analysis etc. For the compiler of vulnerability-related languages, the malicious degree of the request can be judged by checking the grammatical semantics of the attacker's input content strings, and the attacker's intention can be understood. It can realize the accurate identification of SQL injection attacks.

Key words: SQL injection; Web attack; syntax analysis; semantic analysis

0 引言

隨著互聯(lián)網(wǎng)迅速發(fā)展,Web應(yīng)用程序在各個(gè)領(lǐng)域都廣泛應(yīng)用,但Web應(yīng)用程序的構(gòu)造也越來越復(fù)雜,隨之帶來的攻擊問題也越發(fā)嚴(yán)重,SQL注入攻擊已經(jīng)成為首要威脅[1]。傳統(tǒng)的SQL注入檢測方法是基于規(guī)則或特定的檢測模式,需要先分析特定注入產(chǎn)生的原因,再制定相應(yīng)的檢測規(guī)則。隨著大數(shù)據(jù)技術(shù)的普及應(yīng)用以及詞法、語義方法的日漸成熟,基于上下文邏輯實(shí)現(xiàn)攻擊檢測,能夠降低誤報(bào)率、提升精準(zhǔn)率、提高檢測效率[2]。

本文針對傳統(tǒng)規(guī)則檢測模式的不足提出了從語義分析的角度來進(jìn)行SQL注入行為檢測,從詞法、語法的結(jié)合深層貫穿邏輯的查找,在傳統(tǒng)的正則匹配的基礎(chǔ)上,提高了檢測準(zhǔn)確度。能在不知曉網(wǎng)站結(jié)構(gòu)的情況下,僅通過分析用戶的輸入就可以檢測出可能的SQL注入行為并進(jìn)行預(yù)警。

1 基于語義分析的SQL注入行為檢測方案設(shè)計(jì)

本文以Web引擎擴(kuò)展為載體,通過對關(guān)鍵信息進(jìn)行語法分析,得到代碼的關(guān)鍵元素為節(jié)點(diǎn)和相關(guān)依賴關(guān)系,并通過語法分析模塊實(shí)現(xiàn)語義理解從而完成SQL注入行為檢測,在分析過程中提出抽象語法樹的建立,通過語義分析得出SQL注入危險(xiǎn)狀態(tài)值,準(zhǔn)確定位SQL注入行為的惡意發(fā)生行為點(diǎn),篩除噪音[3]。如圖1所示,系統(tǒng)結(jié)構(gòu)包括預(yù)處理模塊和語義分析模塊。

預(yù)處理模塊:將用戶輸入信息進(jìn)行關(guān)鍵字的提取,通過詞法分析與語法分析結(jié)合,生成抽象語法樹。根據(jù)正常語句返回結(jié)果的異同,測試該處是否存在SQL注入行為。

語義分析模塊:檢測是否存在SQL注入行為,依靠傳統(tǒng)的正則匹配的方法,存在漏檢情況。本模塊結(jié)合Adaboost算法與FP-growth算法形成完整的語義分析模型,從上下文的邏輯商增強(qiáng)檢測的準(zhǔn)確性。

1.1 預(yù)處理模塊

預(yù)處理模塊利用了詞法分析和語法分析對接收的待檢測文件進(jìn)行初步的分析,主要流程如圖2。

預(yù)處理主要在Web環(huán)境下解析(Parser),構(gòu)建由詞法分析器和語法分析器組合的預(yù)處理模塊。如用戶輸入一串帶有SQL注入攻擊的語句,將用戶輸入的關(guān)鍵信息放入預(yù)處理器中。詞法分析器首先進(jìn)行字符集合分析,生成屬性關(guān)鍵字(Tokens)格式化傳入語法分析器中進(jìn)行抽象語法樹的節(jié)點(diǎn)整合,最終輸出抽象語法樹。對具有SQL注入的信息進(jìn)行定位。

1.2 語法分析模塊

SQL注入攻擊利用SQL語法中保留字、運(yùn)算符作為輸入內(nèi)容,通過預(yù)處理對Web環(huán)境下的SQL注入輸入進(jìn)行分析定位,并使用抽象語法樹的構(gòu)建,讓后續(xù)的機(jī)器能夠在全文上下邏輯中整體理解輸入內(nèi)容。語法分析模塊主要在結(jié)合算法解決SQL注入的檢測的不夠全面以及之前的依靠正則匹配不斷加規(guī)則的檢測技術(shù)。

利用AdaBoost算法分析當(dāng)前迭代最優(yōu)弱危險(xiǎn)分析器[4],計(jì)算最優(yōu)弱分析器的權(quán)重,并根據(jù)錯(cuò)誤率更新分析樣本權(quán)重,然后不斷重復(fù)以上步驟,直到達(dá)到能夠終止條件為止。終止條件是強(qiáng)分析器的錯(cuò)誤率低于最低錯(cuò)誤率閾值或者達(dá)到最大危險(xiǎn)分析迭代次數(shù)。計(jì)算公式如下:

采用FP-Growth算法[5][6],進(jìn)行關(guān)聯(lián)分析,實(shí)現(xiàn)通過上下邏輯的分析,檢測出是否存在SQL注入攻擊行為。此算法有兩個(gè)運(yùn)算階段,第一階段使用循環(huán)掃描信息查找滿足最小支持度地關(guān)聯(lián)項(xiàng)集,第二階段則運(yùn)用連續(xù)低階的關(guān)聯(lián)項(xiàng)集,從而確認(rèn)高階關(guān)聯(lián)項(xiàng)集的支持度,并且篩選出其中最小支持度的關(guān)聯(lián)項(xiàng)集,最終達(dá)到所有關(guān)聯(lián)項(xiàng)集都被挖掘出,并且得出關(guān)聯(lián)規(guī)則。

2 系統(tǒng)實(shí)現(xiàn)

2.1 系統(tǒng)總體實(shí)現(xiàn)

SQL注入檢測框架結(jié)構(gòu),如圖3所示。

該系統(tǒng)主要布置在客戶端及服務(wù)器端之間,由數(shù)據(jù)收集模塊、預(yù)處理模塊,以及語義分析模塊組成。其中,數(shù)據(jù)收集模塊利用抓包工具采集用戶輸入,預(yù)處理模塊分析關(guān)鍵信息并輸出抽象語法樹,發(fā)現(xiàn)是否存在SQL注入語句。語義分析模塊主要運(yùn)用語義分析方法進(jìn)一步上下的邏輯解析。

SQL注入行為實(shí)施主要通過HTTP協(xié)議中的內(nèi)容向服務(wù)器發(fā)送帶有SQL注入命令的請求來完成注入攻擊。對于HTTP協(xié)議來說,主要有3種方式向服務(wù)網(wǎng)端提交數(shù)據(jù):以GET方式在URL鏈接的參數(shù)中提交;以POST方式在HTTP協(xié)議的數(shù)據(jù)體中提交;以COOKIE方式提交。本設(shè)計(jì)主要針對是URL和HTTP協(xié)議數(shù)據(jù)體中的數(shù)據(jù)。

2.2 預(yù)處理模塊實(shí)現(xiàn)

將Web應(yīng)用程序中輸入信息放置預(yù)處理模塊,處理過程分為詞法分析和語法分析。詞法分析模塊選取當(dāng)前Web解釋器使用的Parser分析器,提取解釋器的標(biāo)準(zhǔn)定義規(guī)則文件。語法分析程序Bison根據(jù)標(biāo)準(zhǔn)定義語法規(guī)則還原語法中的程序邏輯,構(gòu)建完整的抽象語法樹AST。預(yù)處理模塊包括flex詞法分析和Bison語法分析。

系統(tǒng)調(diào)用start()函數(shù)啟動詞法分析,逐個(gè)掃描每一個(gè)詞法單元,調(diào)用new()函數(shù)建立新的葉子節(jié)點(diǎn),通過return返回。詞法單元在抽象語法樹中是終結(jié)點(diǎn)(葉子節(jié)點(diǎn))。第三個(gè)參數(shù)是data,是詞法單元行編號。詞法分析需要對每個(gè)終節(jié)點(diǎn)建立葉子節(jié)點(diǎn),來給語法分析過程調(diào)用。

start(){

start.a=new("IF",0,data);return IF;

start.a=new("ELSE",0,data); return ELSE;

start.a=new("WHILE",0,data); return WHILE;

start.a=new("PLUS",0,data); return PLUS;

start.a=new("MINUS",0,data); return MINUS;}

通過對照SQL詞法與語法分析轉(zhuǎn)換表,代碼實(shí)現(xiàn)AST節(jié)點(diǎn)的類型分類:

typedef ?{

TYPE_NONE ? ? ? ?= 0

, TYPE_KEYWORD ? ? = (int)'k'

, TYPE_UNION ? ? ? = (int)'U'

, TYPE_GROUP ? ? ? = (int)'B'

, TYPE_EXPRESSION ?= (int)'E'

, TYPE_SQLTYPE ? ? = (int)'t'

, TYPE_FUNCTION ? ?= (int)'f'

, TYPE_BAREWORD ? ?= (int)'n'

, TYPE_NUMBER ? ? ?= (int)'1'

, TYPE_VARIABLE ? ?= (int)'v'

, TYPE_STRING ? ? ?= (int)'s'

, TYPE_OPERATOR ? ?= (int)'o'

, TYPE_LOGIC_OPERATOR = (int)'&'

, TYPE_COMMENT ? ? = (int)'c'

} sqli_token_types;

上述生成Token完成了抽象語法樹中的節(jié)點(diǎn)分類,主要包括SQLObject、SQLExpr、SQLStatement三種類型。抽象樹通過自底向上的方式建立,先將詞法單元建立對應(yīng)的葉子節(jié)點(diǎn),由詞法單元葉子節(jié)點(diǎn)產(chǎn)生新的父節(jié)點(diǎn),進(jìn)行規(guī)約,直到起始單元,完成整顆語法樹的建立。

抽象語法樹[7]的建立需要對節(jié)點(diǎn)進(jìn)行打印,SQLUtils()函數(shù)將SQLExpr或者SQLStatement類型打印為String類型,便于后續(xù)的語義分析模型進(jìn)行自定義遍歷處理。

SQLUtils() {

static String toSQLString(SQLObject sqlObj, String dbType);

static String toSQLString(List statementList, String dbType);}

2.3 語義分析模塊實(shí)現(xiàn)

語義分析模塊結(jié)合AdaBoost算法和FP-Growth算法的基礎(chǔ)上實(shí)現(xiàn)基于上下邏輯的快速,全面的SQL注入攻擊檢測。AdaBoost算法以其進(jìn)行SQL注入樣本迭代分析的方法,實(shí)現(xiàn)降低漏檢率,提高精確度。算法的實(shí)現(xiàn),要先建立數(shù)據(jù)集并轉(zhuǎn)換為后續(xù)需要的方式,然后結(jié)合加權(quán)原則尋找最佳單層決策樹。

Find(dataMatrix,dimen,threshVal,threshIneq){

retArray=ones((shape(dataMatrix)[0],1))

if threshIneq=='lt':

retArray[dataMatrix[:,dimen]<=threshVal]=-1.0

else:

retArray[dataMatrix[:,dimen]>threshVal]=-1.0

def buildStump(dtArry,Labels,D):

dataMatrix=mat(dtArry);

labelMat=mat(Labels).T;

m,n=shape(dataMatrix);numSteps=10.0;

bestStump={};

bestClasEst=mat(zeros((m,1)))

minError=inf

}

代碼中Find()函數(shù)完成了建立單層決策樹,并進(jìn)行樣本分類,計(jì)算出錯(cuò)誤率。錯(cuò)誤率的計(jì)算是對應(yīng)在相對權(quán)重上的,最后進(jìn)行累加得到分析器的錯(cuò)誤率。

Create(self, nameValue, numOccur, parentNode)

函數(shù)Create()使用數(shù)據(jù)集以及最小支持度作為參數(shù)來構(gòu)建FP樹。

函數(shù)Outlet()對用戶輸入的SQL語句進(jìn)行上下邏輯的遍歷,尋找出關(guān)聯(lián)集,并進(jìn)行排序更新樹,最終輸出存在的SQL注入攻擊的行為檢測結(jié)果。

Outlet(){

freqItemSet = set(SQLSample.keys())

updateFPtree(orderedItem,retTree,SQLSample,count)

return retTree, SQLSample;

}

3 實(shí)驗(yàn)

3.1 實(shí)驗(yàn)環(huán)境

本文環(huán)境在LAMP架構(gòu)下的Web應(yīng)用進(jìn)行安全防護(hù)測試,具體環(huán)境如下:

操作系統(tǒng):Ubuntu 16.04 LTS;

Web服務(wù)器:Apache、PHP語言;

數(shù)據(jù)庫:MySQL;

解釋器:JavaScript Parser。

本文使用開源Python庫Libinjection作為預(yù)處理、詞法和語法分析模塊實(shí)現(xiàn)平臺,關(guān)鍵字為檢測對象,對該系統(tǒng)的性能進(jìn)行測試,指標(biāo)包括漏報(bào)率和誤報(bào)率,時(shí)間作為主要的相應(yīng)時(shí)間。

3.2 實(shí)驗(yàn)方法

本文測試的樣本數(shù)據(jù)來源于Github上SQL注入攻擊樣本,選取共計(jì)2000條,其中刪除部分生僻以及類似的SQL注入攻擊語句,挑選1500條作為最終測試樣本,在實(shí)驗(yàn)過程中,使用抓包WireShark工具來收集網(wǎng)站頁面返回的實(shí)際信息。

3.3 實(shí)驗(yàn)結(jié)果

經(jīng)過測試,威脅等級判斷結(jié)果如1表所示:

實(shí)驗(yàn)結(jié)果表明,該模型可以很好的定位SQL注入危險(xiǎn)級別,同時(shí)有著低漏報(bào)率,高速率的特點(diǎn)。分析威脅等級后,使用同樣1500個(gè)測試樣本進(jìn)行語義分析的檢測與其他正則匹配檢測的數(shù)據(jù)對比,結(jié)果如表2。

通過語義分析模型和正則匹配模型對相同的1500個(gè)SQL注入樣本進(jìn)行檢測對比發(fā)現(xiàn),語義分析模型對于Web程序下的SQL注入行為檢測較為穩(wěn)定,能保持幾乎全部檢測,但是正則匹配模型對于時(shí)間盲注型,Get型具有較差的檢測效果,整體檢測不穩(wěn)定,尤其對于需要不斷更新匹配庫的注入類型,不能保證第一時(shí)間的檢測預(yù)警,而語義分析在這方面做地更好。

如圖4所示,語義分析在檢測的速度上遠(yuǎn)遠(yuǎn)高于傳統(tǒng)正則匹配。一定程度上提升了系統(tǒng)檢測性能,降低了檢測時(shí)間的消耗。在檢測效果上,語義分析可以將漏檢率降到最低,更全面的保證了對于SQL注入行為的精確檢測。

如圖5所示,基于語義分析的檢測方法可以有效的提高Web應(yīng)用程序中的SQL注入攻擊行為的檢測率,降低漏洞率,同時(shí)提升了檢測的效率。此模型在一定的版本中已相對穩(wěn)定。實(shí)驗(yàn)表明,該系統(tǒng)在關(guān)鍵字的檢測中,有較快的檢測效率和較高的檢測率,整體情況能夠滿足在線防御的需求。

4 結(jié)束語

近年來,隨著大數(shù)據(jù)、人工智能、區(qū)塊鏈等技術(shù)的發(fā)展,與科技加速融合,新業(yè)務(wù)、新技術(shù)的大量涌現(xiàn),導(dǎo)致Web安全問題越來越多。一旦發(fā)生安全風(fēng)險(xiǎn),不僅會威脅到用戶的利益,也會給企業(yè)本身帶來巨大的損失。

本文設(shè)計(jì)并實(shí)現(xiàn)了基于語義分析模型的Web應(yīng)用程序中SQL注入行為的檢測。最后實(shí)驗(yàn)結(jié)果表明,通過Payload進(jìn)行一系列詞法、語法、語義的分析,能有效的縮短檢測時(shí)間和提高檢測率,降低漏檢率。

參考文獻(xiàn)(References):

[1] 吳斌,劉循.SQL注入攻擊及漏洞檢測防范技術(shù)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2017(1):76-78

[2] 王苗苗,錢步仁,許瑩瑩等.基于通用規(guī)則的SQL注入攻擊檢測與防御系統(tǒng)的研究[J].電子設(shè)計(jì)工程,2017.25(5):24-28

[3] 周穎,方勇,黃誠等.面向PHP應(yīng)用程序的SQL注入行為檢測[J].計(jì)算機(jī)應(yīng)用,2018.38(1):201-206

[4] Zhu J,Zou H,Rosset S,et al.Multi-class AdaBoost[J].Statistics & Its Interface,2006.2(3):349-360

[5] Shang X,Sattler K U,Geist I.SQL Based Frequent Pattern Mining with FP-Growth[M].Applications of Declarative Programming and Knowledge Management. 2005.

[6] Sonewar P A,Thosar S D.Detection of SQL injection and XSS attacks in three tier web applications[C].International Conference on Computing Communication Control & Automation. 2017.

[7] Mcwhirter P R,Kifayat K,Shi Q,et al.SQL Injection Attack classification through the feature extraction of SQL query strings using a Gap-Weighted String Subsequence Kernel[J]. Journal of Information Security & Applications,2018.40:199-216

猜你喜歡
語義分析
淺談現(xiàn)代漢語三音節(jié)慣用語
現(xiàn)代日語“結(jié)構(gòu)”一詞的語義及其漢譯分析
基于正則表達(dá)式度量算法的智能評分設(shè)計(jì)
遼河流域水環(huán)境管理技術(shù)庫構(gòu)建方法
基于交叉配血的多賬戶識別模型研究
基于LDA模型的95598熱點(diǎn)業(yè)務(wù)工單挖掘分析
從認(rèn)知語義學(xué)的角度來看多義動詞“あげる”
中文短文本語法語義相似度算法
高校圖書館大數(shù)據(jù)時(shí)代數(shù)據(jù)建設(shè)及功能轉(zhuǎn)型探析
扎囊县| 嘉祥县| 东平县| 瑞金市| 永嘉县| 青河县| 连城县| 万山特区| 吉水县| 张掖市| 云安县| 乌兰县| 黑山县| 南丰县| 吉水县| 孟州市| 武冈市| 清新县| 义马市| 黄梅县| 宿州市| 肥城市| 涞水县| 于田县| 县级市| 丰都县| 慈溪市| 辽中县| 华蓥市| 阿鲁科尔沁旗| 城步| 丰城市| 天水市| 常德市| 汾阳市| 犍为县| 彩票| 尚志市| 裕民县| 黄大仙区| 昌都县|