精准SQL注入漏洞批量检测技术研究

2021-08-05 14:22薛念明张明岩谢吉伦
山东电力技术 2021年7期
关键词:批量漏洞应用程序

边 莉,薛念明,张明岩,谢吉伦,林 秀

(山东鲁能软件技术有限公司,山东 济南 250014)

0 引言

随着计算机应用技术的发展和信息化建设的深入,WEB技术得到飞速发展。目前以WEB技术为主的应用系统发展规模越来越大,相应地,针对WEB应用漏洞所发起的攻击在各类攻击中占据的比重也越来越高,带来了巨大的危害[1-3]。其中以结构化查询语言(Structured Query Language,SQL)注入为主体的注入漏洞已位居WEB 安全漏洞的榜首,其危害程度和普遍程度都呈现上升的趋势[4-8]。攻击者可利用SQL 注入漏洞获取系统管理权限、窃取机密资源和敏感数据或上传木马病毒等,带来极其严重的潜在威胁[9-10]。因此,SQL 注入漏洞检测与防护是保证WEB应用系统安全必不可少的一个重要因素。

目前SQL 注入漏洞检测技术分为自动化扫描和手工渗透两种方式。自动化扫描工具主要由网络爬虫和渗透测试两部分组成。首先利用网络爬虫搜索目标系统链接到服务器的统一资源定位符(Universal Resource Locator,URL)列表,然后对其进行渗透测试。该方式能够快速检测SQL 注入漏洞,但爬虫所得测试数据的覆盖率影响检测能力。由于目前爬虫技术的限制和不稳定性,大部分扫描工具的误报和漏报概率都比较大,检测准确率较低[11-16]。手工分析需要测试者对当前系统有比较深入的了解,从中过滤出目标测试点,采取手工的方式逐条测试。虽然此种可以保证漏洞检测的准确度,但对测试人员技术要求较高,且检测过程需要消耗大量时间导致效率比较低下[17-20]。

通过分析SQL 注入漏洞检测技术,可以得知SQL 注入具有非常复杂和多变的攻击方式[21],而现有的检测技术并不能很好地满足应用程序的需求。基于此,提出一种精准SQL 注入漏洞批量检测方案。通过此种方案可确保检测的高效性和准确性,并能最大限度地降低漏测和误报情况。

1 SQL注入攻击原理

应用程序通过SQL 语句完成与数据库服务器的交互。未对用户输入进行有效的验证和过滤是SQL注入漏洞产生的主要原因,攻击者通过控制应用程序发送给服务端的SQL 输入,并将该输入解析为执行代码,进而获取较高的数据库操作权限,实现对数据库的任意操作,达到控制后台服务器、获取重要数据信息的目的[22-25]。

图1 显示了普通用户和SQL 注入攻击者访问同一个系统的对比。通过图1 可方便理解SQL 注入原理。登录时程序使用了Java 数据库连接(Java Data Base Connectivity,JDBC)查询,且开发人员使用了语句拼接的方式:select * from user where name=‘$username’and password=‘$password’。

图1 普通用户和SQL注入攻击者访问系统

对于普通用户的输入:$username=admin,$password=admin 此时执行的SQL 语句为select *from user where name=‘admin’and password=‘admin’;服务端正常返回user 表中用户名为admin,密码为admin的用户信息。

对于攻击者的输入:$username=admin’--,$password=123 此时程序执行的SQL 语句变为select* from user where name=‘admin’--’and password=‘123’;由于用户名中的单引号与SQL 语句中前半部分的单引号相匹配,且SQL 后半部分内容因“--”进行了注释,其结果就是只根据用户名就能查出user 表中admin 用户的所有信息。若数据库中的密码是用明文显示的,则可直接查出该用户的密码,攻击者就可以用该用户的账号进行进一步的操作。

2 精准SQL注入漏洞批量检测方案

针对WEB 应用程序特点,提出了一种精准SQL注入漏洞批量检测方案。该方案集数据定制化收集和批量自动执行于一体,充分结合自动化扫描和人工渗透分析的优点,可兼顾检测效率和准确性,并且可以减少漏测和误报情况的发生。

