145

用深度学习检测WAF恶意请求

 6 years ago
source link: https://zhuanlan.zhihu.com/p/29768996?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

用深度学习检测WAF恶意请求

机器学习话题下的优秀答主

全文请参见 https://medium.com/slalom-engineering/detecting-malicious-requests-with-keras-tensorflow-5d5db06b4f28

“Detecting Malicious Requests with Keras & Tensorflow“ 这篇文章试图解决这样一个问题:对于五花八门的海量恶意请求日志,如何快速的用机器精确识别?

之前和做WAF的各位专家们讨论过这类“在日志里识别恶意请求”的WAF常见课题,方法多是写规则和写正则,现在国内的研究主力还刚从写规则缓慢迈入写正则。但现有方法有两个问题,一是花式恶意请求太多规则不好写,会写规则就已经是抢着要的人才了;二是写规则和正则往往担心误判,比如一个路径 `../text/../malicious/../text/` 其实不是恶意,但是规则认为出现 '../' 太多也是可能恶意。

按照机器学习常见(吐槽)套路,搞序列建模的都会堕落成写正则,这篇文章作者就尝试循环神经网络 RNN 通过训练文本序列学习到这些正则和规则的套路。文中用了一个最简单的RNN-LSTM网络,把输入的log按照字符级做token,编码输入给RNN的第一层,然后通过一个 LSTM 输出并判断是否是恶意。

关于模型本身并没有什么特别,但是用字符序列作为输入而不是用单词是这个工作关键所在。WAF和其他恶意请求判断的规则往往容易被关键词的二义性坑了,比如 “password” 既可以是一个域关键词也可以是一个变量,更不用说 “passwd” 或者 “mima” 这种变体和训练集里没见过的词了。从字符序列学习有效解决了这个问题,只要有足够的训练数据,它可以根据上下文判断到底 “password” 是关键词还是一个变量或者干脆就是一个无实际贡献的字符串。字符序列建模(Char RNN)还有一个常见例子就是文本生成,就是根据已有的文章生成类似风格的文章比如“汪峰作词机”等,这个可以参考这篇blog

这篇文章主要贡献在于提出了字符级 RNN-LSTM 做恶意请求检测这个想法,它在自己的模拟数据集上可以达到 95% 左右的精确度,这说明这个模型确实有效。不过他的评价标准在自己的模拟数据集(Mock API)上生成,生成的log可能有一定偏向性,测试数据集可能和训练数据集风格过于一直显得精确度很高。如果想在实际业务里使用这个方法,请按照自己收集或生成的数据集调整。

总结一下,这篇文章提出了 RNN-LSTM 方法做恶意请求log的判别,用字符序列作为输入给一个简单的 LSTM 可以在自己数据集上达到不错的效果,大家可以一试,这可能是把人类从写规则和写正则里解放出来的一条路。至于使用什么具体实现,其实不用受限于 Keras 这个比较落后的平台了,用 Gluon 实现同样的 RNN/LSTM 更方便,运行速度更快还可以轻松多 GPU 呢,参考这个例子就好了 http://gluon.mxnet.io/chapter05_recurrent-neural-networks/rnns-gluon.html

题图来自于 Free picture: cat, fur, kitten, cute, animal, eye, domestic cat, feline, kitty, pet 遵循非商业使用准则。


大家好,这是“安全数据与机器学习”专栏的第二篇文章。这个专栏配合我们的小密圈/知识星球群组“安全数据与机器学习”和我们的blog专栏 Kakapo - 一个机器学习社区 ,给各位安全届的朋友提高锻炼数据建模和机器学习的知识。我们会不定期寻找一些优秀的文章,在这里写上摘要和导读,引导大家前去深入学习。如果想参与“安全数据与机器学习”的讨论,请下载“知识星球”app并搜索“安全数据与机器学习“或者点击 http://t.xiaomiquan.com/IIqZV7Y 接受邀请。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK