首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于卷积神经网络的SQL注入检测

基于卷积神经网络的SQL注入检测

作者头像
FB客服
发布2018-07-31 10:33:07
2.4K1
发布2018-07-31 10:33:07
举报
文章被收录于专栏:FreeBufFreeBufFreeBuf

一、前言

本文结合自然语言处理技术,采用卷积神经网络算法训练SQL注入检测模型,主要包括文本处理、提取文本向量和训练检测模型三个部分。由于本人是初学者,也是通过前辈们的文章来学习这方面的知识,很多地方可能理解不够充分,请大家及时纠正。

二、训练数据

实验过程中的数据集主要分为三组训练集(用于训练检测模型的数据)、验证集(训练过程中验证模型的准确率)、测试集(测试训练完成后模型的准确率)。

训练集中正常样本24500条,SQL注入攻击样本25527条,XSS攻击样本25112条;验证集中正常样本10000条,SQL注入攻击样本10000条,XSS攻击样本10000条;测试中正常样本4000条,SQL注入攻击样本4000条,XSS攻击样本4000条。

正常样本数据格式如下:

code%3Dzs_000001%2Czs_399001%2Czs_399006%26cb%3Dfortune_hq_cn%26_%3D1498591852632

SQL注入样本数据格式如下:

-9500%22%20WHERE%206669%3D6669%20OR%20NOT%20%284237%3D6337%29

XSS注入样本数据格式如下:

site_id%3Dmedicare%22%3E%3Cscript%3Ealert%281337%29%3C/script%3E%2Casdf

三、文本处理

训练过程中使用的数据基本都经过了URL编码,有的可能经过过了多重编码,因此需进行URL循环解码,并且为了减少数字和其他无关因素对数据样本的影响对数据进行范化处理,将数字替换为0,超链接替换为http://u。代码如下:

未处理的数据样本如下:

1)))%252bAND%252b8941%25253d8941%252bAND
/yk10/?page=54%20LIMIT%201%2C1%20UNION%20ALL%20SELECT%22C%20NULL%2C%20NULL%23

处理后数据样本如下:

['0', ')', ')', ')', 'and', '0=', '0', 'and']
['yk0', 'page=','0', 'limit', '0', '0', 'union', 'all', 'select', 'null', 'null', 'null']

四、训练词向量模型

Word2Vec是Google在2013年开源的一款将自然语言转化为计算机可以理解特征向量的工具。Word2Vec主要有CBOW(Continuous Bag-Of-Words)和Skip-Gram两种。CBOW模型训练过程是输入某一个词上下文相关的词对应的词向量,输出是这个词的词向量;而Skip-Gram与之相反,输入特定一个词的词向量,输出该特定词的上下文词向量。

将分词处理完的数据作为文本向量的训练数据,训练得到词向量模型,通过此模型,可将单词转化为计算机所能理解的向量,如单词select经过转化后如下:

[ 5.525984  -2.4446     -0.9985928  -1.6910793  1.8828514   2.8958166 0.90518814 -1.3623474 -1.8427371   0.5957503  -3.9347208  1.4152565 -0.0354603 -7.432402   -0.68348515 -4.0790896]

训练词向量模型的代码如下:

五、训练检测模型

卷积神经网络结构如图所示,由三个卷积层、三个池化层组成,最后连接全连接层:

实现代码如下:

对测试集的4000个SQL注入攻击样本进行测试结果如下,准确率为0.97,误报率0.03

对测试集的4000个XSS攻击样本进行测试结果如下,准确率0.98,误报率0.02

对测试集的4000个正常进行测试结果如下,准确率0.98,误报率0.02

六、系统运行流程

首先将三组数据集进行分词范化处理,并通过训练得到词向量模型。然后将训练集通过词向量模型转化为向量,使用卷积神经网络训练检测模型。最后使用注入检测模型对测试集数据进行检测是否存在攻击。

参考文章

http://www.freebuf.com/news/142069.html

https://www.cnblogs.com/bonelee/p/7978729.html

刘焱. Web安全之深度学习实战 [M]. 机械工业出版社,2017.

代码托管:

https://github.com/fishyyh/CNN-SQL.git

*本文原创作者:fishyyh,本文属FreeBuf原创奖励计划,未经许可禁止转载

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、训练数据
  • 三、文本处理
  • 四、训练词向量模型
  • 五、训练检测模型
  • 六、系统运行流程
  • 参考文章
  • 代码托管:
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档