2.1 精准SQL漏洞批量检测架构设计

精准SQL 注入漏洞检测能够有效地快速识别被测系统中的SQL 注入漏洞,同时结合响应分析设计,可依据测试过程数据精准定位注入点。相应的架构设计方案如图2所示。

图2 批量SQL注入漏洞检测架构

1)请求采集与存储。通过二次开发的代理工具对浏览器进行监听,实现对请求数据的精准采集并自动本地存储。

2)批量执行漏洞检测。集成SQLMAP 漏洞检测工具,SQL 注入检测规则定制模块自定义导入payload,调用SQL 注入批量检测执行模块和测试结果数据存储模块,完成批量漏洞检测执行,并对响应数据进行记录和存储。

这时,餐厅的大门突然打开,整个屋里瞬间鸦雀无声。我回过头去看,一个年轻人走了进来,周围一片死寂,连一根针掉到地上都能听到。他脸上到处都是穿孔,多到数不过来,一头长发又黑又油腻。但让他看起来很有威胁的还不是这些,而是他扫视一切时的那种冷酷眼神。

3)结果分析。通过关键字扫描,对测试结果进行分析,定位存在SQL 注入漏洞的目标数据请求位置。

依此综合实现SQL 注入漏洞的分析、核查、注入等功能。该SQL 注入漏洞检测模型具有实现代价小、运行效率高,并且误报率低的优势,可有效提升SQL注入漏洞的检测能力。

2.2 请求采集与存储

该过程的关键在于通过对代理工具Fiddler进行二次开发以高效准确地记录待测请求数据。

Fiddler 是一款HTTP 协议调试代理工具,它可以监视和记录客户端和服务器之间的所有通信数据和请求信息。Fiddler 的代理功能是实现批量漏洞检测的前提条件,测试者只需要通过前端访问WEB 应用程序的各个输入点,Fiddler 便可通过监听准确收集和记录测试请求数据,为后续批量渗透检测提供数据输入,具体操作步骤及原理如图3所示。

图3 采用Fiddler代理工具进行请求数据采集与本地存储的原理

1)对Fiddler 代理工具进行二次开发,修改Fiddler Script Editor 文件,添加命令行save 指令代码:实现格式化数据请求文件保存类型,设置本地存放路径以及对目标请求数据的一键保存功能。

2)调试开发完成后,打开Fiddler 对浏览器进行监听,用户可根据业务需求自定义Fiddler 过滤器规则(包括域名过滤、请求类型过滤及其相应状态过滤)监听目标请求数据。

3)手工浏览测试站点,此时Fiddler 会自动记录根据步骤2)规则过滤后的所有客户端与服务器通信的HTTP/HTTPS请求。

4)确保遍历应用程序的每项功能后,根据步骤1)的命令行指令save,导出Fiddler 记录的所有目标请求数据。

使用二次开发后的Fiddler的代理功能是测试流程的关键步骤,记录并保存的数据请求皆为目标站点请求,有效提高了测试准确率;目的请求数据按照特定文件格式保存,为渗透工具提供数据输入,有效提高了测试效率。此种方法可以很好地弥补自动化扫描工具在测试数据收集方面的缺点。

2.3 批量执行漏洞检测

由Fiddler 获取的请求数据,通过有效性检查后连接SQLMAP 批处理检测程序,完成检测规则和配置文件的定义和配置后,由检测程序向目标请求数据进行SQL注入渗透检测。

1)数据有效性检查。从Fiddler 中收集到的每一个数据包都包含一个完整的请求过程,若应用程序是需要登录才能访问的,则应在渗透测试开始前检查请求中的会话信息是否有效,否则应将有效的会话信息替换到每个请求文件中,如图4所示。

图4 数据有效性控制和SQLMAP集成与批处理

