TCP重组十分耗存储资源,因此应该找到一些优化算法尽量避免TCP重组,并且又尽可能的不失流量的完整性。目前想到的有四个方面,配置限制,红黄绿名单,抽样算法以及合理的老化时长。
配置限制
红黄绿名单
红名单:恶意流量IP,当前IP所属所有流量不进行任何检测,直接阻断
黄名单:恶意流量IP,当前IP所属所有流量不进行TCP重组,但进行单包检测
绿名单:合法流量IP,当前IP所属所有流量不进行TCP重组,但进行单包检测
- 匹配到恶意流量后,客户端IP加入黄名单并计数加1,当前IP所属所有流量不进行TCP重组,但进行单包检测
- 黄名单中客户端IP达到一定计数阈值时,加入红名单,当前IP所属所有流量不进行任何检测,直接阻断
- 扫面线程定时扫描黄名单IP,达到一定时间阈值时,将其从黄名单中剔除掉
- 扫面线程定时扫描红名单IP,达到一定时间阈值时,将其从红名单中剔除掉,并添加到黄名单
- 匹配到合法流量后,客户端IP加入绿名单并计数加1,当前IP所属所有流量不进行TCP重组,但进行单包检测
- 扫面线程定时扫描绿名单IP,达到一定时间阈值时,将其从绿名单中剔除掉
- 抽样线程定时以计数概率抽取绿名单IP,当前IP所属所有流量进行TCP重组,如检测到恶意流量,将其从绿名单中剔除掉,并添加到黄名单
抽样算法
1. 泊松抽样
泊松抽样是随机抽样的一种,由于它不易产生同步问题,可以对周期行为进行精确测量;也不易受其它新加抽样的影响,因此,IPPM 将泊松抽样推荐为网络流量抽样的使用方法。
产生泊松分布抽样间隔步骤:
- 决定抽样的参数λ,例如平均抽样间隔是30 秒,时间单位为秒,那么λ=30,θ=1/30
- 产生一系列指数分布的(伪)随机数E1,E2,…,En,…,第一次抽样的时刻为E1,第二次抽样的时刻为E1+E2 ,依此类推,在 Ei触发时刻提取样本,一种生成指数分布的(伪)随机数Ei 的方法:在0 和1 之间产生均匀分布的U1,U2,…,Un,…(伪) 随机数,利用这些Ui 值,产生所需要的Ei 值:Ei=− log(Ui) / θ,其中log(Ui)是Ui 的自然对数
#include "stdlib.h"
#include <time.h>
double Uniform(double a,double b,long int*seed)
{
double t;
*seed=2045*(*seed)+1;
*seed=*seed-(*seed/1048576)*1048576;
t=(*seed)/1048576.0;
t=a+(b-a)*t;
return(t);
}
double Poisson(double lambda, long nSeed)
{
double u = Uniform(0.0, 1.0, &nSeed);
double fRet = log(u) * (-1) *lambda;
if(fRet < 1.0)
{
return Poisson(lambda, ++nSeed);
}
return fRet;
}
int main(int argc, char* argv[])
{
double fPoint,fSum;
int i,j;
int nLambda = 30;
srand((unsigned)time( NULL ));
fSum = .0;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
fPoint = Poisson(nLambda , rand());
fSum += fPoint;
printf("%-13.7f", fPoint);
}
printf("/n");
}
fSum/=100;
printf("平均值为:%-13.7f/n",fSum);
return 0;
}
2. 基于流长的分层抽样
网络流量具有两个显著特点: a) 短流的数量远远多于长流的数量; b) 采用相同的抽样概率,短流被抽样的概率远小于长流被抽样的概率。通常情况下,异常攻击流量如 DDoS、端口扫描和蠕虫传播等都是短流形式,所以,为了确保后续异常攻击流量检测的有效性,在设计抽样算法时必须提高短流的抽样精度。
检测到异常流量时,设置自适应抽样的抽样概率为 p1 = 0.2,p2 = 0.1,p3 = 0.01,未检测到异常流量时,设置为固定抽样概率 p = 0.2
流超时老化策略
令常数 T1、TN 表示两个超时阈值,T1<TN,常数 tg 表示一个时间粒度常量,且 TN-T1是 tg 的整数倍数,如果我们使用超时阈值集合{T1, T1+tg, ......,TN},对同一IP trace 进行网络流识别的话,将会产生一系列的网络流集合,这些网络流集合中的网络流数量,按照其对应超时阈值的顺序进行排列将构成一个数列{FT1, FT1+tg, ......, FTN}。
对于任意一个超时阈值 t,当使用它对某个 IP trace 进行网络流识别时,其生成的所有网络流数量记为 Ft,对于比它大的后一个超时阈值 t+tg,基于相同的 IP trace 生成的所有网络流数量记为 Ft+tg,那么就可以得到超时阈值 t 对应的网络流数量变化率,标记为 CPFNt:
MC:网络流数量变化率集合的平均值
RC:网络流数量变化率平均值MC的四分之三
合理的 TCP 网络流超时阈值不仅需要大于所有的 MC 波动超时阈值,而且需要其所对应的网络流数量变化率小于合理参考值 RC,这样的超时阈值称为合理超时阈值,能够保障 TCP 网络流的完整性。同时,考虑到 TCP 网络流的识别效率问题,则选择合理超时阈值中的最小值作为该 IP trace 网络流量数据的超时阈值,因此:
在当前的网络环境下 64 秒对于网络流识别而言,是一个合理的超时阈值经验值,能够在一定程度上保障网络流的完整性和识别率
Reference
- 泊松抽样函数的实现
- 赵阔. 高速网络入侵检测与防御[D].吉林大学,2008.
- 张孝国. 高性能互联网流识别算法研究[D].东南大学,2019.
- 危美林,张明清,董书琴,李海龙,齐先庆.面向异常流量检测的自适应抽样算法研究[J].计算机应用研究,2015,32(10):3052-3055+3059.