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

面向RFID系统的SQL注入攻击检测和防御算法

作者:不详
来源:中国百科网
日期:2015-12-10 15:57:33
摘要:针对RFID系统中传统的SQL注入攻击(SQLIA)检测算法成本较高且检测率较低的问题,提出了一种基于数据完整性策略的SQL注入攻击检测和防御算法。利用数据完整性策略,确保输入数据为强类型、语法正确、在长度边界内、仅包含允许的字符、正确签名数字且数字在范围边界内等约束,以防御SQL注入攻击。通过检测查询是否符合意图符合条件、大小符合条件和标识符符合条件来检测SQL注入攻击。实验结果显示,算法具有较高的执行效率,消耗时间仅为节点序列比对算法的29.7%,仅为快速比对算法的76.0%。算法的检测率比常用的检测工具BSQL Hacker和Pangolin分别高出13.8%和20.6%,表明本算法能够保证正常查询,可有效检测和防御SQL注入攻击。

  0 引言

  射频识别(Radio Frequency Identification,RFID)技术是一种标签技术[1],它能够自动识别不在视线内的实体,大大提高了自动化效率[2]。然而,RFID系统存在许多安全性问题,其中一个主要问题为SQL注入攻击(SQL Injection Attacks,SQLIA)[3,4],增加了RFID标签的潜在威胁[5]。因此,检测和防御RFID系统中SQLIA对RFID的应用至关重要。文献[6]提出了一种基于数据完整性策略的SQL攻击检测算法,通过运行监控确保产生的查询符合条件,一定程度上提高了安全性。然而,该算法期望存在原始SQL结构,需要人工干预建立所有组件,成本较高。

  本文提出一种新的SQL注入攻击的检测和防御算法,利用数据完整性策略和意图符合条件、大小符合条件和标识符符合条件来检测和防御SQL注入攻击。实验结果表明了本算法的有效性及高效性。

  1 SQL注入攻击问题

  拥有RFID恶意软件检测和防御机制对于维护能RFID系统非常重要[7],本文中SQLIA问题如下[8]:

  已知:动态产生SQL查询q和I=t1,t2,…,tn输入数据集;

  问题:SQLIA检测问题是设计一种算法A,在下列约束下确定q是否为SQL注入攻击:

  (a)I=t1,t2,…,tn输入数据集仅来源于RFID标签;

  (b)中间件基于I=t1,t2,…,tn输入数据集生成q;

  (c)q能执行企业数据库的数据插入、数据更新、数据删除和数据检索操作。

  2 提出的SQLIA检测和防御算法

  定义1(动态SQL查询):给定应用程序P和n条输入数据d1,d2,…,dn,通过映射RFID标签输入到常量查询字符串,P构建动态SQL查询q:

  q←P(d1,d2,…,dn)(1)

  部分查询静态配置于中间件中,而其他部分从输入参数导出。

  定义2(恶意SQL):将利用源自RFID标签的输入d1,d2,…,dn数据形成的动态SQL查询q,若满足下列任意条件,则视为恶意SQL:

  (1)意图符合:substr(qi)∈{substr(d1),…,substr(dm)}

  (2)大小符合:M

  (3)标识符符合:di.vki.v|v∈{op,artry,type,size}

  意图符合条件确保正常SQL语句不能是用于产生动态查询的程序的输入字符串元素。大小符合条件确保输入数据的大小(F)不能大于标识符数据的大小(M)。标识符符合条件严格限制每个输入数据(如d1,d2,…,dm),使其遵守标识符的属性。

面向RFID系统的SQL注入攻击检测和防御算法

  图1描述了提出的SQLIA检测和防御算法的整体结构,包含数据完整性策略、意图符合、大小符合和SQL符合部分。

  2.1 数据完整性策略

  SQLIA攻击依赖于不合法结构的数据成功输入,为了解决这一问题,使用数据完整性策略在数据库标识符值上定义一组约束,每个动态生成的SQL语句包含一组标识符:

  I=〈k1〈P〉,…,kn〈P〉〉(2)

  每个标识符ki∈I有一组属性ki〈P〉=〈p1,…,pn〉,例如数据类型和数据位允许的最大尺寸。

  这种策略用以确保数据为强类型、语法正确、在长度边界内、仅包含允许的字符、正确签名数字且数字在范围边界内。策略对每个标识符使用一组数据完整性规则,通过验证每个标识符声明的属性来定义这些输入数据完整性规则。

