文獻標識碼: A
文章編號: 0258-7998(2015)05-0119-04
0 引言
RFID通過將體積較小的RFID標簽置入物體中,,從而實現(xiàn)目標物體的自動識別。目前RFID已廣泛應用于供應鏈等系統(tǒng)中,,改善了供應鏈的時間效率與成本[1-2],。但隨著RFID在商業(yè)生產(chǎn)與物流中的廣泛使用,其安全性成為重要問題,。目前有許多針對RFID系統(tǒng)安全問題的研究,,其中RFID標簽中軟件的漏洞問題是RFID系統(tǒng)與生俱來的安全問題,而SQL注入攻擊[3]是其中一個易受攻擊的關鍵點,。
本文對此提出一種RFID系統(tǒng)中SQL注入攻擊(SQLIA)的檢測與防御方案,。對RFID標簽數(shù)據(jù)以及SQL請求進行兩階段的檢查:(1)基本數(shù)據(jù)格式與內(nèi)容的檢查;(2)中間件中SQL請求的邏輯檢查,。試驗表明本方案取得了較好的SQLIA的防御效果,,對多種主流攻擊形式均具有免疫能力,同時,,具有較高的計算效率及較好的實用價值,。
1 RFID安全問題介紹
圖1所示為典型RFID系統(tǒng),其包含常見的后端組件(數(shù)據(jù)庫,、中間件和具體應用)與RFID前端組件(RFID標簽與閱讀器),。當前,大多數(shù)數(shù)據(jù)庫使用SQL語句操作數(shù)據(jù)庫,而對于RFID系統(tǒng),,通常由中間件根據(jù)標簽中的數(shù)據(jù)自動生成相應的SQL語句,。生成的SQL語句一般可直接操作數(shù)據(jù)庫的所有數(shù)據(jù),因此,,具有較大的安全隱患,。
圖1中的虛線部分為SQL注入攻擊的常見方法示意圖,SQL攻擊通常將惡意SQL請求代碼嵌入正常SQL請求來實現(xiàn)攻擊,。RFID系統(tǒng)中,,若存在攻擊者,攻擊者可將惡意數(shù)據(jù)存入RFID標簽(可物理侵入或軟件侵入),,更甚者,,攻擊者直接模擬產(chǎn)生新的RFID攻擊標簽(其中包含攻擊數(shù)據(jù)),并使該標簽可被讀卡器識別并閱讀,。中間件將惡意數(shù)據(jù)轉換成惡意SQL語句并轉發(fā)至數(shù)據(jù)庫,,從而破壞數(shù)據(jù)庫。
2 SQL注入攻擊的檢測與防御方案
RFID網(wǎng)絡系統(tǒng)具有3個天然屬性:
(1)RFID標簽中的數(shù)據(jù)具有嚴格的格式與結構,,且整個系統(tǒng)中僅中間件模塊生成SQL語句,。
(2)RFID網(wǎng)絡對SQL請求的格式進行規(guī)范與限制。
(3)RFID標簽采集數(shù)據(jù)的吞吐量較大,。
圖2為SQL注入攻擊的檢測與防御方案總體結構,。該方案包含2個階段:(1)規(guī)則建立階段:該階段為不同應用系統(tǒng)建立合適的數(shù)據(jù)檢查的規(guī)則;(2)檢測與防御階段:嚴格執(zhí)行第1階段建立的規(guī)則,。
2.1 規(guī)則建立
SQLIA的根本原因是對輸入數(shù)據(jù)的驗證不足,,導致攻擊數(shù)據(jù)對數(shù)據(jù)庫進行非法操作,因此,,檢查RFID標簽所采集的數(shù)據(jù)至關重要,。其中,數(shù)據(jù)檢查包括數(shù)據(jù)的格式與內(nèi)容的雙重檢查,。
2.1.1 數(shù)據(jù)格式與內(nèi)容檢查規(guī)則的建立
當RFID標簽存儲數(shù)據(jù)時,,建立數(shù)據(jù)格式與內(nèi)容檢查規(guī)則,。本文假設SQL的關鍵字與操作符不會出現(xiàn)在正常RFID標簽數(shù)據(jù)中,。
格式驗證與內(nèi)容檢查的規(guī)則創(chuàng)建方案如圖3所示。RFID標簽中數(shù)據(jù)通常具有嚴格的結構,,一般為一個連續(xù)的數(shù)據(jù)塊,,將標簽中數(shù)據(jù)的各數(shù)據(jù)域表示為集合形式F={F1,F(xiàn)2,,…,,F(xiàn)n}。在標簽存儲數(shù)據(jù)時,為每個數(shù)據(jù)域Fi∈F分配一個唯一的UID,,并以一定的格式存儲相應的數(shù)據(jù)區(qū)域內(nèi)容,、區(qū)域特征和區(qū)域UID(標記數(shù)據(jù)區(qū)域),并轉發(fā)至中間件,。
之后,,為每個數(shù)據(jù)域建立內(nèi)容檢查的規(guī)則。內(nèi)容檢查主要有2個要求:(1)數(shù)據(jù)必須無特殊字符(即SQL語句中缺省符號,,如.,,=,*,,,;);(2)無非法關鍵字,、口令或函數(shù)名(此處的關鍵字和口令定義為數(shù)據(jù)庫管理系統(tǒng)或其他軟件中的關鍵字),。
2.1.2 SQL請求規(guī)則建立
該步驟位于動態(tài)建立SQL語句的程序中(中間件)。對于每個SQL語句,,通過如下步驟對其結構進行識別:
(1)識別所有動態(tài)產(chǎn)生的SQL語句:對中間件創(chuàng)建的所有SQL請求均需進行識別操作,。
(2)對成功識別的SQL請求進行標記:對于成功識別的請求,為其分配給定的唯一標示符,。
(3)定義請求語法:為每個成功識別的請求抽象其語法結構,,并將其語法加入合法請求列表中。
(4)存儲成功標記的請求:若成功識別SQL請求,,則標記該請求,。
與Web網(wǎng)絡系統(tǒng)相比,RFID系統(tǒng)的SQL請求相對簡單,。
2.1.3 自動建立SQL請求與SQL語句的合法性檢查
檢查數(shù)據(jù)的格式與內(nèi)容是SQLIA最簡單有效的防御方案,,但很多攻擊方式可避開以上數(shù)據(jù)檢查[4],例如通過使用替代編碼機制或較復雜的SQLIA,,攻擊者可避開數(shù)據(jù)檢查機制,。針對此類攻擊方案,本文提出相應的增強方案,,即檢查生成的SQL語句結構,。
將SQL語句分為不同部分,將用戶數(shù)據(jù)相關的部分刪除,,僅保留SQL語句結構的部分(SQL口令),。將SQL口令分為5種類型:關鍵字、操作符,、標示符,、符號,、注釋。
(1)關鍵字:DBMS中缺省使用的標示符(“SELECT”,、“FROM”,、“AVG()”等)。
(2)操作符:DBMS中具有特殊意義的符號(+,,=等),。
(3)標示符:數(shù)據(jù)庫中出現(xiàn)的特殊名字(表名、列名或變量),。
(4)數(shù)據(jù):存入數(shù)據(jù)庫中出現(xiàn)相應項的數(shù)據(jù)(如23.56,、12/07/1988)。
(5)注釋:對數(shù)據(jù)庫無意義的內(nèi)容,。
前3種口令對于SQL請求的邏輯與結構至關重要,。第3種口令為用戶輸入內(nèi)容,第5種則由編程者輸入,。下面為一個SQL請求的示例:
INSERT INTO product(tag_id, product_name)
VALUES(‘tagid’,‘productname’);
其中,,‘tagid’和‘productname’是從RFID標簽中獲得的字串內(nèi)容。對該語句各部分的口令進行分類:
“INSERT INTO”與“VALUES”為“關鍵字”,;“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)運行時,,首先讀取標簽中數(shù)據(jù),然后對數(shù)據(jù)進行格式與內(nèi)容的檢查,。從RFID標簽中獲得的數(shù)據(jù)為一連續(xù)數(shù)據(jù)塊,。因此,首先中間件必須識別數(shù)據(jù)塊中每個獨立的域(表示為tdi,,其中i=1,,2,…,,n),;然后為每個數(shù)據(jù)域分配標示符(i),后面利用該標示符從已驗證的數(shù)據(jù)中提取其驗證數(shù)據(jù)(tdi FF),;提取每個數(shù)據(jù)域的特征值(tdivj)(如最大長度,、最小長度,、數(shù)據(jù)類型等),;最終,,其特征值必須與驗證數(shù)據(jù)(tdiffj)匹配,如果匹配則驗證通過,,反之,,將該RFID標簽標記為危險標簽。
(1)算法1:采集數(shù)據(jù)的格式與內(nèi)容檢測
然后進行數(shù)據(jù)內(nèi)容檢查,,具體方法為:獲得已驗證數(shù)據(jù)(tdiFF(i=1,,2,…,,n)),,并獲得對應合法關鍵字tdiK,然后分析tdi,,觀察數(shù)據(jù)中是否包含非法內(nèi)容,。如果無非法內(nèi)容,則檢查通過,;反之,,忽略該請求。
(2)算法2為SQL請求合法性檢測偽代碼,。SQLIA向RFID標簽注入附加的代碼,,因此,成功的注入攻擊將導致SQL請求的總結構與合法請求的結構有所差異,。本算法可動態(tài)產(chǎn)生請求,,并同時防止非法請求的執(zhí)行。
算法2:請求結構驗證
該算法接收動態(tài)產(chǎn)生的SQL請求(GQ)和對應的ID產(chǎn)生驗證后的請求,。當收到請求時,,調用DBMS請求分析函數(shù)(QueryParser)對GQ進行分析,使用GQp產(chǎn)生實際的請求結構(QSa),,然后利用ID來獲得相應的合法請求結構QSl,,最終將QSl與QSa比較。如果兩者不匹配,,則拒絕該請求,,反之,則執(zhí)行該請求,。
與其他SQL請求匹配技術相比本算法有以下優(yōu)勢:(1)本算法僅進行字串的比較,,其他算法有些比較XML等文檔內(nèi)容,因此本算法實現(xiàn)較簡單,;(2)字串的比較計算開銷較低,。對于RFID系統(tǒng),通常RFID標簽數(shù)量眾多,,而且采集的數(shù)據(jù)也極多,,如果計算開銷較大將不適合實際應用,。
3 數(shù)值試驗結果與分析
試驗主要測試SQL請求識別的2個關鍵性能:
(1)未成功檢測的SQLIA的百分比;
(2)錯誤檢測的SQLIA的百分比(將正確SQL檢測為SQLIA),。
試驗中采用3種類型的SQL語句(RFID系統(tǒng)主要的請求類型):SELECT,、UPDATE、INSERT,。為此,,分別選取大量不同的請求,且復雜程度均不同,。
文獻[5]對不同數(shù)據(jù)庫(MySQL,、Postgres、Oracles,、SQL Server)均進行了試驗,,并獲得了較理想的效果。本試驗采用文獻[5]的試驗環(huán)境,,對多個數(shù)據(jù)庫進行試驗,。
3.1 攻擊請求檢測
試驗共選取500個不同請求,對其中170個請求作處理將其變?yōu)楣粽埱?。?所示為170個正常請求:68個“select”型請求,、61個“update”型請求、41個“insert”型請求,。分別采用重言式攻擊,、聯(lián)合查詢注入攻擊、后置貪心攻擊,、編碼變換攻擊與注釋請求攻擊對上述3種請求進行處理,,獲得170個攻擊請求。分別設置攻擊請求所占百分比(5%,、10%,、15%…、35%)作分組試驗(每組試驗共執(zhí)行500次請求),。
試驗結果如圖4所示,,本算法成功識別所有攻擊請求。因本算法具有兩階段嚴格檢查,,所以成功防御所有類型的注入攻擊,。雖然其他部分算法也獲得了較高的成功率,但本算法的計算效率更高,。
3.2 本算法的計算開銷
對于RFID的高吞吐量特性,,安全檢測的效率是一個關鍵參數(shù)。將本算法與無安全檢測的方案進行對比試驗,,比較兩種算法的CPU執(zhí)行時間,。試驗中,,兩個試驗均執(zhí)行10 000個請求,每組試驗運行20次取平均值,。
圖5所示為試驗結果,可看出本算法的開銷極小,,原因在于本算法僅對數(shù)據(jù)進行檢查,,計算復雜度極低。因此本算法適合RFID高吞吐量的應用場景,。
4 小結
隨著RFID系統(tǒng)的廣泛應用,,其安全性問題日益重要,本文對此提出一種基于兩階段的防御方案,,即對采集數(shù)據(jù)的格式與內(nèi)容進行檢查,;對動態(tài)生成的SQL請求進行格式與內(nèi)容的檢查。由于本方案均對數(shù)據(jù)(字符串)進行處理,,因此具有較好的計算效率,,適用于大規(guī)模、高吞吐量的RFID系統(tǒng),。
參考文獻
[1] 蔣浩,,高春華,張林,,等.一種基于RFID的室內(nèi)車載監(jiān)控系統(tǒng)定位方法的設計與實現(xiàn)[J].計算機科學,,2012,39(2):29-33.
[2] 陳宇錚,,湯仲喆,,倪云峰,等.基于RFID的冷鏈物流監(jiān)測系統(tǒng)的設計[J].計算機應用與軟件,,2013,,30(2):263-265.
[3] 李雪,唐文,,張華.一種新的Web應用防火墻的自學習模型[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.