SQL注入漏洞挖掘技术研究

2024-09-14 00:00:00袁也陆余良赵家振朱凯龙
物联网技术 2024年3期
关键词:动态分析机器学习数据库

摘 要:SQL注入漏洞广泛存在于Web应用程序中,允许攻击者在非授权条件下不受限制地访问Web应用程序所使用的数据库,对Web应用程序安全构成了严重威胁,如何挖掘SQL注入漏洞是网络安全领域的一个重要研究课题。近年来,围绕SQL注入漏洞挖掘,形成了多种理论成果和实用工具,为了厘清研究现状和未来发展方向,本文广泛调研了相关领域研究进展,对SQL注入漏洞挖掘方面的已有研究成果进行了系统梳理。首先,介绍了SQL注入的基本概念及不同类型SQL注入的攻击原理;然后,详细阐述了SQL注入漏洞挖掘技术;最后,总结并讨论了SQL注入漏洞挖掘技术的未来发展方向。

关键词:SQL注入漏洞;Web应用程序;数据库;SQL注入漏洞挖掘技术;静态分析;动态分析;机器学习

中图分类号:TP393 文献标识码:A 文章编号:2095-1302(2024)03-00-04

0 引 言

Web 应用程序在社会生活中扮演着极其重要的角色,被广泛应用于数字政务、社交平台、购物网站、在线教育、网上银行、远程办公等领域。存在于Web应用程序的漏洞可以被攻击者利用开展数据窃取、拒绝服务、获取权限等攻击,给社会稳定和个人信息安全带来了严重威胁。SQL注入漏洞是数量最多、影响范围最广的Web应用漏洞之一,图1显示了2013年以来国家信息安全漏洞共享平台(China National Vulnerability Database, CNVD)收录的SQL注入漏洞数量,可以看出整体的趋势是不断增长的,从2013年到2021年,收录的SQL注入漏洞数量增长了5倍[1]。开放式Web应用程序安全项目(Open Web Application Security Project, OWASP)在2013年和2017年发布的Web安全漏洞Top10中显示,注入类漏洞危害程度排名第一[2],其中SQL注入漏洞是注入漏洞中最主要的一类漏洞。因此,如何挖掘SQL注入漏洞是网络安全研究者关注的重要课题。

近年来,国内外学者针对SQL注入漏洞做了大量研究, SQL注入漏洞挖掘通过对Web应用程序注入点进行漏洞检测,及时发现并修复漏洞,从而防止攻击者利用SQL注入漏洞实施攻击。传统的SQL注入漏洞挖掘技术根据技术特点可以分为静态分析方法和动态分析方法。随着机器学习方法的快速发展,研究者将机器学习应用到SQL注入漏洞挖掘中,出现了基于机器学习的SQL注入漏洞挖掘技术,提高了漏洞挖掘的精准度。

本文广泛调研了SQL注入漏洞挖掘技术研究进展,对已有研究成果进行了系统梳理。首先介绍了SQL注入的基本概念、不同类型SQL注入的攻击原理以及SQL注入的危害;然后详细阐述了SQL注入漏洞挖掘技术;最后展望了SQL注入漏洞挖掘技术的未来发展方向。

1 SQL注入概述

SQL注入是一种常见的数据库攻击手段:攻击者通过在Web表单的用户输入框中填写包含SQL关键字的数据来使数据库执行非常规代码,从而可以非法且不受限制地访问存储在后端数据库中的数据[3]。本节首先介绍SQL注入攻击流程,然后根据攻击原理对SQL注入进行分类介绍,最后说明SQL注入的危害。

1.1 SQL注入攻击流程

攻击者将恶意的SQL代码插入到SQL查询语句中,之后再将这些特殊的SQL查询语句传递给后台的数据库服务器加以解析并执行,最终返回攻击者想要得到的信息[3]。

图2显示了 SQL注入攻击流程。

一次成功的SQL注入攻击,必须要满足三个条件:一是找到SQL注入点,并能够注入恶意查询语句;二是程序对用户的输入并没有严格的检查和过滤;三是恶意的查询语句会被数据库正常执行,并返回攻击者想要的数据库信息[3]。

1.2 SQL注入类型

根据攻击原理不同,SQL注入可以分为永真式攻击、推理式攻击、堆叠注入攻击、存储阶段攻击和编码攻击[3]。

永真式攻击:通过构造SQL查询条件始终为真,导致后台的身份验证条件无效,从而达到绕过服务器验证的目的。例如:SELECT * FROM users WHERE name= 'admin' OR '1'='1',攻击者利用OR '1' ='1'使得查询表达式永远为真,导致程序对查询条件的判断失去作用,从而非法获取数据。

