赞
踩
这篇文章,首先从介绍SQL注入的背景入手,这里点到了产生原因、影响、攻击类型和传统的漏洞注入技术。然后提出基于机器学习的 SQL 注入漏洞挖掘方法,这里的指的是利用SVM来对数据集进行分类回收。最后用实验证明该模型和提出相应的问题。
我认为本文的可取之处,在于对传统SQL注入技术的总结,然后使用支持向量机机器学习算法结合词袋模型实现了SQL注入漏洞挖掘的自动化。这一点值得借鉴。
下面,我将对该论文的章节进行详述。(这里主要是用我自己的话,来阐述)
网站后台通常使用用户输入信息动态地构造SQL语句来与后端数据库进行交互,在网站后台没有对用户输入进行合理的过滤而直接使用的情况下极易产生SQL注入漏洞。
(一句话,可能不严谨,就是没有对用户输入的恶意代码,进行过滤)
SQL注入攻击完全破坏了目标系统的机密性、完整性和可用性,其造成的损失随数据库中存储信息的重要性变化而变化。
更严重的问题是黑客可以把SQL注入攻击作为跳板进行更深层次的攻击活动
具体的影响请参照SQL注入的总结
报错信息指的是这种攻击方式是否需要利用查询语句执行的错误信息。基于报错的注入攻击需要将数据库中的信息伴随错误信息显示出来,所以也依赖于报错信息。(如报错注入)
直接显示表示这种攻击方式从数据库中获得的数据是否直接显示,还是需要进行推断。(盲注)
多条记录代表这种攻击方式能够同时获得多条数据记录。
静态分析指的是在不执行Web应用程序代码的前提下对其进行分析,主要借助于抽象语法树(AST)、控制流程图(CFG)、调用流程图(CG)等这类代码的中间表示中的一种或者几种,结合代码切片等代码分析手段来进行模式匹配以发现应用中可能存在的安全漏洞。
(我的理解:就是对web应用程序进行代码审计,通过分析源代码,来判断是否是漏洞。)
动态分析技术首先需要为Web应用程序配置适当的代码执行环境,然后在Web应用程序成功运行的前提下通过调试、Fuzzing、模拟攻击等手段挖掘其中可能存在的安全问题。
(我的理解:就是直接对运行中的web应用程序,进行测试,发现漏洞。)
动静结合的混杂分析:顾名思义,将上面的两个结合。
在对众多Web应用进行批量漏洞挖掘时,由于应用程序之间存在的差异性,其相应的可执行环境也存在一定的差异性,这种情况下为每一个项目搭建合适的运行环境是不切实际的,为此动态分析技术在实施过程中通常不尽人意。并且有数据显示的实验结果,也是很差的。
(我的理解:由于程序和相应环境的差异性,所以传统的注入技术,缺乏普适性)
数据集:使用STIVALET等人提出的PHP代码测试样例作为机器学习的原始数据集。此数据集中与SQL查询有关的PHP代码测试样例一共有 9552 个,其中8640 个不存在注入漏洞、912 个存在SQL注入漏洞。
数据集的不平衡问题:通过使用欠采样,随机选取两倍于漏洞代码样例数量的正常代码样例。(什么是欠采样)
最后得到的实际利用数据集:训练数据集由 1824个正常样例和912个漏洞样例组成,共有2736个测试样例。
数据的预处理:使用PHP中内置的token_get_all函数将PHP源代码文件标签化,这些标签代表了源代码的一些关键字、符号以及代码结构。本文在标签化过程中忽略了空格符以及注释等不影响代码运行安全的信息,并且将数字和字符串转化为了特定的标签,如使用 T_CONSTANT_ENCAPSED_STRING 代表所有单双引号内的字符串。标签化过程结束后本文利用词袋模型将上述的标签化后的源代码文件进行向量化,算法粒度为单个的源代码文件。
为什么使用SVM:基于VC维数和结构风险最小化原理的统计学习方法,根据有限样本信息在模型的复杂性和学习能力之间寻找最佳折衷,从而获得最优的泛化能力。
该方法的数学意义是最终解决了与矢量维无关的凸二次规划问题,其物理本质是通过在超平面中建立决策面,使得正样本与负样本之间的隔离边界最大化。
综合考虑经验风险和置信区间,使分类器不仅具有良好的分类性能,而且具有更好的扩展性。
假定样本线性可分
给定一个训练样本(Xi,Yi),其中i=1, 2,…, n, xi∈Rd, yi∈{+1, -1},这里yi是样本xi对应的标签,d代表向量空间的维度也就是训练时所选择的特征向量中属性的数量。最优的划分平面需满足下式:
样本非线性
引入核函数,核函数的作用就是将低维空间中线性不可分的x映射到高维空间,在高维空间内那些二维空间中的线性不可分问题往往会变为线性可分。
这里选用的是高斯核函数,(我认为可以尝试用其他的核函数来测试比较一下)
用分层交叉验证来评估该模型,并结合了精确度、召回率、F1-score。
上面是使用机器学习挖掘SQL注入漏洞的流程。
(词袋,就是把一个字符串,转换成独立的词,用来存储)
首先通过词袋模型将每一个PHP测试样例文件转化为一个98维的向量作为最终的训练数据,通过网格搜索(Grid Search)算法确定最优参数C=50, λ = 0.005,
仿真结果。
在针对上述训练集时漏洞代码的预测精确度达到了81%且召回率达到了95%,良性代码的预测精度达到了98%且召回率达到了91%。模型验证成功。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。