《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 微波|射頻 > 設(shè)計(jì)應(yīng)用 > RFID系統(tǒng)中兩階段規(guī)則的SQL注入攻擊防御
RFID系統(tǒng)中兩階段規(guī)則的SQL注入攻擊防御
2015年電子技術(shù)應(yīng)用第5期
邱春紅1,賈立國2
1.江蘇商貿(mào)職業(yè)學(xué)院,江蘇 南通226011; 2.河北師范大學(xué)教務(wù)處,河北 石家莊050024
摘要: SQL注入攻擊是RFID系統(tǒng)的一個(gè)重要攻擊方式,RFID系統(tǒng)的吞吐量較大,因此其防御方案應(yīng)具有較高的計(jì)算效率,對此提出一種基于兩階段規(guī)則的SQL注入攻擊防御方案。首先,按照合法數(shù)據(jù)域建立合法規(guī)則庫;然后,對RFID標(biāo)簽中數(shù)據(jù)的格式與內(nèi)容進(jìn)行檢查,對非法字符或內(nèi)容予以標(biāo)記并忽略;最終,對中間件中動態(tài)生成的SQL請求進(jìn)行格式與內(nèi)容的檢查,對不符合SQL口令規(guī)則的請求進(jìn)行標(biāo)記并忽略。試驗(yàn)結(jié)果證明,本算法可成功檢查并防御目前主要類型的注入攻擊,且計(jì)算效率極高,同時(shí)本算法對二次注入攻擊具有免疫性。
中圖分類號: TP393.08
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2015)05-0119-04
Two phases rule based SQL injection attacks prevention schema in RFID system
Qiu Chunhong1,Jia Liguo2
1.Jiangsu Vocational College of Business,Nantong 226011,China; 2.Hebei Normal University Dean′s Office,Shijiazhuang 050024,China
Abstract: SQL injection attacks is one of the main attack types, the corresponding prevention approach need to be efficient and low cost due to the high throughput of the RFID system, a new detection and prevention approach is proposed based on two phase rule to solve that problem. Firstly, a rule set is set up in accordance with the legal data region. Then, the detection to the layout and the content of the data in the RFID tag is processed, the illegal characters are labeled and discarded. Lastly, the detection to the layout and content of the SQL queries which are generated dynamically are processed, the illegal characters are labeled and discarded. Experimental results prove that proposed approach can successfully detect and prevent the main injection attacks, and has low computation cost, at the same time, the approach can prevent the second order injection.
Key words : SQL injection attack;RFID system;second order injection attack;middleware;malicious user

    

0 引言

    RFID通過將體積較小的RFID標(biāo)簽置入物體中,從而實(shí)現(xiàn)目標(biāo)物體的自動識別。目前RFID已廣泛應(yīng)用于供應(yīng)鏈等系統(tǒng)中,改善了供應(yīng)鏈的時(shí)間效率與成本[1-2]。但隨著RFID在商業(yè)生產(chǎn)與物流中的廣泛使用,其安全性成為重要問題。目前有許多針對RFID系統(tǒng)安全問題的研究,其中RFID標(biāo)簽中軟件的漏洞問題是RFID系統(tǒng)與生俱來的安全問題,而SQL注入攻擊[3]是其中一個(gè)易受攻擊的關(guān)鍵點(diǎn)。

    本文對此提出一種RFID系統(tǒng)中SQL注入攻擊(SQLIA)的檢測與防御方案。對RFID標(biāo)簽數(shù)據(jù)以及SQL請求進(jìn)行兩階段的檢查:(1)基本數(shù)據(jù)格式與內(nèi)容的檢查;(2)中間件中SQL請求的邏輯檢查。試驗(yàn)表明本方案取得了較好的SQLIA的防御效果,對多種主流攻擊形式均具有免疫能力,同時(shí),具有較高的計(jì)算效率及較好的實(shí)用價(jià)值。