推理式攻击:当网站的安全性较高,数据库错误消息不会通过前端为攻击者提供反馈时,攻击者必须使用不同的方法从数据库获得响应。在这种情况下,攻击者将命令注入网站,然后通过观察网站功能的变化情况和变化的时间快慢来推断数据库的一些参数。主要有两种方式:一种是布尔盲注,通过向服务器提出对错问题,从页面的反应中推断出信息。如果注入的语句评估为true,网站正常运行;如果语句的评估结果为1,虽然没有描述性的错误消息,但该页面与正常运行的页面也有很大的不同。另一种是时间盲注,将时间延迟函数插入到SQL查询语句中,通过观察Web应用程序的响应是否有延迟来判断注入是否成功。

堆叠注入攻击:在这种攻击类型中,攻击者利用“;”在原有查询中插入附加查询。在“;”后面加入构造好的查询,相当于执行多条SQL语句,例如:“SELECT * FROM users WHERE name='admin';DELETE FROM users;”。但是这类攻击实现的前提是数据库允许在单个字符串中包含多条语句。如果不允许,则攻击很难实现。

存储阶段攻击:许多数据库都有内置的存储过程。攻击者使用恶意SQL注入代码执行这些内置函数,从而进行一些非法操作。当正常的SQL语句被创建为存储过程时,攻击者可以注入另一个存储过程作为替代,以执行特权升级、远程命令等恶意操作。

编码攻击:编码攻击不是一种独立的攻击方法,但它可以帮助上述方法逃脱过滤器。一些网站会通过过滤特定关键字来对用户输入进行过滤,攻击者可以改变这些关键字的编码方式从而达到逃避检测的效果,例如使用十六进制、ASCII和Unicode字符编码。一般情况下,检测技术无法过滤关键字的所有编码形式,从而导致过滤失败。这种攻击方式很难完全防御,因为它要求开发人员考虑所有可能的编码,这在实践中并不可行。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL语句。Web应用程序广泛使用动态SQL语句是为了增加应用的灵活性和通用性,同时也给开发人员带来了便利,但是这也带来了安全隐患:没有经过验证的输入会使得动态SQL语句存在SQL注入的风险[4]。

1.3 SQL注入危害

攻击者利用SQL注入获取Web应用程序数据库中的大量数据,从而实现一些恶意目的,给程序安全造成极大威胁。具体危害主要有以下四方面:

(1)数据泄露导致用户隐私信息泄露;

(2)攻击者通过SQL注入获得了数据库管理员权限,可能对数据库进行恶意操作,例如篡改数据、删除数据,甚至直接删库;

(3)通过操作数据库对网页内容进行篡改,发布一些违规信息;

(4)在满足条件的情况下可以直接向服务器写入木马,获取服务器权限。

2 SQL注入漏洞挖掘技术

SQL注入漏洞挖掘技术通过对Web应用程序进行分析,发现并修复潜在的SQL注入漏洞,从而防御SQL注入攻击。传统的SQL注入漏洞挖掘技术按照是否运行目标程序可以分为基于静态分析的漏洞挖掘技术和基于动态分析的漏洞挖掘技术[5]。近年来,以深度学习和神经网络为代表的机器学习成为网络安全领域的研究热点,机器学习经常被用于减少静态源代码分析的误报率,提高动态恶意数据生成的效率,从而提高SQL注入漏洞的挖掘效果。因此,本节按照是否应用机器学习将SQL注入漏洞挖掘技术分为传统SQL注入漏洞挖掘技术和基于机器学习的SQL注入漏洞挖掘技术。

2.1 传统SQL注入漏洞挖掘技术

传统SQL注入漏洞挖掘技术主要包括基于静态分析的漏洞挖掘技术和基于动态分析的漏洞挖掘技术。其中,基于静态分析的漏洞挖掘技术是在不运行Web应用的方式下进行的一种代码分析技术; 基于动态分析的漏洞挖掘技术需要为Web应用程序构建适当的代码执行环境,然后在Web应用程序成功运行的前提下进行。由于实施原理不同,分类进行介绍可以更好地讲清楚两种漏洞挖掘技术的特点、优势以及局限性。

2.1.1 基于静态分析的SQL注入漏洞挖掘技术

静态分析方法指的是在不执行Web应用程序代码的前提下对其进行分析,主要借助于抽象语法树、控制流程图、调用流程图等代码语法语义特征,根据漏洞的特征进行匹配从而发现漏洞[6]。

