基于改进的模式匹配算法的SQL注入攻击防范技术
2017-12-19张生财周淑惠
张生财+周淑惠
摘 要:SQL注入是一种Web应用程序安全漏洞,攻击者能够提交由Web应用程序执行的数据库SQL命令,从而暴露后端数据库。在网络安全中模式匹配被用于检测恶意数据包,大多数模式匹配采用静态分析技术,而在现有系统中使用的算法内存占用率较高。文章提出了使用改进的Aho-Corasick模式匹配算法的SQL注入攻击的检测和防范技术,使用SQLMAP工具和AIIDA-SQL技术检查用户生成的SQL查询是否存在SQL注入。然后通过采用静态模式匹配算法检查用户生成的SQL查询,如果出现任何形式的新异常,则会将新的异常模式更新为现有的静态模式列表,重复的关键字只存储一次,整体内存消耗降低。
关键词:SQL注入攻击;模式匹配算法;检测与防范
中图分类号:TN915.08 文献标志码:A 文章编号:2095-2945(2017)35-0068-02
1 概述
SQL注入攻击是应用层的安全漏洞之一,是攻击者从网站窃取身份和其他敏感信息最常用的攻击方法之一,在开放Web应用程序安全项目(OWASP)十大漏洞列表中排名第一[1],并在過去几年中对多个网站造成大规模攻击。Web应用程序可以根据所部署应用程序环境以多种方式读取用户输入,SQL注入攻击通过将攻击代码添加到Web输入框或域名的查询字符串中,运行恶意的SQL命令以达到获取访问或更改数据的最终目的。然而,由于Web应用的广泛性、漏洞的易发性,尤其是各种新动态Web技术的不断出现,对该SQL注入攻击的检测和防范技术研究提出了很大挑战[2]。
2 SQL注入攻击防范技术
研究人员提出了不同的工具和方法来检测和防范SQL注入攻击。在基于Web应用的安全性问题中,SQL注入攻击具有最高的优先级。检测和防范技术可以分为两大类。一类是通过使用字符串匹配,模式匹配和查询处理检查异常SQL查询结构语句来检测SQL注入攻击。许多研究人员提出了集成数据挖掘和入侵检测系统的不同方法,这种方法减少了误报,最大限度地减少人为干预,能更好地发现攻击。另一类是基于模型的技术,结合了静态分析和运行时监控的方法。在静态阶段,它使用静态分析来构建应用程序在访问数据库的每个点合法生成的SQL查询的模型。在运行时监控或动态阶段,它拦截所有的SQL查询,然后发送到数据库,每个查询将针对静态构建模型进行检查,违反模型的查询被标识为SQL注入攻击[3]。
Bertino等[4]提出了使用数据挖掘检测恶意数据库事务模式的一般框架,以挖掘数据库日志,形成可以对正常行为进行建模的用户配置文件,并通过基于角色的访问控制机制识别数据库中的异常事务。Kamra等[5]提出了一种能够识别入侵者的增强模型,其中没有与每个用户相关联的角色。Bertino等[6]提出了一种基于异常检测技术和关联规则挖掘的框架来识别偏离正常数据库应用行为的查询。范轩苗等[7]提出了一种高效的多模式匹配算法,通过构建比较树来提高比较效率。刘强等[8]对SQL注入攻击建模采用攻击树建模的方法。而本文提出了一种使用Aho-Corasick模式匹配算法的静态异常检测技术。静态检测异常SQL查询,如果任何查询被识别为异常查询,则将从SQL查询创建新模式,并将其添加到静态模式列表。Aho-Corasick算法的主要缺点是消耗大量内存。
3 改进的Aho-Corasick模式匹配算法
本文提出了一种使用改进的Aho-Corasick模式匹配算法来检测和防范SQL注入攻击的有效算法,其基本架构如图1所示。在图1中,首先给出输入查询,然后通过SQLMAP工具和AIIDA-SQL(Adaptive Intelligent Intrusion Detector Agent)技术检查该查询是否被注入。SQLMAP工具一种开源的渗透测试工具[9],可以发现和检测出五种不同的SQL注入类型。
(1)基于布尔的盲查询:用户将想要检索的基于布尔的盲查询替换或附加在HTTP请求中受影响的参数中,包括含有SELECT子句的有效SQL语句,或其他任何SQL语句查询。该工具能对于每个HTTP响应的头部或主体与原始请求进行比较,并且根据特征给出注入语句的输出。用户还可以提供一个字符串或正则表达式来匹配True页面。为了SQLMAP工具能够以最多七个HTTP请求获取输出的每个字符,就必须采用二分法算法。
(2)基于时间的盲查询:这些查询被替换或附加到HTTP请求中受影响的参数中,含有查询的有效SQL语句中,该语句保留在DBMS后端并在几秒数后返回结果。对于每个HTTP响应,比较HTTP响应时间和原始请求,并且该工具能输出注入语句特征字符,对于其他程序采用二分法算法。
(3)基于错误的查询:这些查询被替换或附加到特定于数据库的错误消息、解析HTTP响应头和搜索DBMS错误消息中。这些错误消息包含注入的预定义字符串和子查询语句输出。在Web应用程序中,可以用这种对已被配置为泄露后端数据库管理系统错误消息的技术。
(4)基于UNION的查询:这些查询附加到受影响的参数中,包括以UNION ALL SELECT开头的有效SQL语句中。当网页直接在for循环中传递时,将会应用此技术,以便将查询输出的每一行都打印在页面内容上。SQLMAP还可以利用部分的UNION查询SQL注入漏洞,这些漏洞语句的输出没有在一个for结构中循环时出现,而只显示在查询输出的第一个条目中。
(5)堆查询:SQLMAP首先测试Web应用程序是否支持堆查询,如果支持堆查询,那么它将被附加到HTTP请求中的受影响的参数,分号(;)后面跟着要执行的SQL语句。这种技术对于运行除SELECT之外的SQL语句(如数据定义或数据操作语句)非常有用。
SQLMAP工具的主要缺点是评估一个查询大约需要15到20分钟,这不能满足WEB应用的实时性要求。为了克服这个缺点,本文使用改进的Aho-Corasick模式匹配算法,以静态模式列表检查查询。下面给出了相应算法,为静态模式列表创建了一个树。endprint
搜索算法:
步骤1:将起始节点作为输入参数,要分析的元素号。
步骤2:如果元素号为-1,则起始元素数为等于输入元素数。
步骤3:如果字符数组中的元素数量小于或等于输入元素数,则根据数组中的总元素和起始元素索引的差异计算匹配百分比,并返回null。
步骤4:验证初始条件后移动到下一个元素,增加计数器,获取开始节点的所有子节点,迭代所有子节点,以查找它是否与已有的模式匹配。
步骤5:如果提供的数组中元素匹配就递归调用具有子元素和索引的搜索方法。
步骤6:如果根据数组和起始元素索引中总元素的差异计算匹配百分比,则不再匹配。
步骤7:返回起始节点元素,使用静态模式列表检查查询,如果查询在列表中,则将被拒绝并给出匹配百分比。如果查询不在列表中,但仍然被感染,然后管理员将在静态模式列表中添加该查询。
4 结果分析
在本节中,将基于内存效率和准确率讨论两种SQL注入攻击检测技术的比较分析结果。在本系统中,以静态结构的形式存储了数据库中的静态模式列表,并且在三维结构中使用1次密钥,所有重复的关键字只存储一次,和现有系统内存使用率相比较,显而易见整体内存消耗比较低。
对于SQLMAP工具和AIIDA-SQL技术的准确率,如图2所示。无论AIIDA-SQL技术的准确率是多少,SQLMAP工具准确率均为100%的,因为在AIIDA-SQL中,考虑到一个情况不能确定为三个输出,有时可能会给出不准确的结果。在图中,X轴表示作为两种技术输入的查询,Y轴表示两种技术的精度百分比计算,直线显示了SQLMAP工具的准确率,虚线显示了AIIDA-SQL技术的准确率。
5 结束语
SQL注入是一种恶意用户更改SQL语句以达到不同于原始目的的技术,是Web应用程序中最严重的安全威胁之一。本文提出了一种使用改进的Aho-Corasick模式匹配算法的静态异常检测技术,相比AIIDA-SQL技术SQLMAP工具对于SQL注入攻击检测准确率为100%,检测后,应用改进算法来检查查询是否在列表中,与现有系统相比,整体内存消耗较少。
参考文献:
[1]2017年OWASP Top 10项目[EB/OL].http://www.owasp.org.cn/owasp-project/OWASPTop102017RC1V1.0.pdf.
[2]王丹,赵文兵,丁治明.Web应用常见注入式安全漏洞检测关键技术综述[J].北京工业大学学报,2016,42(12):1822-1832.
[3]Halfond, W. G. and Orso. AMNESIA: Analysis and Monitoring for Neutralizing SQL-Injection Attacks[C].in Proceedings of the 20th IEEE/ACM international Conference on Automated Software Engineering, 2005.
[4]Bertino, E., Kamra, A, Terzi, E., and Vakali, A. Intrusion detection in RBAC-administered databases[C].in the Proceedings of the 21st Annual Computer Security Applications Conference, 2005.
[5]Kamra A, Bertino, E., and Lebanon. Mechanisms for Database Intrusion Detection and Response[C].In the Proceedings of the 2nd SIGMOD Ph. D Workshop on Innovative Database Research, 2008.
[6]Bertino,E.,Kamra,A,and Early,J.Profiling Database Application to Detect SQL Injection Attacks[C].In the Proceedings of 2007 IEEE International Performance, Computing, and Communications Conference,2007.
[7]范軒苗,郑宁,范渊.Web入侵检测系统高效多模式匹配算法[J].计算机应用研究,2009,26(4):1528-1531.
[8]刘强,殷建平,蔡志平,等.基于不确定图的网络漏洞分析方法[J].软件学报,2011,22(6):1398-1412.
[9]SQLMAP user's manual[EB/OL].http://sqlmap.org/.endprint