1 RFID安全問題介紹

    圖1所示為典型RFID系統(tǒng),其包含常見的后端組件(數(shù)據(jù)庫、中間件和具體應(yīng)用)與RFID前端組件(RFID標(biāo)簽與閱讀器)。當(dāng)前,大多數(shù)數(shù)據(jù)庫使用SQL語句操作數(shù)據(jù)庫,而對于RFID系統(tǒng),通常由中間件根據(jù)標(biāo)簽中的數(shù)據(jù)自動生成相應(yīng)的SQL語句。生成的SQL語句一般可直接操作數(shù)據(jù)庫的所有數(shù)據(jù),因此,具有較大的安全隱患。

wl2-t1.gif

    圖1中的虛線部分為SQL注入攻擊的常見方法示意圖,SQL攻擊通常將惡意SQL請求代碼嵌入正常SQL請求來實(shí)現(xiàn)攻擊。RFID系統(tǒng)中,若存在攻擊者,攻擊者可將惡意數(shù)據(jù)存入RFID標(biāo)簽(可物理侵入或軟件侵入),更甚者,攻擊者直接模擬產(chǎn)生新的RFID攻擊標(biāo)簽(其中包含攻擊數(shù)據(jù)),并使該標(biāo)簽可被讀卡器識別并閱讀。中間件將惡意數(shù)據(jù)轉(zhuǎn)換成惡意SQL語句并轉(zhuǎn)發(fā)至數(shù)據(jù)庫,從而破壞數(shù)據(jù)庫。

2 SQL注入攻擊的檢測與防御方案

    RFID網(wǎng)絡(luò)系統(tǒng)具有3個(gè)天然屬性:

    (1)RFID標(biāo)簽中的數(shù)據(jù)具有嚴(yán)格的格式與結(jié)構(gòu),且整個(gè)系統(tǒng)中僅中間件模塊生成SQL語句。

    (2)RFID網(wǎng)絡(luò)對SQL請求的格式進(jìn)行規(guī)范與限制。

    (3)RFID標(biāo)簽采集數(shù)據(jù)的吞吐量較大。

    圖2為SQL注入攻擊的檢測與防御方案總體結(jié)構(gòu)。該方案包含2個(gè)階段:(1)規(guī)則建立階段:該階段為不同應(yīng)用系統(tǒng)建立合適的數(shù)據(jù)檢查的規(guī)則;(2)檢測與防御階段:嚴(yán)格執(zhí)行第1階段建立的規(guī)則。

wl2-t2.gif

2.1 規(guī)則建立

    SQLIA的根本原因是對輸入數(shù)據(jù)的驗(yàn)證不足,導(dǎo)致攻擊數(shù)據(jù)對數(shù)據(jù)庫進(jìn)行非法操作,因此,檢查RFID標(biāo)簽所采集的數(shù)據(jù)至關(guān)重要。其中,數(shù)據(jù)檢查包括數(shù)據(jù)的格式與內(nèi)容的雙重檢查。

2.1.1 數(shù)據(jù)格式與內(nèi)容檢查規(guī)則的建立

    當(dāng)RFID標(biāo)簽存儲數(shù)據(jù)時(shí),建立數(shù)據(jù)格式與內(nèi)容檢查規(guī)則。本文假設(shè)SQL的關(guān)鍵字與操作符不會出現(xiàn)在正常RFID標(biāo)簽數(shù)據(jù)中。

    格式驗(yàn)證與內(nèi)容檢查的規(guī)則創(chuàng)建方案如圖3所示。RFID標(biāo)簽中數(shù)據(jù)通常具有嚴(yán)格的結(jié)構(gòu),一般為一個(gè)連續(xù)的數(shù)據(jù)塊,將標(biāo)簽中數(shù)據(jù)的各數(shù)據(jù)域表示為集合形式F={F1,F(xiàn)2,…,F(xiàn)n}。在標(biāo)簽存儲數(shù)據(jù)時(shí),為每個(gè)數(shù)據(jù)域Fi∈F分配一個(gè)唯一的UID,并以一定的格式存儲相應(yīng)的數(shù)據(jù)區(qū)域內(nèi)容、區(qū)域特征和區(qū)域UID(標(biāo)記數(shù)據(jù)區(qū)域),并轉(zhuǎn)發(fā)至中間件。

wl2-t3.gif

    之后,為每個(gè)數(shù)據(jù)域建立內(nèi)容檢查的規(guī)則。內(nèi)容檢查主要有2個(gè)要求:(1)數(shù)據(jù)必須無特殊字符(即SQL語句中缺省符號,如.,=,*,;);(2)無非法關(guān)鍵字、口令或函數(shù)名(此處的關(guān)鍵字和口令定義為數(shù)據(jù)庫管理系統(tǒng)或其他軟件中的關(guān)鍵字)。

2.1.2 SQL請求規(guī)則建立

    該步驟位于動態(tài)建立SQL語句的程序中(中間件)。對于每個(gè)SQL語句,通過如下步驟對其結(jié)構(gòu)進(jìn)行識別:

    (1)識別所有動態(tài)產(chǎn)生的SQL語句:對中間件創(chuàng)建的所有SQL請求均需進(jìn)行識別操作。

    (2)對成功識別的SQL請求進(jìn)行標(biāo)記:對于成功識別的請求,為其分配給定的唯一標(biāo)示符。

    (3)定義請求語法:為每個(gè)成功識別的請求抽象其語法結(jié)構(gòu),并將其語法加入合法請求列表中。

    (4)存儲成功標(biāo)記的請求:若成功識別SQL請求,則標(biāo)記該請求。

    與Web網(wǎng)絡(luò)系統(tǒng)相比,RFID系統(tǒng)的SQL請求相對簡單。

2.1.3 自動建立SQL請求與SQL語句的合法性檢查

    檢查數(shù)據(jù)的格式與內(nèi)容是SQLIA最簡單有效的防御方案,但很多攻擊方式可避開以上數(shù)據(jù)檢查[4],例如通過使用替代編碼機(jī)制或較復(fù)雜的SQLIA,攻擊者可避開數(shù)據(jù)檢查機(jī)制。針對此類攻擊方案,本文提出相應(yīng)的增強(qiáng)方案,即檢查生成的SQL語句結(jié)構(gòu)。

    將SQL語句分為不同部分,將用戶數(shù)據(jù)相關(guān)的部分刪除,僅保留SQL語句結(jié)構(gòu)的部分(SQL口令)。將SQL口令分為5種類型:關(guān)鍵字、操作符、標(biāo)示符、符號、注釋。

    (1)關(guān)鍵字:DBMS中缺省使用的標(biāo)示符(“SELECT”、“FROM”、“AVG()”等)。

    (2)操作符:DBMS中具有特殊意義的符號(+,=等)。

    (3)標(biāo)示符:數(shù)據(jù)庫中出現(xiàn)的特殊名字(表名、列名或變量)。

    (4)數(shù)據(jù):存入數(shù)據(jù)庫中出現(xiàn)相應(yīng)項(xiàng)的數(shù)據(jù)(如23.56、12/07/1988)。

    (5)注釋:對數(shù)據(jù)庫無意義的內(nèi)容。

    前3種口令對于SQL請求的邏輯與結(jié)構(gòu)至關(guān)重要。第3種口令為用戶輸入內(nèi)容,第5種則由編程者輸入。下面為一個(gè)SQL請求的示例:

    INSERT INTO product(tag_id, product_name)

    VALUES(‘tagid’,‘productname’);

其中,‘tagid’和‘productname’是從RFID標(biāo)簽中獲得的字串內(nèi)容。對該語句各部分的口令進(jìn)行分類:

    “INSERT INTO”與“VALUES”為“關(guān)鍵字”;“product”、“tag_id”與“product_name”為“表示符”;“tagid”與“productname”為“數(shù)據(jù)”。將“數(shù)據(jù)”部分用“?”代替,可得:

    INSERT INTO product(tag_id, product_name) VALUES(?,?);

    本方案通過檢查SQL語句的前3種口令是否合法來保證SQL語句的合法性與安全性。