Medeiros等人[7]提出了一种名为WAP的漏洞检测方法,该方法主要利用代码分析和静态污点分析。主要有两个步骤:一是通过代码分析,获取从污染源到易被感染的执行点之间的代码切片;二是使用静态污点分析方法分析用户输入的数据是否会不经过过滤便到达易被感染的执行点,从而检测出漏洞。但是由于该技术不支持上下文,在遇到别名问题时出现的误报比较多。

Livshits等人[8]针对别名问题提出了一种解决思路,该技术根据用户提供的漏洞规范,通过静态分析在Web应用程序代码中找到与规范匹配的所有漏洞,并且改进对象命名方案给出了解决别名问题的方案,实验结果也证明该方案有效,减少了由于别名问题导致的假阳性数量。

Wang等人[9]提出了一种称为SPINNER的SQL注入漏洞检测技术。当前的静态分析方法中,根据逻辑顺序可分为前向分析和后向分析。前向分析即从污点源追踪污点到执行点,这种方式容易导致过度污染;后向分析即从命令执行API的参数追溯变量的来源,这种方式由于复杂的数据依赖关系比较困难,容易导致污染不足。该系统开发了一种双向分析方式,它结合了前向静态分析技术和后向静态分析技术,从而降低两种方式的局限性。但是这种检测方式结合了两种不同方式,也随之增加了额外的开销,这是该系统明显的局限性。

尤枫等人[10]提出一种可以减少系统开销的方案,即用 Chopping切片技术对代码进行切片分析的方法。首先对源代码进行词法和语法分析并转换成依赖图,然后通过 Chopping切片规则获取含有SQL注入的疑似路径,自动生成攻击向量并提交运行结果进行验证。但是这种方法在应用程序规模较大时,系统依赖图规模随之变得庞大且复杂,不利于切片获取。

静态分析方法无需执行目标程序,不受制于程序的特定运行环境,且能够对代码进行全覆盖分析,但是不能很好地处理Web应用语言的动态特性,会引入较高的误报率;其次,静态污点分析需要对整个源程序的依赖关系进行梳理,导致系统开销比较大[11]。

2.1.2 基于动态分析的SQL注入漏洞挖掘技术

动态分析技术需要实际执行程序,搭建完程序运行环境后,在程序成功运行的前提下进行调试、模糊测试、模拟攻击等,最后根据输出结果挖掘相关漏洞。在动态分析技术中,测试用例是一个关键性问题,如何提升测试用例的质量成为需要研究人员重点考虑的研究方向。

Wang等人[12]针对测试用例匮乏的问题提出一种改进方案,先利用增广攻击树构建出测试用例的生成模型,然后利用模型批量生产测试用例。虽然该方法有效解决了测试用例短缺的问题,但是这些测试用例的准确性却无法得到保障。

田伟[13]提出一种改进测试用例准确性的方案。在Wang等人[12]的方法思路基础上,提出了模型驱动的测试用例生成方法,根据不同的运行环境构建不同的模型,既能达到批量生产测试用例的效果,又具备了一定的精确性。但是该方法的短板也很明显,模型根据运行环境定制,无法拓展延伸。

成晓利[14]针对测试用例生成偏差大导致检测效率低的问题,通过对SQL注入漏洞进行等级划分;再针对不同的等级设计不同的测试用例,通过分级操作有效提高检测效率。

Boyd等人[15]提出了一种基于模拟攻击的漏洞挖掘方法,该方法实现了一个SQL注入漏洞扫描器,由爬虫面板、参数测试面板、漏洞利用面板、报告生成面板组成。爬虫面板利用网络爬虫爬取网页和Web应用程序,获得网页源码和Web应用程序源码;然后使用字符串匹配算法从刚刚获取的源码文件中提取相应参数,由参数测试面板对参数进行测试,如果测试结果显示存在漏洞的可能性,就通过漏洞面板进一步挖掘漏洞;最后由报告面板生成报告。

动态分析方法能够对程序的属性进行分析,精确定位漏洞代码,误报率低,但是动态分析无法像静态分析那样对整个源代码进行审查,单一的执行路径也容易导致路径覆盖不全面,容易出现漏报的问题;其次,动态分析往往对执行环境有要求,为不同项目搭建不同的运行环境不适用于大型程序。

2.2 基于机器学习的SQL注入漏洞挖掘技术

鉴于传统的SQL注入漏洞挖掘技术的不足,提出一种能够自主学习、精确度高并且对实施环境要求不高的漏洞挖掘技术十分必要。在当今机器学习与大数据的环境下,从数据中可以发现许多有效信息,基于机器学习的SQL注入漏洞挖掘技术就是利用机器学习算法自主学习大量漏洞数据,从海量数据中提取出漏洞代码段特征,更深层次地理解代码语义,然后对SQL注入漏洞进行挖掘。

