物联传媒 旗下网站
登录 注册
RFID世界网 >  技术文章  >  其他  >  正文

RFID系统中两阶段规则的SQL注入攻击防御

作者:邱春红,贾立国
来源:电子技术应用
日期:2016-09-23 13:48:58
摘要:SQL注入攻击是RFID系统的一个重要攻击方式,RFID系统的吞吐量较大,因此其防御方案应具有较高的计算效率,对此提出一种基于两阶段规则的SQL注入攻击防御方案。首先,按照合法数据域建立合法规则库;然后,对RFID标签中数据的格式与内容进行检查,对非法字符或内容予以标记并忽略;最终,对中间件中动态生成的SQL请求进行格式与内容的检查,对不符合SQL口令规则的请求进行标记并忽略。试验结果证明,本算法可成功检查并防御目前主要类型的注入攻击,且计算效率极高,同时本算法对二次注入攻击具有免疫性。

  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语句一般可直接操作数据库的所有数据,因此,具有较大的安全隐患。

RFID系统中两阶段规则的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阶段建立的规则。

RFID系统中两阶段规则的SQL注入攻击防御

  2.1 规则建立

  SQLIA的根本原因是对输入数据的验证不足,导致攻击数据对数据库进行非法操作,因此,检查RFID标签所采集的数据至关重要。其中,数据检查包括数据的格式与内容的双重检查。

  2.1.1 数据格式与内容检查规则的建立

  当RFID标签存储数据时,建立数据格式与内容检查规则。本文假设SQL的关键字与操作符不会出现在正常RFID标签数据中。

  格式验证与内容检查的规则创建方案如图3所示。RFID标签中数据通常具有严格的结构,一般为一个连续的数据块,将标签中数据的各数据域表示为集合形式F={F1,F2,…,Fn}。在标签存储数据时,为每个数据域Fi∈F分配一个唯一的UID,并以一定的格式存储相应的数据区域内容、区域特征和区域UID(标记数据区域),并转发至中间件。

RFID系统中两阶段规则的SQL注入攻击防御

  之后,为每个数据域建立内容检查的规则。内容检查主要有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:采集数据的格式与内容检测

RFID系统中两阶段规则的SQL注入攻击防御

  然后进行数据内容检查,具体方法为:获得已验证数据(tdiFF(i=1,2,…,n)),并获得对应合法关键字tdiK,然后分析tdi,观察数据中是否包含非法内容。如果无非法内容,则检查通过;反之,忽略该请求。

  (2)算法2为SQL请求合法性检测伪代码。SQLIA向RFID标签注入附加的代码,因此,成功的注入攻击将导致SQL请求的总结构与合法请求的结构有所差异。本算法可动态产生请求,并同时防止非法请求的执行。

  算法2:请求结构验证

RFID系统中两阶段规则的SQL注入攻击防御

  该算法接收动态产生的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次请求)。

RFID系统中两阶段规则的SQL注入攻击防御

  试验结果如图4所示,本算法成功识别所有攻击请求。因本算法具有两阶段严格检查,所以成功防御所有类型的注入攻击。虽然其他部分算法也获得了较高的成功率,但本算法的计算效率更高。

RFID系统中两阶段规则的SQL注入攻击防御

  3.2 本算法的计算开销

  对于RFID的高吞吐量特性,安全检测的效率是一个关键参数。将本算法与无安全检测的方案进行对比试验,比较两种算法的CPU执行时间。试验中,两个试验均执行10 000个请求,每组试验运行20次取平均值。

  图5所示为试验结果,可看出本算法的开销极小,原因在于本算法仅对数据进行检查,计算复杂度极低。因此本算法适合RFID高吞吐量的应用场景。

RFID系统中两阶段规则的SQL注入攻击防御

  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.