文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)05-0119-04
0 引言
RFID通過(guò)將體積較小的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)與物流中的廣泛使用,其安全性成為重要問(wèn)題。目前有許多針對(duì)RFID系統(tǒng)安全問(wèn)題的研究,其中RFID標(biāo)簽中軟件的漏洞問(wèn)題是RFID系統(tǒng)與生俱來(lái)的安全問(wèn)題,而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安全問(wèn)題介紹
圖1所示為典型RFID系統(tǒng),其包含常見(jiàn)的后端組件(數(shù)據(jù)庫(kù)、中間件和具體應(yīng)用)與RFID前端組件(RFID標(biāo)簽與閱讀器)。當(dāng)前,大多數(shù)數(shù)據(jù)庫(kù)使用SQL語(yǔ)句操作數(shù)據(jù)庫(kù),而對(duì)于RFID系統(tǒng),通常由中間件根據(jù)標(biāo)簽中的數(shù)據(jù)自動(dòng)生成相應(yīng)的SQL語(yǔ)句。生成的SQL語(yǔ)句一般可直接操作數(shù)據(jù)庫(kù)的所有數(shù)據(jù),因此,具有較大的安全隱患。
圖1中的虛線(xiàn)部分為SQL注入攻擊的常見(jiàn)方法示意圖,SQL攻擊通常將惡意SQL請(qǐng)求代碼嵌入正常SQL請(qǐng)求來(lái)實(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語(yǔ)句并轉(zhuǎn)發(fā)至數(shù)據(jù)庫(kù),從而破壞數(shù)據(jù)庫(kù)。
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語(yǔ)句。
(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ī)則。
2.1 規(guī)則建立
SQLIA的根本原因是對(duì)輸入數(shù)據(jù)的驗(yàn)證不足,導(dǎo)致攻擊數(shù)據(jù)對(duì)數(shù)據(jù)庫(kù)進(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ā)至中間件。
之后,為每個(gè)數(shù)據(jù)域建立內(nèi)容檢查的規(guī)則。內(nèi)容檢查主要有2個(gè)要求:(1)數(shù)據(jù)必須無(wú)特殊字符(即SQL語(yǔ)句中缺省符號(hào),如.,=,*,;);(2)無(wú)非法關(guān)鍵字、口令或函數(shù)名(此處的關(guān)鍵字和口令定義為數(shù)據(jù)庫(kù)管理系統(tǒng)或其他軟件中的關(guān)鍵字)。
2.1.2 SQL請(qǐng)求規(guī)則建立
該步驟位于動(dòng)態(tài)建立SQL語(yǔ)句的程序中(中間件)。對(duì)于每個(gè)SQL語(yǔ)句,通過(guò)如下步驟對(duì)其結(jié)構(gòu)進(jìn)行識(shí)別:
(1)識(shí)別所有動(dòng)態(tài)產(chǎn)生的SQL語(yǔ)句:對(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)求語(yǔ)法:為每個(gè)成功識(shí)別的請(qǐng)求抽象其語(yǔ)法結(jié)構(gòu),并將其語(yǔ)法加入合法請(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ì)簡(jiǎn)單。
2.1.3 自動(dòng)建立SQL請(qǐng)求與SQL語(yǔ)句的合法性檢查
檢查數(shù)據(jù)的格式與內(nèi)容是SQLIA最簡(jiǎn)單有效的防御方案,但很多攻擊方式可避開(kāi)以上數(shù)據(jù)檢查[4],例如通過(guò)使用替代編碼機(jī)制或較復(fù)雜的SQLIA,攻擊者可避開(kāi)數(shù)據(jù)檢查機(jī)制。針對(duì)此類(lèi)攻擊方案,本文提出相應(yīng)的增強(qiáng)方案,即檢查生成的SQL語(yǔ)句結(jié)構(gòu)。
將SQL語(yǔ)句分為不同部分,將用戶(hù)數(shù)據(jù)相關(guān)的部分刪除,僅保留SQL語(yǔ)句結(jié)構(gòu)的部分(SQL口令)。將SQL口令分為5種類(lèi)型:關(guān)鍵字、操作符、標(biāo)示符、符號(hào)、注釋。
(1)關(guān)鍵字:DBMS中缺省使用的標(biāo)示符(“SELECT”、“FROM”、“AVG()”等)。
(2)操作符:DBMS中具有特殊意義的符號(hào)(+,=等)。
(3)標(biāo)示符:數(shù)據(jù)庫(kù)中出現(xiàn)的特殊名字(表名、列名或變量)。
(4)數(shù)據(jù):存入數(shù)據(jù)庫(kù)中出現(xiàn)相應(yīng)項(xiàng)的數(shù)據(jù)(如23.56、12/07/1988)。
(5)注釋?zhuān)簩?duì)數(shù)據(jù)庫(kù)無(wú)意義的內(nèi)容。
前3種口令對(duì)于SQL請(qǐng)求的邏輯與結(jié)構(gòu)至關(guān)重要。第3種口令為用戶(hù)輸入內(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ì)該語(yǔ)句各部分的口令進(jìn)行分類(lèi):
“INSERT INTO”與“VALUES”為“關(guān)鍵字”;“product”、“tag_id”與“product_name”為“表示符”;“tagid”與“productname”為“數(shù)據(jù)”。將“數(shù)據(jù)”部分用“?”代替,可得:
INSERT INTO product(tag_id, product_name) VALUES(?,?);
本方案通過(guò)檢查SQL語(yǔ)句的前3種口令是否合法來(lái)保證SQL語(yǔ)句的合法性與安全性。
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)(如最大長(zhǎng)度、最小長(zhǎng)度、數(shù)據(jù)類(lèi)型等);最終,其特征值必須與驗(yàn)證數(shù)據(jù)(tdiffj)匹配,如果匹配則驗(yàn)證通過(guò),反之,將該RFID標(biāo)簽標(biāo)記為危險(xiǎn)標(biāo)簽。
(1)算法1:采集數(shù)據(jù)的格式與內(nèi)容檢測(cè)
然后進(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)容。如果無(wú)非法內(nèi)容,則檢查通過(guò);反之,忽略該請(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)證
該算法接收動(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來(lái)獲得相應(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)較簡(jiǎn)單;(2)字串的比較計(jì)算開(kāi)銷(xiāo)較低。對(duì)于RFID系統(tǒng),通常RFID標(biāo)簽數(shù)量眾多,而且采集的數(shù)據(jù)也極多,如果計(jì)算開(kāi)銷(xiāo)較大將不適合實(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種類(lèi)型的SQL語(yǔ)句(RFID系統(tǒng)主要的請(qǐng)求類(lèi)型):SELECT、UPDATE、INSERT。為此,分別選取大量不同的請(qǐng)求,且復(fù)雜程度均不同。
文獻(xiàn)[5]對(duì)不同數(shù)據(jù)庫(kù)(MySQL、Postgres、Oracles、SQL Server)均進(jìn)行了試驗(yàn),并獲得了較理想的效果。本試驗(yàn)采用文獻(xiàn)[5]的試驗(yàn)環(huán)境,對(duì)多個(gè)數(shù)據(jù)庫(kù)進(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)合查詢(xú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)求)。
試驗(yàn)結(jié)果如圖4所示,本算法成功識(shí)別所有攻擊請(qǐng)求。因本算法具有兩階段嚴(yán)格檢查,所以成功防御所有類(lèi)型的注入攻擊。雖然其他部分算法也獲得了較高的成功率,但本算法的計(jì)算效率更高。
3.2 本算法的計(jì)算開(kāi)銷(xiāo)
對(duì)于RFID的高吞吐量特性,安全檢測(cè)的效率是一個(gè)關(guān)鍵參數(shù)。將本算法與無(wú)安全檢測(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é)果,可看出本算法的開(kāi)銷(xiāo)極小,原因在于本算法僅對(duì)數(shù)據(jù)進(jìn)行檢查,計(jì)算復(fù)雜度極低。因此本算法適合RFID高吞吐量的應(yīng)用場(chǎng)景。
4 小結(jié)
隨著RFID系統(tǒng)的廣泛應(yīng)用,其安全性問(wèn)題日益重要,本文對(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)車(chē)載監(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.