通过阅读文献以及编写代码测试,今天实现了使用机器学习算法训练模型,并基于模型对给定的url日志进行检测是否是恶意请求。
要实现这样的一个功能,大致需要经过下面的步骤:
1、收集日志,实现nginx日志的规集
出于轻量化agent的考虑,自己编写了一个收集日志的客户端,以及一个服务端,客户端将日志记录传到服务端实现保存。
2、截取一定量的日志记录,进行人工标记
通过人工标记,将正常的请求和非正常的请求区分出来,这些经过标记的数据用于训练模型。
3、训练模型,编写机器学习的算法训练模型
使用上面获得的记录,再编写机器学习的算法代码,训练出模型文件,理论上用于训练的数据越多,训练出的模型越准确。
4、编写预测代码,实现基于模型的机器学习算法检测
有了上面的模型之后,进一步的编写预测的代码,这样就可以调用模型,使用机器学习算法对给定的url进行检测
/examples/jsp/checkbox/bandwidth/index.cgi?action=showmonth&year=<script>foo</script>&
这是一个恶意的请求,模型检测结果如下:
/article/126
这是一个正常的请求,模型检测结果如下:
这里面有2个地方可以讨论一下,一个完整的get或者post请求,攻击用的payload可以出现在request、user-agent、referer等字段中,出于完整检测考虑,在准备数据集时选取了三个字段的的全部内容,后面评估之下,只打算使用request字段的内容,至于通过http头的攻击请求就不考虑了。
另一个是对数据做标记的时候,只考虑了网站路由规则范围的属于正常请求,其余均标记为攻击请求,因此训练出来的模型不适合用于通用模型。
前面发布过3篇:
Nginx日志分析实战:揭露4种CVE-2023-1389攻击手法,加固网站安全屏障
到此,前面说过的打造轻量级Nginx日志系统以及基于机器学习的url日志安全检测功能均以实现。
原文始发于微信公众号(核点点):使用机器学习算法实现url日志检测功能
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论