文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2015.10.030
中文引用格式: 王民川,,管磊. 面向RFID系統(tǒng)的SQL注入攻擊檢測和防御算法[J].電子技術(shù)應(yīng)用,,2015,41(10):111-114.
英文引用格式: Wang Minchuan,,Guan Lei. A detection and prevention algorithm of SQL injection attacks for RFID system[J].Application of Electronic Technique,,2015,41(10):111-114.
0 引言
射頻識別(Radio Frequency Identification,,RFID)技術(shù)是一種標(biāo)簽技術(shù)[1],,它能夠自動識別不在視線內(nèi)的實(shí)體,大大提高了自動化效率[2],。然而,,RFID系統(tǒng)存在許多安全性問題,其中一個(gè)主要問題為SQL注入攻擊(SQL Injection Attacks,,SQLIA)[3,,4],,增加了RFID標(biāo)簽的潛在威脅[5]。因此,,檢測和防御RFID系統(tǒng)中SQLIA對RFID的應(yīng)用至關(guān)重要,。文獻(xiàn)[6]提出了一種基于數(shù)據(jù)完整性策略的SQL攻擊檢測算法,通過運(yùn)行監(jiān)控確保產(chǎn)生的查詢符合條件,,一定程度上提高了安全性,。然而,該算法期望存在原始SQL結(jié)構(gòu),,需要人工干預(yù)建立所有組件,,成本較高。
本文提出一種新的SQL注入攻擊的檢測和防御算法,,利用數(shù)據(jù)完整性策略和意圖符合條件,、大小符合條件和標(biāo)識符符合條件來檢測和防御SQL注入攻擊。實(shí)驗(yàn)結(jié)果表明了本算法的有效性及高效性,。
1 SQL注入攻擊問題
擁有RFID惡意軟件檢測和防御機(jī)制對于維護(hù)能RFID系統(tǒng)非常重要[7],,本文中SQLIA問題如下[8]:
已知:動態(tài)產(chǎn)生SQL查詢q和I=t1,t2,,…,,tn輸入數(shù)據(jù)集;
問題:SQLIA檢測問題是設(shè)計(jì)一種算法A,,在下列約束下確定q是否為SQL注入攻擊:
(a)I=t1,t2,,…,,tn輸入數(shù)據(jù)集僅來源于RFID標(biāo)簽;
(b)中間件基于I=t1,,t2,,…,tn輸入數(shù)據(jù)集生成q,;
(c)q能執(zhí)行企業(yè)數(shù)據(jù)庫的數(shù)據(jù)插入,、數(shù)據(jù)更新、數(shù)據(jù)刪除和數(shù)據(jù)檢索操作,。
2 提出的SQLIA檢測和防御算法
定義1(動態(tài)SQL查詢):給定應(yīng)用程序P和n條輸入數(shù)據(jù)d1,,d2,…,,dn,,通過映射RFID標(biāo)簽輸入到常量查詢字符串,P構(gòu)建動態(tài)SQL查詢q:
q←P(d1,,d2,,…,,dn)(1)
部分查詢靜態(tài)配置于中間件中,而其他部分從輸入?yún)?shù)導(dǎo)出,。
定義2(惡意SQL):將利用源自RFID標(biāo)簽的輸入d1,,d2,…,,dn數(shù)據(jù)形成的動態(tài)SQL查詢q,,若滿足下列任意條件,則視為惡意SQL:
(1)意圖符合:substr(qi)∈{substr(d1),,…,,substr(dm)}
(2)大小符合:M<F
(3)標(biāo)識符符合:di.vki.v|v∈{op,artry,,type,,size}
意圖符合條件確保正常SQL語句不能是用于產(chǎn)生動態(tài)查詢的程序的輸入字符串元素。大小符合條件確保輸入數(shù)據(jù)的大小(F)不能大于標(biāo)識符數(shù)據(jù)的大小(M),。標(biāo)識符符合條件嚴(yán)格限制每個(gè)輸入數(shù)據(jù)(如d1,,d2,…,,dm),,使其遵守標(biāo)識符的屬性。
圖1描述了提出的SQLIA檢測和防御算法的整體結(jié)構(gòu),,包含數(shù)據(jù)完整性策略,、意圖符合、大小符合和SQL符合部分,。
2.1 數(shù)據(jù)完整性策略
SQLIA攻擊依賴于不合法結(jié)構(gòu)的數(shù)據(jù)成功輸入,,為了解決這一問題,使用數(shù)據(jù)完整性策略在數(shù)據(jù)庫標(biāo)識符值上定義一組約束,,每個(gè)動態(tài)生成的SQL語句包含一組標(biāo)識符:
I=〈k1〈P〉,,…,kn〈P〉〉(2)
每個(gè)標(biāo)識符ki∈I有一組屬性ki〈P〉=〈p1,,…,,pn〉,例如數(shù)據(jù)類型和數(shù)據(jù)位允許的最大尺寸,。
這種策略用以確保數(shù)據(jù)為強(qiáng)類型,、語法正確、在長度邊界內(nèi),、僅包含允許的字符,、正確簽名數(shù)字且數(shù)字在范圍邊界內(nèi)。策略對每個(gè)標(biāo)識符使用一組數(shù)據(jù)完整性規(guī)則,,通過驗(yàn)證每個(gè)標(biāo)識符聲明的屬性來定義這些輸入數(shù)據(jù)完整性規(guī)則,。
圖2為使用巴科斯范式表示系統(tǒng)標(biāo)識符的約束,,“op”性質(zhì)規(guī)定“創(chuàng)建、讀,、更新,、刪除”中的哪些操作允許在標(biāo)識符上執(zhí)行。SQL編程中,,4個(gè)基本函數(shù)(創(chuàng)建,、讀、更新,、刪除)對應(yīng)于INSERT,、SELECT、UPDATE(SET)和DELETE[9],。類型性質(zhì)規(guī)定無論它們持有什么,,都將視為字符串或數(shù)值,而不是任意代碼,。大小性質(zhì)規(guī)定可存儲的數(shù)字或字符的最大數(shù)量,。
2.2 SQL注入攻擊檢測和防御
本文算法使用有關(guān)SQL語法知識的架構(gòu)和策略檢測一個(gè)查詢是否為SQLIA,如算法1所示,。算法的輸入為動態(tài)產(chǎn)生的SQL語句,、從RFID標(biāo)簽獲得的數(shù)據(jù)集D={d1,d2,,…,,dm}和用于程序P生成SQL的輸入?yún)?shù)集S={t1,t2,,…,,tn}。
在運(yùn)行過程中,,當(dāng)由中間件產(chǎn)生的SQL查詢的語法結(jié)構(gòu)與RFID應(yīng)用程序開發(fā)者所設(shè)定的SQL語法結(jié)構(gòu)不同時(shí),,SQL注入攻擊發(fā)生,。將SQL語句寫成查詢集Q={q1,,q2,…,,qn},,使用分號“;”和注釋“—”作為代碼內(nèi)多個(gè)查詢的分隔符,,然后處理每個(gè)查詢qi∈Q(一次一個(gè)),,若任一查詢qi∈Q不遵守意圖符合條件、大小符合條件和標(biāo)識符符合條件,,則拒絕該SQL語句,。
算法1:SQLIA檢測算法
1.輸入: SQL,,D={d1,d2,,…,,dm},S={t1,,t2,,…,tn}
2.BEGIN
3. Q←SQL中查詢集
4. FOREACH qi∈Q DO
5.計(jì)算M和F
6.IF(M≥F)∧(qiD)THEN
7. I←qi中標(biāo)識符集
8. IC=IdentifierConformity(I,,D,,S)
9. IF (IC==FALSE) THEN
10.REJECT;EXIT
11.ENDIF
12. ENDIF
13.ENDFOR
14.END
2.2.1 大小符合
期望和實(shí)際輸入數(shù)據(jù)的大小能夠表示純凈SQL語法和受污染SQL語法之間的差異,,每個(gè)動態(tài)生成的SQL語句包括一組標(biāo)識符I=k1,,…,kn,,每個(gè)標(biāo)識符ki∈I有一組屬性P=p1,,…,pn,,其中一個(gè)為允許標(biāo)識符持有的數(shù)據(jù)最大尺寸,。該算法計(jì)算輸入字符串的總大小(即d1,d2,,…,,d|D|)和標(biāo)識符允許的總數(shù)據(jù)大小(即k1,k2,,…,,k|I|),如下:
若實(shí)際輸入和期望輸入不匹配或存在空數(shù)據(jù)輸入時(shí),,設(shè)置F=0,。對于滿足大小符合約束的查詢qi∈Q,輸入數(shù)據(jù)的總和不能超過設(shè)計(jì)時(shí)定義的參數(shù)總大小,。
2.2.2 意圖符合
將SQL語句劃分為一組獨(dú)立SQL語句Q={q1,,q2,…,,qn},,對于每個(gè)查詢qi∈Q,算法檢查是否符合下列意圖符合條件:
式(5)規(guī)定qi∈Q不能為輸入字符串的元素,,若查詢qi∈Q不符合意圖符合條件,,則拒絕原始SQL語句。
2.2.3 標(biāo)識符符合
算法2描述了針對每個(gè)查詢qi∈Q執(zhí)行的標(biāo)識符符合算法的偽代碼,算法的輸入為RFID標(biāo)簽數(shù)據(jù)集D={d1,,d2,,…,dm},、例如保留關(guān)鍵字和操作符的非文本標(biāo)記集R={t1,,t2,…,,tn}和標(biāo)識符集I={k1,,k2,…,,kn},。
強(qiáng)制執(zhí)行下列兩個(gè)數(shù)據(jù)完整性驗(yàn)證規(guī)則:
(1)如果D={d1,d2,,…,,dm}和R={t1,t2,,…,,tn}的交集非空,則認(rèn)為輸入數(shù)據(jù)受到污染,,拒絕SQL語句,。
(2)對于每個(gè)ki∈I,檢查下列操作和類型完整性條件:
Operation integrity:(di.op≠ki.op)∧(di.artry≠ki.artry)
(6)
Type integrity(di.type≠ki.type)∧(di.size≠ki.size)(7)
若不滿足上述兩個(gè)條件任一條,,則拒絕SQL語句,。
算法2:標(biāo)識符符合檢測算法
1.輸入:D,I,,R
2.輸出: clean=True
3.BEGIN
4. IF(R∩D)THEN
5.clean=False,;EXIT
6. ENDIF
7. FOR 每個(gè)標(biāo)識符 ki∈I DO
8.IF(di.op≠ki.op)∧(di.artry≠ki.artry)THEN
9. clean=False;EXIT
10.ELSEIF(ki∈I≠table)THEN
11. IF((di.type≠ki.type)∧(di.size≠ki.size))THEN
12.clean=False,;EXIT
13. ENDIF
14.ENDIF
15. ENDFOR
16.END算法
3 實(shí)驗(yàn)結(jié)果與分析
3.1 實(shí)驗(yàn)環(huán)境
為了評估提出的SQLIA檢測和防御算法的性能,,構(gòu)建模塊化測試平臺,如圖3所示,。
實(shí)驗(yàn)使用的RFID系統(tǒng)是UHF RFID閱讀器和SkyeTek,、Intermec公司的兩類標(biāo)簽。本文創(chuàng)建了三個(gè)虛擬克隆RFID標(biāo)簽,,用來發(fā)送各種類型SQLIA,。中間件運(yùn)行在筆記本電腦上,,使用MySQL數(shù)據(jù)庫,,中間件通過MySQLC API連接到數(shù)據(jù)庫。
實(shí)驗(yàn)測試了可能在RFID系統(tǒng)中動態(tài)生成的各類SQL查詢(例如SELECT、UPDATE,、INSERT),,通過克隆標(biāo)簽和合法標(biāo)簽產(chǎn)生的700個(gè)SQL注入攻擊和1 300個(gè)合法請求,組成大約2 000個(gè)查詢來測試提出的算法,。其中,,SQL注入攻擊包含一些攻擊類型(如重言式、聯(lián)合查詢,、后置貪心查詢等),。
3.2 SQLIA檢測結(jié)果
實(shí)驗(yàn)運(yùn)行2 000個(gè)查詢,共有700種惡意查詢,,包括280個(gè)SELECT類查詢,、251個(gè)UPDATE類查詢和169個(gè)INSERT類查詢,惡意查詢的比例可從5%至35%之間變化,。
圖4描述了在存在不同比例惡意查詢情況下,,接受和拒絕查詢的百分比。結(jié)果表明,,由于所有惡意查詢至少不滿足意圖符合,、大小符合、標(biāo)識符符合條件之一,,采用三個(gè)條件連同數(shù)據(jù)完整性策略能夠有效的遏制SQLIA,,同時(shí)很好地保證了合法查詢。
當(dāng)查詢不符合意圖符合,、大小符合,、標(biāo)識符符合條件之一時(shí),算法就會跳過其他過濾條件,,直接判斷為惡意查詢,,從而大大降低了算法開銷,提高了性能,。
3.3 比較及分析
3.3.1 耗時(shí)比較
在互聯(lián)網(wǎng)上選取一個(gè)存在SQL注入漏洞的網(wǎng)頁,,將本文算法與基于節(jié)點(diǎn)序列的比對算法[4]、快速比對算法[6]進(jìn)行比較,,處理100到10 000個(gè)查詢,,運(yùn)行200次,取各個(gè)算法查詢時(shí)間的平均值,,如表1所示,。
從表1可看出,本文算法消耗時(shí)間僅為節(jié)點(diǎn)序列比對算法的29.7%,,僅為快速比對算法的76.0%,,體現(xiàn)了本文算法的高效率。結(jié)果表明,本文算法對系統(tǒng)的額外開銷很少,,因?yàn)楸疚乃惴ㄊ褂煤唵巫址容^,。
3.3.2 檢測性能比較
將本文算法在攻擊檢測系統(tǒng)中的有效性與當(dāng)前常用的兩款檢測工具BSQL Hacker[9]和Pangolin[10]進(jìn)行比較,分別對測試樣本進(jìn)行檢測,。首先通過表2的關(guān)鍵語句在Google中搜索出一定的URL以構(gòu)建測試樣本集,,然后對獲取的URL測試樣本進(jìn)行SQL攻擊檢測,根據(jù)對獲取的URL添加不同的注入命令的返回頁面與正常頁面的異同來判定URL是否存在攻擊,。判定后,,采取措施進(jìn)行攻擊防御,檢測結(jié)果如表3所示,。
從表3可看出,,本文工具的消耗時(shí)間略多于其他兩種攻擊,但檢測到的URL總數(shù)明顯最多,,且檢測率分別比BSQL Hacker和Pangolin高13.8%和20.6%,,表明本文算法能夠保證正常查詢,可有效檢測和防御SQL注入攻擊,。
4 結(jié)束語
本文提出一種能夠準(zhǔn)確檢測并防御RFID系統(tǒng)中的SQL注入攻擊算法,,利用數(shù)據(jù)完整性策略來防御SQLIA攻擊。通過檢測查詢是否符合意圖符合條件,、大小符合條件和標(biāo)識符符合條件來檢測SQL注入攻擊,。本文算法成功阻止了所有攻擊,并保證了所有合法的查詢,。相比現(xiàn)有的檢測算法和檢測工具,,本文算法簡單有效,具有程序計(jì)算開銷低,、檢測率高等優(yōu)點(diǎn),。
參考文獻(xiàn)
[1] 白婷,黃春明,,李楠,,等.基于RFID的局域網(wǎng)安全管理的研究[J].計(jì)算機(jī)測量與控制,2012,,20(4):1067-1069.
[2] MAHDIN H,,ABAWAJY J.An approach for removing redundant data from RFID data streams[J].Sensors,2011,,11(10):9863-9877.
[3] FERNANDO H,,ABAWAJY J.Securing RFID systems from SQLIA[C].Algorithms and architectures for parallel processing.Springer Berlin Heidelberg.2011:245-254.
[4] ABAWAJY J.SQLIA detection and prevention approach for RFID systems[J].Journal of Systems and Software,2013,,86(3):751-758.
[5] DOGBE E,,MILLHAM R,,SINGH P.A combined approach to prevent SQL injection attacks[C].Science and InformationConference(SAI),2013.IEEE,,2013:406-410.
[6] ABAWAJY J,F(xiàn)ERNANDO H.Policy-based SQLIA detectionand prevention approach for RFID systems[J].Computer Standards & Interfaces,,2015,,38(3):64-71.
[7] 楊曉明,張翔,,王佳昊,,等.基于有限自動機(jī)的RFID入侵檢測[J].電子科技大學(xué)學(xué)報(bào),2014,,43(5):775-780.
[8] 田蕓,,陳恭亮,李建華.針對RFID身份認(rèn)證協(xié)議——ARAP協(xié)議的攻擊及改進(jìn)[J].中國電子科學(xué)研究院學(xué)報(bào),,2012,,6(6):556-560.
[9] LEE I,JEONG S,,YEO S,,et al.A novel method for SQL injection attack detection based on removing SQL query attribute values[J].Mathematical and Computer Modelling,2012,,55(1):58-68.
[10] 曹崢,,馬建峰,楊林,,等.RFID安全協(xié)議的數(shù)據(jù)去同步化攻擊[J].華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版),,2013,41(4):