Shi等人[16]提出一种利用机器学习强大的自我学习能力进行漏洞挖掘的方法,该方法利用机器学习的算法自动学习SQL语句结构,并构建一个安全语句知识库;在检测漏洞时,利用规则匹配的原理,通过对比知识库中的SQL语句从而发现SQL注入漏洞。

Zhang[17]提出了一种使用深度学习算法识别SQL注入漏洞的方法。该方法提取的特征主要包括三组:文件是否包含输入验证和清理的属性、文件定义的所有功能(某些项目可能定义自己的验证和清理方法)和特征的上下文,然后使用多种机器学习算法和三组特征来训练分类器,最终达到识别源代码文件中SQL注入漏洞的效果。

郭宁[18]提出了一种改进利用深度学习挖掘SQL注入漏洞的方法。该方法主要有两个方面:一是利用字节码进行特征提取,由于字节码是中间语言,因此通过向量转换可以去除源代码中的冗余字符避免过度拟合;二是以LSTM算法模型为基础构建神经网络。该方案不仅利用深度学习模型提升了漏洞挖掘的精确性,还有效缓解了过度拟合的问题。

基于机器学习的SQL注入漏洞挖掘技术有效提升了漏洞挖掘的精准度,并且不需要搭建环境,但是仍然存在一些问题:一是基于机器学习的方式严重依赖于预定义特征的准确性;二是数据集对基于机器学习的方法来说非常重要,目前仍然缺乏高质量且大数量的数据集[19];三是跨项目的问题,不同项目的开发环境不同,使用的开发框架也不相同,导致漏洞特征也不相同,因此某个Web应用程序的漏洞代码并不能作为另一个应用程序的机器学习的训练样本。

3 SQL注入漏洞挖掘技术研究展望

如今,随着各种网络攻击入侵技术的不断更新,SQL注入形式也不断翻新,导致越来越难以防御。经过多年的研究,在传统的SQL注入漏洞挖掘技术方面取得了显著进展,积累了丰富的理论知识,但是受制于工作原理,在面对新型的SQL注入时效果并不理想。随着人工智能技术的兴起,研究人员将机器学习技术结合到SQL注入漏洞挖掘技术中,并取得了显著成果,但是SQL注入变化较多,如何结合机器学习依然是一个开放性问题,面临着诸多挑战,并且基于机器学习的方法还存在模型选择难、缺乏统一评估标准等弊端。结合近几年的研究趋势,SQL注入漏洞挖掘技术可以从以下几个方向展开研究。

3.1 规范化数据集建设

对于基于机器学习的SQL注入漏洞挖掘技术而言,需要对应数据集来进行训练数据集的构建。数据集就是具有漏洞的Web应用程序代码,然而现实中通常一款Web应用程序存在漏洞的数量并不足以支撑机器学习所需。因此当前需要一个统一的数据集,从而方便研究人员进行相应的训练数据集的构建,并便于对机器学习模型的效果进行比较。

3.2 面向平台技术革新

随着物联网、云计算、大数据等技术的发展,对SQL注入漏洞挖掘技术的研究已经由传统Web应用程序向新技术设施平台扩展。首先无论是物联网,还是云设备,亦或是其他大数据存储设备,相比于传统Web应用程序数据库,数据量更大、流量更多,为了应对这些变化,SQL注入漏洞挖掘技术的性能需要进一步提升,实现功耗更低、实时性更强;其次,伴随新平台出现的还有新型SQL注入漏洞,以往的SQL注入漏洞挖掘技术能否应对依然存疑,因此针对新平台的特点开发新的SQL注入漏洞挖掘技术也是当前需要关注的重要研究方向。

3.3 跨项目开展漏洞挖掘

目前跨项目的问题阻碍了机器学习在漏洞挖掘方面的应用。由于各类Web应用程序的开发环境不同,使用的开发框架也不同,导致不同Web应用程序上漏洞的特征和分布也不同,不具备共性使得某个Web应用程序的漏洞代码并不能作为另一个Web应用程序机器学习的训练样本。迁移学习算法可能会在一定程度上解决上述问题,寻找几个类似的项目将它们存在的漏洞综合起来作为数据集进行训练,然后通过得到的模型对相应的Web应用程序进行预测。结合迁移学习解决跨项目带来的漏洞数据少的问题也是未来的研究重点。

4 结 语

