当前位置:   article > 正文

基于机器学习的 SQL 注入漏洞挖掘技术的 分析与实现——论文研究学习_漏洞挖掘论文

漏洞挖掘论文

总体介绍和概括

这篇文章,首先从介绍SQL注入的背景入手,这里点到了产生原因、影响、攻击类型和传统的漏洞注入技术。然后提出基于机器学习的 SQL 注入漏洞挖掘方法,这里的指的是利用SVM来对数据集进行分类回收。最后用实验证明该模型和提出相应的问题。

我认为本文的可取之处,在于对传统SQL注入技术的总结,然后使用支持向量机机器学习算法结合词袋模型实现了SQL注入漏洞挖掘的自动化。这一点值得借鉴。

下面,我将对该论文的章节进行详述。(这里主要是用我自己的话,来阐述)

SQL注入的背景

为什么会产生SQL注入

网站后台通常使用用户输入信息动态地构造SQL语句来与后端数据库进行交互,在网站后台没有对用户输入进行合理的过滤而直接使用的情况下极易产生SQL注入漏洞。
(一句话,可能不严谨,就是没有对用户输入的恶意代码,进行过滤)

SQL影响

SQL注入攻击完全破坏了目标系统的机密性、完整性和可用性,其造成的损失随数据库中存储信息的重要性变化而变化。

更严重的问题是黑客可以把SQL注入攻击作为跳板进行更深层次的攻击活动

具体的影响请参照SQL注入的总结

攻击类型

在这里插入图片描述
报错信息指的是这种攻击方式是否需要利用查询语句执行的错误信息。基于报错的注入攻击需要将数据库中的信息伴随错误信息显示出来,所以也依赖于报错信息。(如报错注入)
直接显示表示这种攻击方式从数据库中获得的数据是否直接显示,还是需要进行推断。(盲注)
多条记录代表这种攻击方式能够同时获得多条数据记录。

传统的漏洞注入技术

静态分析指的是在不执行Web应用程序代码的前提下对其进行分析,主要借助于抽象语法树(AST)、控制流程图(CFG)、调用流程图(CG)等这类代码的中间表示中的一种或者几种,结合代码切片等代码分析手段来进行模式匹配以发现应用中可能存在的安全漏洞。

(我的理解:就是对web应用程序进行代码审计,通过分析源代码,来判断是否是漏洞。)

动态分析技术首先需要为Web应用程序配置适当的代码执行环境,然后在Web应用程序成功运行的前提下通过调试、Fuzzing、模拟攻击等手段挖掘其中可能存在的安全问题。

(我的理解:就是直接对运行中的web应用程序,进行测试,发现漏洞。)
动静结合的混杂分析:顾名思义,将上面的两个结合。

传统的注入技术的缺陷

在对众多Web应用进行批量漏洞挖掘时,由于应用程序之间存在的差异性,其相应的可执行环境也存在一定的差异性,这种情况下为每一个项目搭建合适的运行环境是不切实际的,为此动态分析技术在实施过程中通常不尽人意。并且有数据显示的实验结果,也是很差的。
(我的理解:由于程序和相应环境的差异性,所以传统的注入技术,缺乏普适性)

基于SVM的SQL注入漏洞挖掘技术

数据集处理

数据集:使用STIVALET等人提出的PHP代码测试样例作为机器学习的原始数据集。此数据集中与SQL查询有关的PHP代码测试样例一共有 9552 个,其中8640 个不存在注入漏洞、912 个存在SQL注入漏洞。

数据集的不平衡问题:通过使用欠采样,随机选取两倍于漏洞代码样例数量的正常代码样例。(什么是欠采样

最后得到的实际利用数据集:训练数据集由 1824个正常样例和912个漏洞样例组成,共有2736个测试样例。

数据的预处理:使用PHP中内置的token_get_all函数将PHP源代码文件标签化,这些标签代表了源代码的一些关键字、符号以及代码结构。本文在标签化过程中忽略了空格符以及注释等不影响代码运行安全的信息,并且将数字和字符串转化为了特定的标签,如使用 T_CONSTANT_ENCAPSED_STRING 代表所有单双引号内的字符串。标签化过程结束后本文利用词袋模型将上述的标签化后的源代码文件进行向量化,算法粒度为单个的源代码文件。

模型选择

为什么使用SVM:基于VC维数和结构风险最小化原理的统计学习方法,根据有限样本信息在模型的复杂性和学习能力之间寻找最佳折衷,从而获得最优的泛化能力。
该方法的数学意义是最终解决了与矢量维无关的凸二次规划问题,其物理本质是通过在超平面中建立决策面,使得正样本与负样本之间的隔离边界最大化。
综合考虑经验风险和置信区间,使分类器不仅具有良好的分类性能,而且具有更好的扩展性。

模型的建立

  1. 假定样本线性可分
    给定一个训练样本(Xi,Yi),其中i=1, 2,…, n, xi∈Rd, yi∈{+1, -1},这里yi是样本xi对应的标签,d代表向量空间的维度也就是训练时所选择的特征向量中属性的数量。最优的划分平面需满足下式:
    在这里插入图片描述
    在这里插入图片描述

  2. 样本非线性
    引入核函数,核函数的作用就是将低维空间中线性不可分的x映射到高维空间,在高维空间内那些二维空间中的线性不可分问题往往会变为线性可分。
    这里选用的是高斯核函数,(我认为可以尝试用其他的核函数来测试比较一下)
    在这里插入图片描述
    用分层交叉验证来评估该模型,并结合了精确度、召回率、F1-score。

在这里插入图片描述
上面是使用机器学习挖掘SQL注入漏洞的流程。
(词袋,就是把一个字符串,转换成独立的词,用来存储)

实验验证及问题

首先通过词袋模型将每一个PHP测试样例文件转化为一个98维的向量作为最终的训练数据,通过网格搜索(Grid Search)算法确定最优参数C=50, λ = 0.005,
仿真结果。
在这里插入图片描述
在针对上述训练集时漏洞代码的预测精确度达到了81%且召回率达到了95%,良性代码的预测精度达到了98%且召回率达到了91%。模型验证成功。

问题

  1. 数据集的方面
    一方面是一个高质量的数据集难以获取,需要我们从很多个开源的PHP源代码中对漏洞信息进行分析、跟踪、定位,难度极大;另一方面,机器学习所需要的数据集都是十分庞大的,而一个Web程序是难以满足数据集的漏洞数量,这便要求我们从多个版本的web来下手。
    有效措施:通过组合预先收集到的输入、过滤以及危险函数这3个模块中的样本数据,来自动生成一个漏洞的样本,添加一些循环、判断和函数等复杂结构,让我们自动生成的数据集更加贴近实际。
  2. 项目方面
    对于没有历史版本的Web程序,我们没有相应的漏洞代码作为样本,用于训练;对于有历史版本,但是漏洞数量很少且分散的Web程序,我们也不能训练出优秀的数据模型;
    对于不同 的web程序,由于编写者的习惯,使用的框架等不同,导致其各自漏洞分布也不同,为此某个应用程序的漏洞代码并不能作为另一个应用程序的机器学习的训练样本。
    有效措施:使用迁移学习,增加我们的数据集和最后模型的泛化能力。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/131095
推荐阅读
相关标签
  

闽ICP备14008679号