面向RFID系统的SQL注入攻击检测和防御算法

  图2为使用巴科斯范式表示系统标识符的约束,“op”性质规定“创建、读、更新、删除”中的哪些操作允许在标识符上执行。SQL编程中,4个基本函数(创建、读、更新、删除)对应于INSERT、SELECT、UPDATE(SET)和DELETE[9]。类型性质规定无论它们持有什么,都将视为字符串或数值,而不是任意代码。大小性质规定可存储的数字或字符的最大数量。

  2.2 SQL注入攻击检测和防御

  本文算法使用有关SQL语法知识的架构和策略检测一个查询是否为SQLIA,如算法1所示。算法的输入为动态产生的SQL语句、从RFID标签获得的数据集D={d1,d2,…,dm}和用于程序P生成SQL的输入参数集S={t1,t2,…,tn}。

  在运行过程中,当由中间件产生的SQL查询的语法结构与RFID应用程序开发者所设定的SQL语法结构不同时,SQL注入攻击发生。将SQL语句写成查询集Q={q1,q2,…,qn},使用分号“;”和注释“—”作为代码内多个查询的分隔符,然后处理每个查询qi∈Q(一次一个),若任一查询qi∈Q不遵守意图符合条件、大小符合条件和标识符符合条件,则拒绝该SQL语句。

  算法1:SQLIA检测算法

  1.输入: SQL,D={d1,d2,…,dm},S={t1,t2,…,tn}

  2.BEGIN

  3. Q←SQL中查询集

  4. FOREACH qi∈Q DO

  5.计算M和F

  6.IF(M≥F)∧(qiD)THEN

  7. I←qi中标识符集

  8. IC=IdentifierConformity(I,D,S)

  9. IF (IC==FALSE) THEN

  10.REJECT;EXIT

  11.ENDIF

  12. ENDIF

  13.ENDFOR

  14.END

  2.2.1 大小符合

  期望和实际输入数据的大小能够表示纯净SQL语法和受污染SQL语法之间的差异,每个动态生成的SQL语句包括一组标识符I=k1,…,kn,每个标识符ki∈I有一组属性P=p1,…,pn,其中一个为允许标识符持有的数据最大尺寸。该算法计算输入字符串的总大小(即d1,d2,…,d|D|)和标识符允许的总数据大小(即k1,k2,…,k|I|),如下:

面向RFID系统的SQL注入攻击检测和防御算法

  若实际输入和期望输入不匹配或存在空数据输入时,设置F=0。对于满足大小符合约束的查询qi∈Q,输入数据的总和不能超过设计时定义的参数总大小。

  2.2.2 意图符合

  将SQL语句划分为一组独立SQL语句Q={q1,q2,…,qn},对于每个查询qi∈Q,算法检查是否符合下列意图符合条件:

面向RFID系统的SQL注入攻击检测和防御算法

  式(5)规定qi∈Q不能为输入字符串的元素,若查询qi∈Q不符合意图符合条件,则拒绝原始SQL语句。

  2.2.3 标识符符合

  算法2描述了针对每个查询qi∈Q执行的标识符符合算法的伪代码,算法的输入为RFID标签数据集D={d1,d2,…,dm}、例如保留关键字和操作符的非文本标记集R={t1,t2,…,tn}和标识符集I={k1,k2,…,kn}。

  强制执行下列两个数据完整性验证规则:

  (1)如果D={d1,d2,…,dm}和R={t1,t2,…,tn}的交集非空,则认为输入数据受到污染,拒绝SQL语句。

  (2)对于每个ki∈I,检查下列操作和类型完整性条件:

  Operation integrity:(di.op≠ki.op)∧(di.artry≠ki.artry)

  (6)

  Type integrity(di.type≠ki.type)∧(di.size≠ki.size)(7)

  若不满足上述两个条件任一条,则拒绝SQL语句。

  算法2:标识符符合检测算法

  1.输入:D,I,R

  2.输出: clean=True

  3.BEGIN

  4. IF(R∩D)THEN

  5.clean=False;EXIT

  6. ENDIF

  7. FOR 每个标识符 ki∈I DO

  8.IF(di.op≠ki.op)∧(di.artry≠ki.artry)THEN

  9. clean=False;EXIT

  10.ELSEIF(ki∈I≠table)THEN

  11. IF((di.type≠ki.type)∧(di.size≠ki.size))THEN

  12.clean=False;EXIT

  13. ENDIF

  14.ENDIF

  15. ENDFOR

  16.END算法

  3 实验结果与分析

  3.1 实验环境

  为了评估提出的SQLIA检测和防御算法的性能,构建模块化测试平台,如图3所示。

