文献标识码:A
文章编号: 0258-7998(2015)05-0119-04
0 引言
RFID通过将体积较小的RFID标签置入物体中,从而实现目标物体的自动识别。目前RFID已广泛应用于供应链等系统中,改善了供应链的时间效率与成本[1-2]。但随着RFID在商业生产与物流中的广泛使用,其安全性成为重要问题。目前有许多针对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语句并转发至数据库,从而破坏数据库。
2 SQL注入攻击的检测与防御方案
RFID网络系统具有3个天然属性:
(1)RFID标签中的数据具有严格的格式与结构,且整个系统中仅中间件模块生成SQL语句。
(2)RFID网络对SQL请求的格式进行规范与限制。
(3)RFID标签采集数据的吞吐量较大。
图2为SQL注入攻击的检测与防御方案总体结构。该方案包含2个阶段:(1)规则建立阶段:该阶段为不同应用系统建立合适的数据检查的规则;(2)检测与防御阶段:严格执行第1阶段建立的规则。
2.1 规则建立
SQLIA的根本原因是对输入数据的验证不足,导致攻击数据对数据库进行非法操作,因此,检查RFID标签所采集的数据至关重要。其中,数据检查包括数据的格式与内容的双重检查。
2.1.1 数据格式与内容检查规则的建立
当RFID标签存储数据时,建立数据格式与内容检查规则。本文假设SQL的关键字与操作符不会出现在正常RFID标签数据中。
格式验证与内容检查的规则创建方案如图3所示。RFID标签中数据通常具有严格的结构,一般为一个连续的数据块,将标签中数据的各数据域表示为集合形式F={F1,F2,…,Fn}。在标签存储数据时,为每个数据域Fi∈F分配一个唯一的UID,并以一定的格式存储相应的数据区域内容、区域特征和区域UID(标记数据区域),并转发至中间件。
之后,为每个数据域建立内容检查的规则。内容检查主要有2个要求:(1)数据必须无特殊字符(即SQL语句中缺省符号,如.,=,*,;);(2)无非法关键字、口令或函数名(此处的关键字和口令定义为数据库管理系统或其他软件中的关键字)。
2.1.2 SQL请求规则建立
该步骤位于动态建立SQL语句的程序中(中间件)。对于每个SQL语句,通过如下步骤对其结构进行识别:
(1)识别所有动态产生的SQL语句:对中间件创建的所有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检测与防御阶段(执行)
系统运行时,首先读取标签中数据,然后对数据进行格式与内容的检查。从RFID标签中获得的数据为一连续数据块。因此,首先中间件必须识别数据块中每个独立的域(表示为tdi,其中i=1,2,…,n);然后为每个数据域分配标示符(i),后面利用该标示符从已验证的数据中提取其验证数据(tdiFF);提取每个数据域的特征值(tdivj)(如最大长度、最小长度、数据类型等);最终,其特征值必须与验证数据(tdiffj)匹配,如果匹配则验证通过,反之,将该RFID标签标记为危险标签。
(1)算法1:采集数据的格式与内容检测
然后进行数据内容检查,具体方法为:获得已验证数据(tdiFF(i=1,2,…,n)),并获得对应合法关键字tdiK,然后分析tdi,观察数据中是否包含非法内容。如果无非法内容,则检查通过;反之,忽略该请求。
(2)算法2为SQL请求合法性检测伪代码。SQLIA向RFID标签注入附加的代码,因此,成功的注入攻击将导致SQL请求的总结构与合法请求的结构有所差异。本算法可动态产生请求,并同时防止非法请求的执行。
算法2:请求结构验证
该算法接收动态产生的SQL请求(GQ)和对应的ID产生验证后的请求。当收到请求时,调用DBMS请求分析函数(QueryParser)对GQ进行分析,使用GQp产生实际的请求结构(QSa),然后利用ID来获得相应的合法请求结构QSl,最终将QSl与QSa比较。如果两者不匹配,则拒绝该请求,反之,则执行该请求。
与其他SQL请求匹配技术相比本算法有以下优势:(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]的试验环境,对多个数据库进行试验。
3.1 攻击请求检测
试验共选取500个不同请求,对其中170个请求作处理将其变为攻击请求。表1所示为170个正常请求:68个“select”型请求、61个“update”型请求、41个“insert”型请求。分别采用重言式攻击、联合查询注入攻击、后置贪心攻击、编码变换攻击与注释请求攻击对上述3种请求进行处理,获得170个攻击请求。分别设置攻击请求所占百分比(5%、10%、15%…、35%)作分组试验(每组试验共执行500次请求)。
试验结果如图4所示,本算法成功识别所有攻击请求。因本算法具有两阶段严格检查,所以成功防御所有类型的注入攻击。虽然其他部分算法也获得了较高的成功率,但本算法的计算效率更高。
3.2 本算法的计算开销
对于RFID的高吞吐量特性,安全检测的效率是一个关键参数。将本算法与无安全检测的方案进行对比试验,比较两种算法的CPU执行时间。试验中,两个试验均执行10 000个请求,每组试验运行20次取平均值。
图5所示为试验结果,可看出本算法的开销极小,原因在于本算法仅对数据进行检查,计算复杂度极低。因此本算法适合RFID高吞吐量的应用场景。
4 小结
随着RFID系统的广泛应用,其安全性问题日益重要,本文对此提出一种基于两阶段的防御方案,即对采集数据的格式与内容进行检查;对动态生成的SQL请求进行格式与内容的检查。由于本方案均对数据(字符串)进行处理,因此具有较好的计算效率,适用于大规模、高吞吐量的RFID系统。
参考文献
[1] 蒋浩,高春华,张林,等.一种基于RFID的室内车载监控系统定位方法的设计与实现[J].计算机科学,2012,39(2):29-33.
[2] 陈宇铮,汤仲喆,倪云峰,等.基于RFID的冷链物流监测系统的设计[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.