基于N-Gram和TFIDF的SQL注入检测方法∗

2021-06-29 08:42苏林萍刘小倩崔文超
计算机与数字工程 2021年6期
关键词:文档语句矩阵

苏林萍 刘小倩 陈 飞 李 为 崔文超

(华北电力大学控制与计算机工程学院 北京 102206)

1 引言

随着互联网服务的广泛使用,Web应用也日渐复杂,而且Web的安全问题也因其易用性和开放性日益显著[1~2]。根据开发式Web应用程序安全项目(OWASP)的发布数据显示,SQL注入漏洞是网络信息安全的主要漏洞[3]。在过去的一些年里,许多专家学者对SQL注入问题做了大量研究,提出了许多防御方法和检测技术。但是随着攻击者攻击手段的不断变化,现有的SQL注入防御与检测方法依然存在一些不足。因此,如何防御与检测SQL注入一直是安全领域的热点研究问题。

国内外学者已经针对SQL注入攻击做了大量研究。文献[4~5]使用事先定义好的特征向量对SQL语句进行文本向量化及类别检测,准确率有所提高,但是忽略了词与词之间的联系;文献[6]从恶意代码中提取有效的N-gram特征的方法,并利用支持向量机(SVM)作为机器学习分类器,将可执行代码分类为恶意代码或良性代码。但是该方法存在一些不足之处,使用SVM进行分类时不能够为不同的特征子序列赋予不同的权重;A.Joshi和V.Geetha结合朴素贝叶斯机器学习算法和基于角色的访问控制机制对SQL语句进行检测,但此方法的测试用例具有局限性[7];文献[8]提出一种基于Simhash算法的SQL注入检测方法,首先通过自学习过程生成初始的Simhash指纹库构建具有索引结构的指纹库,再结合强白名单策略来判断每条SQL语句的合法性,具有抵御未知SQL注入攻击的能力。

针对目前存在的一些缺陷,本文结合N-gram和TFIDF进行文本向量化,利用N-gram提取关键字,然后在所提取的关键字的基础上计算TFIDF矩阵,使用SVM算法进行模型训练。然后与现有研究结果进行对比,以验证此方法所存在的优势之处。

2 SQL语句向量化

2.1 SQL注入攻击

结构化查询语言(structured query language SQL)是一种用于存取数据以及管理、查询和更新关系数据库系统的语言[9]。SQL注入是一种代码注入攻击,其原理为通过将特殊字符或是SQL语句插入到在数据库中正常运行的语句中,构造精巧的畸形输入,生成恶意SQL语句进入数据库执行,使得攻击者获取到网站中存在安全漏洞的数据库的查访权限,从而对数据库进行破坏、侵入、窃取等等[10~11]。SQL注入攻击可以细分为九种类型[12~13]:重言式、基于Union查询、基于报错、布尔盲注、时间盲注、带外攻击、piggy-backed、基于存储过程、编码攻击。

2.2 N-Gram特征提取

N-Gram是一种基于统计语言模型的算法,又被称为一阶马尔科夫链。每一个字节片段称为gram,将文本里面的内容按照字节大小为N的滑动窗口操作,就形成了长度为N的字节片段序列。针对于SQL文本,取滑动窗口的长度为N个词,从SQL语句的第一个词开始从左向右每次滑动一个词进行取词。如SQL语句“select name from users where uerId=1”针对N的不同取值,其提取的特征如表1所示。

表1 特征提取示例

2.3 SQL语句文本向量化

TF-IDF是一种统计方法,它的建立过程是这样的:对文档分类有用的词语,应该是文档集合中那些在某一文件中出现频率高,而在其他文件中出现频率少的词语,所以想要呈现同类文本的特点所在,特征空间坐标系就可以去TF作为测度。但是要体现不同类别文本的特点,光靠TF是不可能实现的,所以引入了IDF逆文本频率的概念,IDF认为一个单词对区别不同类别文本的意义越大,则它出现的文本频数就越小。因此,TF-IDF在特征空间坐标系中就是以TF和IDF的乘积作为其取值测度,并且以此来完成对权值TF的调整,目的在于抑制次要单词,突出重要单词[14]。

1)TF是词频(term frequency),可以用式(1)计算:

式中ni,j是ti在文件dj中出现的次数,∑knk,j是文件dj中所有词出现的次数之和。

2)IDF是逆文本频率(Inverse Document Fre⁃quency),其表示此项在文档集合中的重要性,此项所在的文档数越多,则区别能力就越差,重要性就越低。IDF是文件总数与出现此词的文件数商的对数值,如式(2)所示:

|D|:文本集合中的文件的总数,在本文中即SQL语句的总数;包含词语ti的文件数目。

3)TF-IDF的计算公式如式(3)所示:

TFIDF算法虽然能够很好地应用于特征权重计算,但其仍然存在一些不足之处。传统TFIDF算法的缺点如下:没有考虑特征词在不同条件下的信息分布、IDF没有考虑类内信息分布问题、没有考虑单词不完全分类的情况[15~16]。因此避免采用固定关键词本文在N-Gram特征提取的基础上应用TFIDF算法进行SQL语句文本向量化。

3 实验结果分析

3.1 数据集和实验流程

本实验数据集采集于GitHub仓库和电力运维审计系统人员的日常操作,由非法SQL语句和正常SQL语句数据集组成,共计1490条,其中基本涵盖了常见的SQL注入类型和其变形语句,数据使用情况如表2所示。

表2 实验样本

实验流程如图1所示。

图1 实验流程

在处理阶段应用N-Gram技术进行初步特征提取,实验分别取N值为1、2、3,将N-Gram特征提取之后的子序列做去重汇总处理,得到具有一定数量的词汇表,对应不同窗口所得到的词语汇总如表3所示。

表3 词语汇总

基于上述得到的词汇表计算词频和TF-IDF,对计算出的TFIDF进行排序,选取每篇文档前30个关键词,选取完成之后将每篇文档的关键词合并成一个集合,将集合去重之后的词汇表作为最终特征,再基于TFIDF算法对文本集合进行向量化。然后使用SVM分类器进行模型训练,并对测试数据进行验证模型预测,最后对实验结果进行评估分析。

3.2 评价指标

为了评估提出的入侵检测模型的效果,本文使用精确率、召回率来评价检测效果。其中精确率和召回率可根据混淆矩阵计算得出。

1)混淆矩阵(Confusion Matrix):又称为可能性表格。它是一种特定的能够将算法可视化的矩阵,通常用来监督学习。在表格中它用列来表示预测值,用行来表示真实值。混淆矩阵有四个基础指标:

(1)TP(True Positive):真阳性将正类预测为正整数,真实为0,预测也为0;

(2)FN(False Negative):假阴性将正类预测为负类数,真实为0,预测为1;

(3)FP(False Positive):假阳性将负类预测为正类数,真实为1,预测为0;

(4)TN(True Negative):真阴性将负类预测为负类数,真实为1,预测为1。

将以上四个指标呈现在表格中,就得到了如表4所示混淆矩阵。

表4 混淆矩阵

2)准确率(Precision):对预测结果而言被预测为正类的样本中真正的正样本所占的比例,其侧重于将负样本错分为正样本的情况,如式(4)所示:

3)召回率(Recall):对原来的样本而言样本中被预测正确的比例,其侧重于将正样本分为负样本的情况,如式(5)所示:

3.3 结果分析

在文本预处理阶段,使用N-Gram与TFIDF进行关键词的选取及文本向量化。向量化结果表明使用此方法相对于文献[4]中使用固定关键词进行文本向量化具有更高的准确率,具体效果如图2所示。

图2 效果图

本实验分别选取第一轮TFIDF之后每篇文档的前30个关键词进行最终关键词的确定。并针对不同N-Gram窗口进行SVM模型训练,结果如表5所示。

表5 实验结果

由表可知,3-gram的检测效果比1-gram和2-gram检测效果好,因此,本文中的特征向量由3-gram选取出的关键词为特征词。

表6是本实验与文献[4]的实验结果,与TFIDF相比,N-Gram+TFIDF在较大程度上提高了准确率的同时提高了召回率。

表6 TFIDF和N-Gram+TFIDF实验效果对比

由表6可知N-Gram方法的准确率较TFIDF方法有所提升,与此同时其召回率比TFIDF方法更高。

4 结语

为了增强文本向量化过程中词与词之间的联系,本文使用N-Gram和TFIDF算法结合动态选取关键词,并且使用TFIDF进行文本向量化赋予SQL语句的权重。实验结果表明,在所述准备工作的基础上训练的SVM不仅确保了结果的召回率,并且与现有研究工作相比,还在一定程度上提高了样本类别的准确率。

猜你喜欢
文档语句矩阵
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
轻松编辑PDF文档
多项式理论在矩阵求逆中的应用
Word文档 高效分合有高招
矩阵
矩阵
矩阵
基本算法语句
我喜欢