2.2 SQLIA檢測與防御階段(執(zhí)行)

    系統(tǒng)運(yùn)行時(shí),首先讀取標(biāo)簽中數(shù)據(jù),然后對數(shù)據(jù)進(jìn)行格式與內(nèi)容的檢查。從RFID標(biāo)簽中獲得的數(shù)據(jù)為一連續(xù)數(shù)據(jù)塊。因此,首先中間件必須識別數(shù)據(jù)塊中每個(gè)獨(dú)立的域(表示為tdi,其中i=1,2,…,n);然后為每個(gè)數(shù)據(jù)域分配標(biāo)示符(i),后面利用該標(biāo)示符從已驗(yàn)證的數(shù)據(jù)中提取其驗(yàn)證數(shù)據(jù)(tdi FF);提取每個(gè)數(shù)據(jù)域的特征值(tdivj)(如最大長度、最小長度、數(shù)據(jù)類型等);最終,其特征值必須與驗(yàn)證數(shù)據(jù)(tdiffj)匹配,如果匹配則驗(yàn)證通過,反之,將該RFID標(biāo)簽標(biāo)記為危險(xiǎn)標(biāo)簽。

    (1)算法1:采集數(shù)據(jù)的格式與內(nèi)容檢測

    wl2-gs1.gif

    然后進(jìn)行數(shù)據(jù)內(nèi)容檢查,具體方法為:獲得已驗(yàn)證數(shù)據(jù)(tdiFF(i=1,2,…,n)),并獲得對應(yīng)合法關(guān)鍵字tdiK,然后分析tdi,觀察數(shù)據(jù)中是否包含非法內(nèi)容。如果無非法內(nèi)容,則檢查通過;反之,忽略該請求。

    (2)算法2為SQL請求合法性檢測偽代碼。SQLIA向RFID標(biāo)簽注入附加的代碼,因此,成功的注入攻擊將導(dǎo)致SQL請求的總結(jié)構(gòu)與合法請求的結(jié)構(gòu)有所差異。本算法可動態(tài)產(chǎn)生請求,并同時(shí)防止非法請求的執(zhí)行。

    算法2:請求結(jié)構(gòu)驗(yàn)證

    wl2-gs2.gif

    該算法接收動態(tài)產(chǎn)生的SQL請求(GQ)和對應(yīng)的ID產(chǎn)生驗(yàn)證后的請求。當(dāng)收到請求時(shí),調(diào)用DBMS請求分析函數(shù)(QueryParser)對GQ進(jìn)行分析,使用GQp產(chǎn)生實(shí)際的請求結(jié)構(gòu)(QSa),然后利用ID來獲得相應(yīng)的合法請求結(jié)構(gòu)QSl,最終將QSl與QSa比較。如果兩者不匹配,則拒絕該請求,反之,則執(zhí)行該請求。

    與其他SQL請求匹配技術(shù)相比本算法有以下優(yōu)勢:(1)本算法僅進(jìn)行字串的比較,其他算法有些比較XML等文檔內(nèi)容,因此本算法實(shí)現(xiàn)較簡單;(2)字串的比較計(jì)算開銷較低。對于RFID系統(tǒng),通常RFID標(biāo)簽數(shù)量眾多,而且采集的數(shù)據(jù)也極多,如果計(jì)算開銷較大將不適合實(shí)際應(yīng)用。

3 數(shù)值試驗(yàn)結(jié)果與分析

    試驗(yàn)主要測試SQL請求識別的2個(gè)關(guān)鍵性能:

    (1)未成功檢測的SQLIA的百分比;

    (2)錯(cuò)誤檢測的SQLIA的百分比(將正確SQL檢測為SQLIA)。

    試驗(yàn)中采用3種類型的SQL語句(RFID系統(tǒng)主要的請求類型):SELECT、UPDATE、INSERT。為此,分別選取大量不同的請求,且復(fù)雜程度均不同。

    文獻(xiàn)[5]對不同數(shù)據(jù)庫(MySQL、Postgres、Oracles、SQL Server)均進(jìn)行了試驗(yàn),并獲得了較理想的效果。本試驗(yàn)采用文獻(xiàn)[5]的試驗(yàn)環(huán)境,對多個(gè)數(shù)據(jù)庫進(jìn)行試驗(yàn)。

3.1 攻擊請求檢測

    試驗(yàn)共選取500個(gè)不同請求,對其中170個(gè)請求作處理將其變?yōu)楣粽埱?。?所示為170個(gè)正常請求:68個(gè)“select”型請求、61個(gè)“update”型請求、41個(gè)“insert”型請求。分別采用重言式攻擊、聯(lián)合查詢注入攻擊、后置貪心攻擊、編碼變換攻擊與注釋請求攻擊對上述3種請求進(jìn)行處理,獲得170個(gè)攻擊請求。分別設(shè)置攻擊請求所占百分比(5%、10%、15%…、35%)作分組試驗(yàn)(每組試驗(yàn)共執(zhí)行500次請求)。

wl2-b1.gif

    試驗(yàn)結(jié)果如圖4所示,本算法成功識別所有攻擊請求。因本算法具有兩階段嚴(yán)格檢查,所以成功防御所有類型的注入攻擊。雖然其他部分算法也獲得了較高的成功率,但本算法的計(jì)算效率更高。

wl2-t4.gif

3.2 本算法的計(jì)算開銷

    對于RFID的高吞吐量特性,安全檢測的效率是一個(gè)關(guān)鍵參數(shù)。將本算法與無安全檢測的方案進(jìn)行對比試驗(yàn),比較兩種算法的CPU執(zhí)行時(shí)間。試驗(yàn)中,兩個(gè)試驗(yàn)均執(zhí)行10 000個(gè)請求,每組試驗(yàn)運(yùn)行20次取平均值。

    圖5所示為試驗(yàn)結(jié)果,可看出本算法的開銷極小,原因在于本算法僅對數(shù)據(jù)進(jìn)行檢查,計(jì)算復(fù)雜度極低。因此本算法適合RFID高吞吐量的應(yīng)用場景。

wl2-t5.gif

4 小結(jié)

    隨著RFID系統(tǒng)的廣泛應(yīng)用,其安全性問題日益重要,本文對此提出一種基于兩階段的防御方案,即對采集數(shù)據(jù)的格式與內(nèi)容進(jìn)行檢查;對動態(tài)生成的SQL請求進(jìn)行格式與內(nèi)容的檢查。由于本方案均對數(shù)據(jù)(字符串)進(jìn)行處理,因此具有較好的計(jì)算效率,適用于大規(guī)模、高吞吐量的RFID系統(tǒng)。

參考文獻(xiàn)

[1] 蔣浩,高春華,張林,等.一種基于RFID的室內(nèi)車載監(jiān)控系統(tǒng)定位方法的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2012,39(2):29-33.

[2] 陳宇錚,湯仲喆,倪云峰,等.基于RFID的冷鏈物流監(jiān)測系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(2):263-265.

[3] 李雪,唐文,張華.一種新的Web應(yīng)用防火墻的自學(xué)習(xí)模型[J].小型微型計(jì)算機(jī)系統(tǒng),2014(3):.

[4] HALFOND W G J,ORSO A.AMNESIA:analysis and monitoring for NEutralizing SQL-injection attacks[C].Proceedings of the 20th IEEE/ACM international Conference on Automated Software Engineering.ACM,2005:174-183.

[5] RIEBACK M R,SIMPSON P N D,CRISPO B,et al.RFID malware:design principles and examples[J].Pervasive and Mobile Computing,2006,2(4):405-426.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。