面向RFID系统的SQL注入攻击检测和防御算法

  实验使用的RFID系统是UHF RFID阅读器和SkyeTek、Intermec公司的两类标签。本文创建了三个虚拟克隆RFID标签,用来发送各种类型SQLIA。中间件运行在笔记本电脑上,使用MySQL数据库,中间件通过MySQLC API连接到数据库。

  实验测试了可能在RFID系统中动态生成的各类SQL查询(例如SELECT、UPDATE、INSERT),通过克隆标签和合法标签产生的700个SQL注入攻击和1 300个合法请求,组成大约2 000个查询来测试提出的算法。其中,SQL注入攻击包含一些攻击类型(如重言式、联合查询、后置贪心查询等)。

  3.2 SQLIA检测结果

  实验运行2 000个查询,共有700种恶意查询,包括280个SELECT类查询、251个UPDATE类查询和169个INSERT类查询,恶意查询的比例可从5%至35%之间变化。

面向RFID系统的SQL注入攻击检测和防御算法

  图4描述了在存在不同比例恶意查询情况下,接受和拒绝查询的百分比。结果表明,由于所有恶意查询至少不满足意图符合、大小符合、标识符符合条件之一,采用三个条件连同数据完整性策略能够有效的遏制SQLIA,同时很好地保证了合法查询。

  当查询不符合意图符合、大小符合、标识符符合条件之一时,算法就会跳过其他过滤条件,直接判断为恶意查询,从而大大降低了算法开销,提高了性能。

  3.3 比较及分析

  3.3.1 耗时比较

  在互联网上选取一个存在SQL注入漏洞的网页,将本文算法与基于节点序列的比对算法[4]、快速比对算法[6]进行比较,处理100到10 000个查询,运行200次,取各个算法查询时间的平均值,如表1所示。

面向RFID系统的SQL注入攻击检测和防御算法

  从表1可看出,本文算法消耗时间仅为节点序列比对算法的29.7%,仅为快速比对算法的76.0%,体现了本文算法的高效率。结果表明,本文算法对系统的额外开销很少,因为本文算法使用简单字符串比较。

  3.3.2 检测性能比较

  将本文算法在攻击检测系统中的有效性与当前常用的两款检测工具BSQL Hacker[9]和Pangolin[10]进行比较,分别对测试样本进行检测。首先通过表2的关键语句在Google中搜索出一定的URL以构建测试样本集,然后对获取的URL测试样本进行SQL攻击检测,根据对获取的URL添加不同的注入命令的返回页面与正常页面的异同来判定URL是否存在攻击。判定后,采取措施进行攻击防御,检测结果如表3所示。

面向RFID系统的SQL注入攻击检测和防御算法

  从表3可看出,本文工具的消耗时间略多于其他两种攻击,但检测到的URL总数明显最多,且检测率分别比BSQL Hacker和Pangolin高13.8%和20.6%,表明本文算法能够保证正常查询,可有效检测和防御SQL注入攻击。

  4 结束语

  本文提出一种能够准确检测并防御RFID系统中的SQL注入攻击算法,利用数据完整性策略来防御SQLIA攻击。通过检测查询是否符合意图符合条件、大小符合条件和标识符符合条件来检测SQL注入攻击。本文算法成功阻止了所有攻击,并保证了所有合法的查询。相比现有的检测算法和检测工具,本文算法简单有效,具有程序计算开销低、检测率高等优点。