2)SQLMAP集成与批量检测。首先集成SQLMAP开源检测工具,通过调用SQLMAP 检测库中的既有扫描规则和自定义payload 进行检测规则定制。然后在配置文件中对请求执行路径以及相关数据库信息进行配置,根据配置信息启动批量检测程序从而实现对目标数据请求的批量SQL 注入检测。为了提高执行效率,该过程采用了多进程并发模式进行批量渗透执行,充分利用系统资源,提高了程序的执行速度,如图4所示。

同时SQL 注入批量检测执行过程中产生的中间数据会自动保存在本地,每个数据请求文件对应一个检测结果文件,且有唯一编号标识。例如1_Request.txt 数据请求文件对应检测结果文件为1_Request.txt-------Result.txt。

2.4 检测结果分析

结果分析模块对SQL 注入批量检测结果进行关键字扫描,确定存在SQL 注入漏洞的检测结果文件,并根据编号标识定位到对应的数据请求文件,从而快速定位到存在漏洞的系统URL 地址,如图5 所示。定位到注入点后可做一步渗透攻击,从而可获取数据库表结构和表数据等。根据测试结果给出系统加固修复建议。

图5 结果分析与漏洞定位模块操作原理

3 可行性验证及结果比对

为了证实新型SQL 注入测试方案的可行性,在内网搭建测试环境部署3个不同复杂度的WEB应用信息系统,分别使用精准SQL 注入漏洞批量检测方案、自动化扫描工具APPSCAN 和手工渗透3 种方案对3 个WEB 应用信息系统进行测试。其中,精准SQL 注入漏洞批量检测方案对项目2 测试执行过程如图6所示。

图6 精准SQL注入批量检测方案执行过程

1)使用二次开发的Fiddler 作为代理工具,收集并格式化保存目标请求数据;

2)配置XML文件,集成SQLMAP工具;

3)实现批处理,对有效的目标请求文件执行批量SQL注入检测;

4)结果分析和SQL注入点定位。

对测试结果进行统计分析,得到3种方案的SQL注入检测准确率和执行效率对比结果。其中检测准确率是指检测SQL 注入漏洞数量与实际SQL 注入漏洞数量的比值。执行时间是一次全量应用系统SQL注入漏洞检测所耗费的时间。对比结果如表1 和表2所示。

表1 3种方案漏洞检测准确率 单位:%

表2 3种方案漏洞检测执行时间 单位:min

由测试结果可知,精准SQL 注入漏洞批量检测方案可快速检测到WEB 应用程序的SQL 注入漏洞;自动化工具因受爬虫技术限制,并不能准确定位漏洞的注入点,误报和漏测率很高;而手工测试在一般的项目测试中,因耗时太长一般不予以使用。

由此得出基于代理模式的SQL 注入检测方法不仅极大地提高了检测效率,更能提高检测准确率,保证测试质量。

4 结语

由于现有的自动化扫描工具受限于检测模式单一、爬虫数据收集不稳定等因素的影响,漏测和误报现象较为严重。基于此,提出一种精准SQL 注入批量漏洞检测方案。此方案一方面能保证待测数据的稳定性和全面性,减少对数据输入点的漏测现象;另一方面,借助FIDDLER 监听技术,准确收集和记录测试请求数据,为后续批量渗透检测提供数据输入,确保了漏洞检测的高效性。

SQL注入是WEB应用程序威胁最大的安全漏洞之一,应当结合系统业务特点和安全事件,进一步优化安全检测技术,这对于促进WEB 应用安全质量在各个行业的推广,具有积极作用和战略意义。同时应不断深入学习漏洞检测技术,科学结合现有工具并实现优势互补,适应信息安全的动态发展趋势。

猜你喜欢
批量漏洞应用程序
漏洞
批量精装房项目工程信息管理综述
云南:铁路“520”运输鲜花4万余件 高铁批量运输创新高
批量提交在配置分发中的应用
删除Win10中自带的应用程序
基于selenium的SQL注入漏洞检测方法
谷歌禁止加密货币应用程序
漏洞在哪儿
三星电子将开设应用程序下载商店
微软软件商店开始接受应用程序