概述:僵尸主机通常会通过HTTP、DNS等协议主动向C&C服务器发出大量的请求,而这些请求通常会具有一定的周期性。本文介绍一种周期性检测算法来对IP地址是否具有周期性的DNS行为进行刻画,作为僵尸网络检测的角度之一。
僵尸网络DNS请求周期性
虽然僵尸网络一般都具有一定的周期性,但是不同类型的僵尸网络的周期性也不相同,并且周期也并非一成不变,因此我们需要一种不需要任何先验知识,就能够对周期性进行刻画的算法,来对IP请求域名的周期性进行评价。
自循环检测算法
对DNS对域名请求的周期性刻画首先需要我们在统计DNS信息时,构造一种IP-DomainName的序列结构,如下表所示。
IP-DomainName | t1 | t2 | t3 | t4 | … | Tn |
---|---|---|---|---|---|---|
211.65.193.10_www.sina.com.cn | 1 | 0 | 2 | 0 | … | 3 |
121.25.214.23_www.bing.com | 0 | 0 | 1 | 0 | … | 0 |
131.12.11.21_cn.yahoo.com | 0 | 5 | 0 | 4 | … | 2 |
IP-DomainName作为统计标识,统计在统计时间T内,每一个小时间片t中IP请求域名的次数,统计时间T又连续的t1、t2、t3、…、tn时间片构成,这些时间片对应的访问次数构成一个长度为N的序列S,S描述了统计时间T内的DNS请求分布情况。
循环自相关检测算法是一种不要任何统计具体间隔,而是通过分析IP-DomainName系列中对应的长度为N的序列S来确定其周期性的,具有不需要DNS请求周期间隔等先验知识、抗干扰和噪声能力等特点。循环自相关算法计算公式如下:
其中,f(t)表示第t个时间片内IP对某个域名的访问次数,f(t+k)表示循环右移k步长之后的结果,卷积结果代表两者的相近程度。如果k正好是周期或者是周期的整数倍,那么结果r(k)
的值就会非常大,反之则会非常小。
这里利用了卷积运算具有两个函数相似度越高,卷积值越大的特性
但是上面的r(k)值并不能让我们对对IP对域名请求是否具有周期性具有一个清晰地认识,例如一个IP-DomainName的r(k)值为99,这个IP-Domain是否具有较强的周期性?因此需要我们对其进行进一步的刻画,观察发现r(k)具有下面的性质:
可以推出:
由上面的公式可知,可以用$\alpha(k)$来刻画周期性,其值越接近1说明周期性越强,越接近0则周期性越弱。
我们在在实际使用的时候则可以设定阈值$\sigma$,设定的序列长度N之内的,分别计算$\alpha(k)$ (0<i<=N),取其中最大值与阈值$\sigma$进行比较,大于$\sigma$则认为其具有周期性,小于则认为其不具有明显的周期性。
序列S | r(0) | r(2) | … | r(N-1) | $\alpha(k)_{MAX}$ | $\sigma$ | Y/N |
---|---|---|---|---|---|---|---|
S1 | 689 | 20 | … | 701 | 1.0 | 0.80 | Y |
S2 | 99 | 20 | … | 18 | 0.63 | 0.80 | N |
S3 | 786 | 452 | … | 123 | 0.86 | 0.80 | Y |
参考文献
- xxx
- xxx