SQL注入漏洞是Web应用程序中数量最多、影响范围最广的安全漏洞之一,对网络安全造成了严重威胁,如何挖掘SQL注入漏洞是安全领域重点关注的研究方向。本文首先介绍了SQL注入的基本概念及不同类型SQL注入的攻击原理;然后,详细阐述了SQL注入漏洞挖掘技术;最后,总结并讨论了SQL注入漏洞挖掘技术的未来发展方向。

参考文献

[1] CNVD.漏洞列表[EB/OL]. (2021-12-31)[2022-10-06]. https://www.cnvd.org.cn/flaw/list?flag=true.

[2] OWASP. The open web application security project [EB/OL]. [2022-10-06]. http://www.owasp.org.cn/OWASP-CHINA/owasp-project/OWASPTop102017v1.1.pdf.

[3] CLARKE J. SQL注入攻击与防御[M]. 2版.施宏斌,译.北京:清华大学出版社,2014.

[4] CSDN. What is an SQL injection attack? The harm and protection of SQL injection attack [EB/OL]. (2021-05-26)[2022-10-06]. https://blog.csdn.net/qq_2213188715/article/details/117290807.

[5]刘祎璠. 基于静态分析的SQL注入漏洞检测方法研究[D].长沙:湖南大学,2015.

[6]胡建伟,赵伟,闫峥,等.基于机器学习的SQL注入漏洞挖掘技术的分析与实现[J].信息网络安全,2019,19(11):36-42.

[7] MEDEIROS I,NEVES N,CORREIA M. Detecting and removing Web application vulnerabilities with static analysis and data mining [J]. IEEE transactions on reliability,2015,65(1):54-69.

[8] LIVSHITS V B,LAM M S. Finding security vulnerabilities in java applications with static analysis [C]// Proceedings of the 14th conference on USENIX Security Symposium. Baltimore,USA:USENIX Association,2005,14:18.

[9] WANG M,JUNG C,AHAD A,et al. Spinner: automated dynamic command subsystem perturbation [C]// Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications Security. [S.l.]:ACM,2021:1839-1860.

[10]尤枫,马金慧,张雅峰.基于Chopping的Web应用SQL注入漏洞检测方法[J].计算机系统应用,2018,27(1):86-91.

[11] JOHNSON B,SONG Y,MURPHY-HILL E,et al. Why don't software developers use static analysis tools to find bugs? [C]// 2013 35th International Conference on Software Engineering(ICSE). San Francisco,CA,USA:IEEE,2013:672-681.

[12] WANG J,PHAN R C W,WHITLEY J N,et al. Augmented attack tree modeling of SQL injection attacks [C]// 2010 2nd IEEE International Conference on Information Management and Engineering. Chengdu,China :IEEE,2010:182-186.

[13]田伟. 模型驱动的Web应用SQL注入安全漏洞渗透测试研究[D].天津:南开大学,2012.

[14]成晓利. Web应用SQL注入漏洞测试系统的研究与实现[D]. 成都:西南交通大学,2013.

[15] BOYD S W,KEROMYTIS A D. SQLrand: preventing SQL injection attacks [C]// International Conference on Applied Cryptography and Network Security. Berlin,Heidelberg:Springer,2004:292-302.

[16] SHI C,ZHANG T,YU Y,et al. A new approach for SQL-injection detection [M]// Instrumentation,Measurement,Circuits and Systems. Berlin,Heidelberg:Springer,2012:245-254.

[17] ZHANG K. A machine learning based approach to identify SQL injection vulnerabilities [C]// 2019 34th IEEE/ACM International Conference on Automated Software Engineering(ASE). San Diego,CA,USA:IEEE,2019:1286-1288.

[18]郭宁. 基于深度学习的漏洞挖掘关键技术研究[D].北京:北京邮电大学,2020.

[19]白鑫玉. SQL注入攻击检测技术研究[D].北京:北京交通大学,2021.

猜你喜欢
动态分析机器学习数据库
数据库
财经(2017年2期)2017-03-10 14:35:35
基于污点传播动态分析的Android安全系统研究
基于组合评价法的企业融资效率动态综合评价
对外经贸(2016年8期)2016-12-13 04:00:28
基于机器学习的图像特征提取技术在图像版权保护中的应用
基于网络搜索数据的平遥旅游客流量预测分析
时代金融(2016年27期)2016-11-25 17:51:36
前缀字母为特征在维吾尔语文本情感分类中的研究
科教导刊(2016年26期)2016-11-15 20:19:33
基于支持向量机的金融数据分析研究
会计准则改革动态及相关研究
数据库
财经(2016年15期)2016-06-03 07:38:02
据题类析高中物理动态问题的部分解题技巧
考试周刊(2016年4期)2016-03-14 09:35:14