记一期恶意流量检测模型的实践探索

admin 2023年4月20日02:39:07评论70 views字数 2459阅读8分11秒阅读模式
《恶意流量检测模型的实践》是i春秋论坛签约作家「银空飞羽」表哥分享的技术文章,公众号旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。
记一期恶意流量检测模型的实践探索

银空飞羽


四年安全行业从业经验,目前负责反入侵安全,擅长流量攻防,入侵检测等网安建设工作,对前后端开发,大数据,机器学习领域也颇有建树。

该文章首发在i春秋论坛,欢迎各位师傅完成专业爱好者认证,可第一时间获取最新技术资讯和实战技能分享

记一期恶意流量检测模型的实践探索

(识别二维码,快速完成认证)


记一期恶意流量检测模型的实践探索

本文是通过二分类的方式来训练一个可以识别恶意流量的模型,也作为机器学习在安全建设领域的一次实践探索。

首先,我们来了解一下什么是机器学习。通俗来讲,就是一个计算公式,如下:

f(x) = W * x + b

W是一个参数矩阵,b是偏移

每次输入x会计算出一个输出pre_y,将pre_y与原本的y进行比较,计算误差(损失函数),通过误差来更新W(梯度下降),循环往复来达到将模型的输出与实际输出相近的效果。

而处理计算的最小单位就被称为神经元,多个神经元组合在一起就构成了神经网络。

训练模型的过程就叫做机器学习。


1.数据集包括训练集和测试集。

训练集:用来训练模型,优化模型。

测试集:用来评估模型训练效果。

2.语料库:将所有训练集的文本进行分词处理,每一个词被称为token,构建语料库,每个token对应一个数字。

作用:主要用来将文本序列化成数字向量,以及将数字向量反序列化为文本。

3.模型构成

Embedding:用来将语料库的每个token赋予超参数,即 W_token * token

LSTM:是一种特殊的RNN类型,可以学习长期依赖信息。

激活函数:W * x +b 属于线性,而激活函数是为了增加非线性的拟合,函数图像举例:让一个直线函数在某些数值拐弯。

4.模型训练

优化器:求参数关于损失函数的导数,用来更新参数,采用梯度下降法。

损失函数:用于计算损失,数值越小说明效果越好。

5.数据准备

我这里准备了19w条恶意流量,以及20w条正常流量

记一期恶意流量检测模型的实践探索

6.数据处理

将每个数据格式化为json格式,label为0代表正常流量,为1则代表恶意流量{  "feature: "package",  "label": 0}

将恶意流量取175000作为训练集,正常流量取180000作为训练集,其余作为测试集。

7.语料库准备分词

这一步比较关键,决定哪些为有效信息,哪些不需要。

记一期恶意流量检测模型的实践探索

最终将处理好的字符串按照空格分隔为list输出。

8.语料库构建

记一期恶意流量检测模型的实践探索

可能会出现需要处理语料库中不存在的文本,所以引入了一个UNK标签,对应值为0。

因为文本要指定最大长度来保证数据矩阵的规范性,所以引入了一个PAD标签,对应值为1。

dict字典用于存储文本及其对应值,主要用于文本序列化为数字向量

inverse_dict字典是将dict的k,v进行反转,主要用于数字反序列化为文本(本模型中不需要使用)

count字典主要用于统计词频

同时该类包含如下方法:

fit将文本分词token填充进count

build_vocab将count构建为dict以及inverse_dict

transform序列化

inverse_transform反序列化

最终,将354501个训练集跑了一遍,构建了长度为1662602的语料库。

记一期恶意流量检测模型的实践探索

9.数据集构建

将数据文件封装起来,并且完成序列化。

规定对数据进行__getitem__的返回为feature, label。

指定batch_size,即训练时,一批数据包含batch_size个,这里为128。

10.模型构建

  • init初始化

embedding将语料库中每个token都赋予100个超参数,定义了两层lstm,第一个为双向即从前往后训练一次,从后往前再训练一次;第二个为单向。规定每个lstm中隐藏层(即内部神经元的数量)的大小为512。
规定每个lstm都是双层,即一层为一次计算,双层可以理解为计算两次,最后通过线性函数Linear做二分类,2表示两个输出。
  • forward训练计算

将初始化的函数进行输入feature的调用计算,因为是二分类问题,这里使用了log_softmax,将两个输出的概率返回,最大概率的值对应的索引即为模型计算结果;同时也方便使用nll_loss(负对数似然损失函数)来计算损失。

11.模型训练

采用gpu的方法进行训练

记一期恶意流量检测模型的实践探索

这里的优化器采用了Adam是一种动量法+自适应学习率的梯度下降算法,lr是学习率,为参数更新的幅度。训练过程即:

数据获取

梯度清零,防止梯度值累加

模型计算

损失计算

反向传播,用来加快梯度下降计算

参数更新

12.训练结束

三十多万条数据分为2769批,共训练了25次,损失函数降为10-5。

13.模型测试

记一期恶意流量检测模型的实践探索

拿测试数据快四万条,转为cpu计算,准确率在99.98%,总花费大约204s。

14.模型应用

记一期恶意流量检测模型的实践探索

记一期恶意流量检测模型的实践探索

记一期恶意流量检测模型的实践探索

经实践,总体效果还是可以的。

项目已上传github:https://github.com/SSRemex/Http_Check_Model

15.数据集内流量构成

数据集的每一条都是由原始的HTTP数据包+标记的是否恶意字段(0代表正常流量,1代表恶意流量)构成的。

16.制作数据集步骤

①拿到原始的HTTP数据包,并人工或者脚本自动化标记该流量为正常流量还是恶意流量,恶意流量就是HTTP数据包中包含攻击行为的,例如:sql注入,xss,命令执行等等。

②然后按照文中的描述,每个数据包以及标记存储成对应格式的json文件即可。

③最终在代码中指定好目录,将数据集分割成训练集和测试集,即可开始进行训练。

作者总结



银空飞羽:知攻才能防,本期内容与渗透测试所涉及的技术体系大同小异,如果大家对这方面感兴趣的话,可以从渗透入手,这样当面临同类型的攻击时,就知道如何正确的检测防御了。

最后,感谢i春秋论坛,给广大网络安全爱好者提供了一个良好的学习交流空间。值此专业爱好者周年狂欢期间,我还参加了有奖征稿活动,并会持续发布技术文章,邀请大家前来围观,如有问题,欢迎批评指正。

记一期恶意流量检测模型的实践探索

戳这里,参加活动瓜分万元现金奖励!

原文始发于微信公众号(i春秋):记一期恶意流量检测模型的实践探索

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月20日02:39:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一期恶意流量检测模型的实践探索http://cn-sec.com/archives/1680550.html

发表评论

匿名网友 填写信息