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

 兜哥 FreeBuf

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



前言


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

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

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

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

词集/词袋模型

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

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

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

本章使用词集模型即可。

假设存在如下数据集合:

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

首先生成词汇表:

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

根据词汇表生成词集:

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

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

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



数据处理与特征提取


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

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


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

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

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

<>标签 <script>

<>标签开头 <BODY

属性标签 onl oad=

<>标签结尾 >

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


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

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

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

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


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

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

训练模型

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

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


验证模型

整个系统运行过程如下:

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

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

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

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


上一篇:【机器学习系列】隐马尔科夫模型第三讲:EM算法求解HMM参数


下一篇:DAY 194 MongoDB安装配置教程