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