学点算法搞安全之HMM(下篇)

2021/5/8 20:29:12

本文主要是介绍学点算法搞安全之HMM(下篇),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 兜哥 FreeBuf

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



前言


我们介绍了HMM的基本原理以及常见的基于参数的异常检测实现,这次我们换个思路,把机器当一个刚入行的白帽子,我们训练他学会XSS的***语法,然后再让机器从访问日志中寻找符合***语法的疑似***日志。

图片

通过词法分割,可以把***载荷序列化成观察序列,举例如下:

图片

词集/词袋模型

词集和词袋模型是机器学习中非常常用的一个数据处理模型,它们用于特征化字符串型数据。一般思路是将样本分词后,统计每个词的频率,即词频,根据需要选择全部或者部分词作为哈希表键值,并依次对该哈希表编号,这样就可以使用该哈希表对字符串进行编码。

  • 词集模型:单词构成的集合,集合自然每个元素都只有一个,也即词集中的每个单词都只有一个

  • 词袋模型:如果一个单词在文档中出现不止一次,并统计其出现的次数

本章使用词集模型即可。

假设存在如下数据集合:

图片

首先生成词汇表:

图片

根据词汇表生成词集:

图片

简化后的词集模型的核心代码如下:

图片



数据处理与特征提取


常见的XSS***载荷列举如下:

图片


需要支持的词法切分原则为:

单双引号包含的内容 ‘XSS’

http/https链接 http://xi.baidu.com/xss.js

<>标签 <script>

<>标签开头 <BODY

属性标签 onl oad=

<>标签结尾 >

函数体 “javascript:alert(‘XSS’);”


字符数字标量 代码实现举例如下:

图片

另外,为了减少向量空间,需要把数字和字符以及超链接范化,具体原则为:

图片


结合词集模型,完整的流程举例如下:

图片

训练模型

将范化后的向量X以及对应的长度矩阵X_lens输入即可,需要X_lens的原因是参数样本的长度可能不一致,所以需要单独输入。

图片


验证模型

整个系统运行过程如下:

图片

验证阶段利用训练出来的HMM模型,输入观察序列获取概率,从而判断观察序列的合法性,训练样本是1000条典型的XSS***日志,通过分词、计算词集,提炼出200个特征,全部样本就用这200个特征进行编码并序列化,使用20000条正常日志和20000条XSS***识别(类似JSFUCK这类编码的暂时不支持),准确率达到90%以上,其中验证环节的核心代码如下:

图片

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




这篇关于学点算法搞安全之HMM(下篇)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程