机器学习遇见XSS(一)

1.介绍

在当今互联网中,随着数据量的增加,机器学习扮演着更加重要的角色。而在安全领域也是,接下来我们通过对一些数据的分析来窥探出XSS攻击与正常的访问请求中的各种不同和机器学习在其中发挥的作用。

2. 数据分析

下面是在网上摘抄的一些payload

"'><script>document.title="[random]";</script>  
<script>document.title="[random]";</script>  
<svg onload=document.title="[random]";>  
;document.title="[random]";//  
<iframe src=javascript:prompt(/StoredXssByIframeTag/);></iframe>  
<embed src=javascript:alert(/StoredXssByEmbedTag/);>  
/../../../../../../../C:/Windows/system.ini [windows]  
/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252Fetc%252Fpasswd       
/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/hosts   
| ping -n 2 [random].test.dnslog.link [Windows]  
?redirect:http://[random].test.dnslog.link/%25{3*4}  

让我们来分析一下这些payload其中的规律,也就是文本特征

1. 关键词

想要一个payload能发起特定的攻击,那么其中就包含这一些特定的关键词,比如想插入一段简单的script脚本,你就得插入一段类似于<script>的标签,比如你想获取cookie,你就得输入document.cookie 这个关键词。甚至对于一些很冷门的标签,或者属性,都包含一些形形色色的关键词。所以从关键词角度,我们大致判别出攻击

2. 符号

我相信对于这些payload,最直观的感觉就是各种各样的符号 比如’ ( ) < > % . ” / [ ] ; ‘ ,对于第一个payload,其中就有15个符号,对于其他的那就更不用说了,这些对于xss payload 来说很正常,因为我们总是在构造各种脚本标签语句,然而对于正常的访问或者数据,这种频度的符号使用是十分少见的。我们可以进一步的分辨出攻击

3. 长度

对于不同的情景下,长度有着不用的均值,但仅仅是对于需要较短长度的输入空间中,xss payload 的长度往往是相对于较长的。对于一些编码后的payload,其长度是‘十分不寻常’的长。所以我们也可以把这个特征应用于我们的识别攻击中

3. 整合处理

通过上面的分析,我们打算从三个角度入手: 关键词,符号,长度
假设关键词数量为X, 符号数为Y,长度为Z 我们就可以把每个Payload转化为[X Y Z] 这样形式的向量。神奇吧,通过这种手段,我们就把一个复杂的Payload浓缩成一个小小的向量
有的同学问,为什么不添加一些更细致一点的特征,比如‘大写字母数,小写字母数 ’ 这些特征呢

有的同学问,为什么不添加一些更细致一点的特征,比如‘大写字母数,小写字母数 ’ 这些特征呢
其实我们在添加的这些特征中,主要在于我们选取的特征对于我们分类后的结果是否有益处,比如对于一个充满xss关键词的payload,我们就假设可以80%的判断出这个是一个xss攻击,所以这个特征对我们的判断是有正效应的。而如果从一些模糊的特征出发进行判断,我们就假设有53%的判断出这个是一个xss攻击,但是这样的效应是很弱的,对于这种特征,我们就应该舍弃,因为这种判断不比我们随便猜的(50%)要好多少,而且还增加了计算量。

当然,我们清楚的意识到,如果某个特征没有被发现,那么我们的向量中就缺少了关于这部分的信息,比如我们原先只定义了两个特征 关键词和符号,缺少了长度这一特征,那么在我们的向量 [x y] 中,就完全体现不出payload的长度信息了。所以选择特征这方面是十分重要的。

4. 总结

在这一次,我们讲了如何提取特征和将payload转化为向量,其实提取特征是一门艺术,我们仅仅是从表面来分析文本数据从而提取特征。
虽然从表面上看,关键词,符号,长度好像是可以作为识别XSS的特征。但这还只是我们的猜测。在下一节,我会从数据分析入手,分析特征在数据中的分布,毕竟,数据是不会骗人的!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据