《電子技術(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ì)算效率,對(duì)此提出一種基于兩階段規(guī)則的SQL注入攻擊防御方案。首先,按照合法數(shù)據(jù)域建立合法規(guī)則庫;然后,對(duì)RFID標(biāo)簽中數(shù)據(jù)的格式與內(nèi)容進(jìn)行檢查,對(duì)非法字符或內(nèi)容予以標(biāo)記并忽略;最終,對(duì)中間件中動(dòng)態(tài)生成的SQL請(qǐng)求進(jìn)行格式與內(nèi)容的檢查,對(duì)不符合SQL口令規(guī)則的請(qǐng)求進(jìn)行標(biāo)記并忽略。試驗(yàn)結(jié)果證明,本算法可成功檢查并防御目前主要類型的注入攻擊,且計(jì)算效率極高,同時(shí)本算法對(duì)二次注入攻擊具有免疫性。
中圖分類號(hào): TP393.08
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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)物體的自動(dòng)識(shí)別。目前RFID已廣泛應(yīng)用于供應(yīng)鏈等系統(tǒng)中,改善了供應(yīng)鏈的時(shí)間效率與成本[1-2]。但隨著RFID在商業(yè)生產(chǎn)與物流中的廣泛使用,其安全性成為重要問題。目前有許多針對(duì)RFID系統(tǒng)安全問題的研究,其中RFID標(biāo)簽中軟件的漏洞問題是RFID系統(tǒng)與生俱來的安全問題,而SQL注入攻擊[3]是其中一個(gè)易受攻擊的關(guān)鍵點(diǎn)。

    本文對(duì)此提出一種RFID系統(tǒng)中SQL注入攻擊(SQLIA)的檢測(cè)與防御方案。對(duì)RFID標(biāo)簽數(shù)據(jù)以及SQL請(qǐng)求進(jìn)行兩階段的檢查:(1)基本數(shù)據(jù)格式與內(nèi)容的檢查;(2)中間件中SQL請(qǐng)求的邏輯檢查。試驗(yàn)表明本方案取得了較好的SQLIA的防御效果,對(duì)多種主流攻擊形式均具有免疫能力,同時(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ù)庫,而對(duì)于RFID系統(tǒng),通常由中間件根據(jù)標(biāo)簽中的數(shù)據(jù)自動(dòng)生成相應(yīng)的SQL語句。生成的SQL語句一般可直接操作數(shù)據(jù)庫的所有數(shù)據(jù),因此,具有較大的安全隱患。

wl2-t1.gif

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

2 SQL注入攻擊的檢測(cè)與防御方案

    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ò)對(duì)SQL請(qǐng)求的格式進(jìn)行規(guī)范與限制。

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

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

wl2-t2.gif

2.1 規(guī)則建立

    SQLIA的根本原因是對(duì)輸入數(shù)據(jù)的驗(yàn)證不足,導(dǎo)致攻擊數(shù)據(jù)對(duì)數(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)簽存儲(chǔ)數(shù)據(jù)時(shí),建立數(shù)據(jù)格式與內(nèi)容檢查規(guī)則。本文假設(shè)SQL的關(guān)鍵字與操作符不會(huì)出現(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)簽存儲(chǔ)數(shù)據(jù)時(shí),為每個(gè)數(shù)據(jù)域Fi∈F分配一個(gè)唯一的UID,并以一定的格式存儲(chǔ)相應(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語句中缺省符號(hào),如.,=,*,;);(2)無非法關(guān)鍵字、口令或函數(shù)名(此處的關(guān)鍵字和口令定義為數(shù)據(jù)庫管理系統(tǒng)或其他軟件中的關(guān)鍵字)。

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

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

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

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

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

    (4)存儲(chǔ)成功標(biāo)記的請(qǐng)求:若成功識(shí)別SQL請(qǐng)求,則標(biāo)記該請(qǐng)求。

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

2.1.3 自動(dòng)建立SQL請(qǐng)求與SQL語句的合法性檢查

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

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

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

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

    (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)注釋:對(duì)數(shù)據(jù)庫無意義的內(nèi)容。

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

    INSERT INTO product(tag_id, product_name)

    VALUES(‘tagid’,‘productname’);

其中,‘tagid’和‘productname’是從RFID標(biāo)簽中獲得的字串內(nèi)容。對(duì)該語句各部分的口令進(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檢測(cè)與防御階段(執(zhí)行)

    系統(tǒng)運(yùn)行時(shí),首先讀取標(biāo)簽中數(shù)據(jù),然后對(duì)數(shù)據(jù)進(jìn)行格式與內(nèi)容的檢查。從RFID標(biāo)簽中獲得的數(shù)據(jù)為一連續(xù)數(shù)據(jù)塊。因此,首先中間件必須識(shí)別數(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)容檢測(cè)

    wl2-gs1.gif

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

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

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

    wl2-gs2.gif

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

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

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

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

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

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

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

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

3.1 攻擊請(qǐng)求檢測(cè)

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

wl2-b1.gif

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

wl2-t4.gif

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

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

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

wl2-t5.gif

4 小結(jié)

    隨著RFID系統(tǒng)的廣泛應(yīng)用,其安全性問題日益重要,本文對(duì)此提出一種基于兩階段的防御方案,即對(duì)采集數(shù)據(jù)的格式與內(nèi)容進(jìn)行檢查;對(duì)動(dòng)態(tài)生成的SQL請(qǐng)求進(jìn)行格式與內(nèi)容的檢查。由于本方案均對(duì)數(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)測(cè)系統(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)載。