Skip to content

Categories

Tags

On this page

基于统计学的C2流量检测

1. 基础统计学知识

  • 中位数

    • 中位数是想要表示一个数据集中间位置的数据。
      • 比如一组数字 (1, 1, 2, 2, 4, 6, 9) 的中位数为 2
  • 绝对中位差

    • 中位数是想要表示一个数据集中间位置的数据,那么每个数据与中位数的差值,反映了这些数据偏离中间位置的程度,在这个偏离程度中取中位数得到的就是绝对中位差。

      比如一组数字 (1, 1, 2, 2, 4, 6, 9) 的中位数为 2
      这组数字相对于2的偏差为:(1, 1, 0, 0, 2, 4, 7),中位数为 1
      所以绝对中位差为 1
  • 偏度

    • 衡量随机变量概率分布的不对称性,是相对于平均值不对称程度的度量,通过对偏度系数的测量,我们能够判定数据分布的不对称程度以及方向。
    • fv5E4Y
    • 偏度的衡量是相对于正态分布来说,正态分布的偏度为0,即若数据分布是对称的,偏度为0。若偏度大于0,则分布右偏(正偏度),即分布有一条长尾在右;若偏度小于0,则分布为左偏(负偏度),即分布有一条长尾在左(如上图);同时偏度的绝对值越大,说明分布的偏移程度越严重。

2. C2流量vs正常流量

假设beacon的配置为: | Sleep时间 | jitter | 实际sleep时间 | | --------- | ------ | ------------- | | 300s | 20% | 240s~360s |

- 访问的时间间隔为240s-360s

假设正常用户随机浏览相同网页

  • 访问的时间间隔为60s-600s
  • 基于上述的假设和统计学知识,可以画出图:
    • gQKyp4
  • beacon中位数(Median): 319
  • 正常用户中位数(Median): 236
  • beacon绝对中位差(MAD): 21
  • 正常用户绝对中位差(MAD): 95

可以得出结论:

  • beacon:偏正态分布,绝对中位差比较小
  • 正常用户:偏正/负偏度分布,绝对中位差比较大

参考RITA (Real Intelligence Threat Analytics)的算法,通过请求的时间间隔和数据包大小的统计信息,得出可疑的C2的请求:

  • 偏度
  • 绝对中位差
  • 频率

实现的代码片段如下

//计算偏度
//store the diff slice length
diffLength := len(diff)
//diffLength-1 is used since diff is a zero based slice
tsLow := diff[util.Round(.25*float64(diffLength-1))]
tsMid := diff[util.Round(.5*float64(diffLength-1))]
tsHigh := diff[util.Round(.75*float64(diffLength-1))]
tsBowleyNum := tsLow + tsHigh - 2*tsMid
tsBowleyDen := tsHigh - tsLow
//tsSkew should equal zero if the denominator equals zero
//bowley skew is unreliable if Q2 = Q1 or Q2 = Q3
if tsBowleyDen != 0 && tsMid != tsLow && tsMid != tsHigh {
tsSkew = float64(tsBowleyNum) / float64(tsBowleyDen)
}
//计算绝对中位差
tsMadm := devs[util.Round(.5*float64(diffLength-1))]
//计算频率
bucketDivs, freqList, freqCount, histScore := getTsHistogramScore(a.tsMin, a.tsMax, res.TsList)

3. 参考资料

Edit this page
Last updated on 4/9/2023