基于无监督的垃圾邮件botnet挖掘算法

这篇博客主要参考了2009年的NSDI(计算机网络方向)会议上的paper《BotGraph: Large Scale Spamming Botnet Detection》,作者是Datavisor公司的CEO Yinglian Xie女士和CTO Fang Yu女士。(Datavisor公司是一家安全领域的公司,主要业务是反洗钱和反欺诈,一般运用在互联网金融和信贷场景之中。不同于其他家的公司,这家公司在欺诈用户识别的时候大量的使用了无监督的学习方法,而主要的思想和技巧都在这篇paper里做了介绍)

从paper所属的领域可以看出,他是计算机网络方向的paper,主要任务是识别网络中的垃圾邮件,并找出发送这些垃圾邮件的botuser,以幕后黑手spammer。这些botuser为了能够发送大量的垃圾邮件,往往会借助botnet网络—— 一批“肉鸡”进行批量的发送,由于这些“肉鸡”是在统一的spammer指挥下进行发送动作,因此它们的行为之间具有高度的一致性,引用作者在文中的一句话“Our approach is based on the observation that bot-users share IP addresses when they log in and send emails.”。由于欺诈者的资源是有限的,从而这些botuser之间的关系完全可从共享IP的数量这个维度进行衡量(在金融反欺诈领域这个关系可能会比较复杂,有时候需要多个维度的信息才能确定)。下面就来详细梳理一下作者提出的解决方案,这里主要针对的场景是检测botuser的Signups操作和login操作。

1 Detection of Aggressive Signups(针对Signups操作)
这里针对的对象是具体的某一个IP地址(因为互联网IP地址是动态分配的,因此一个IP地址可能会对应多个实体机),就是根据日志信息来统计一个IP在一段时间内的Signups请求操作的次数,通过EWMA算法,判断出其是否存在Signups异常操作。EWMA算法比较简单,其工作过程如下所示:
设统计Signups操作次数的时间窗口大小为t,那么令 S t 为预测窗口内Signups次数的预测值, Y t 为预测窗口内Signups次数的真实值,那么定义迭代公式为: S t = α Y t 1 + ( 1 α ) S t 1 ,其中 α 是一个取值在[0,1]内的值,这样针对预测值和真实值之间的差异就有: E t = Y t S t R t = Y t / m a x ( S t , ϵ ) 。很简单,当 E t R t 差异比较大的时候(当超过一定阈值的时候),说明预测值和真实值差别比较大,就说明了这时候的统计登录次数和之前的行为有着显著的不同,就说明了这个时候就出现了异常登录的行为。

2 Detection of Stealthy Bot-accounts
由于往往一个spammer经常会控制一批botuser账号,因此这些botuser会在一种协同工作的方式下进行工作(由spammer统一指挥的一批botuser之间会发送相同模板生成的email内容,或者有相同的login模式)。这部分主要有两个步骤组成:1 构建网络;2 使用类似层次聚类的算法进行社区发现。

step1:
在这篇paper中,作者以每一个botuser为顶点构建网络图模型,网络图中边的权重之间反应了两个顶点的紧密程度。这篇paper中以两个botuser曾经登录的共享IP数量作为边的权重(在实际的应用场景中,关于这个边的权重需要紧密地结合业务场景进行定义)。之所以要转换成网络图模型,是因为单独从userbot本身的行为模式来看,它们和正常的用户并没有太大的区别,只有把它们建模到网络图模型中,一起联合来看才会发现其中的异常。简单来说,正常用户往往以孤立点或者小社区的形式存在;异常用户往往以大社区的形式存在。

step2:Hierarchical Connected-Component Extraction
整个层次聚类的流程如下图所示:
这里写图片描述
从算法的描述可以看出只要是connected graph中的节点就认为是在同一个社区之内,同时从算法流程中看出每一层的聚类条件都是越来越严格的(这一点可以看成是这个框架的特性)。阈值M定义了最小黑产团伙的节点个数。最后把聚类的整个过程记录下来,就可以看成是一个树型的结构,如下所示:
这里写图片描述
图中特别小的节点就代表那些孤立点或者是节点数很少的社区,可以认为是决策树模型中的叶子节点,按照这样递归的过程,直到生成整颗决策树模型。

那么接下来新的问题就出现了,如何判断聚类生成的社区哪些是黑产社区,哪些是正常的社区??这个问题由paper中提到的pruning操作解决,即把正常的社区删除掉,只留下可疑性较大的社区。这个就需要根据社区内部这些userbot本身的属性决定的,这个就和具体的应用场景相关了。在这个垃圾邮件识别的场景下,单位时间内发送邮件数量超过3封的userbot所占比例就是其中一个很重要的指标,比方说超过80%就是异常社区(正常社区内这样频繁发送邮件的用户比例不会很高)。

在经过了pruning操作之后,相当于把决策树中的一些正常用户节点去掉了(这里的删除可以认为是独立地针对每一个node。即使父亲节点删除了,其子节点还会保留;同理子节点都删除了,父节点也会保留。节点与节点间的处理关系是独立的),接下来可能还有一个问题。就是经过了pruning操作之后留下的黑产节点,可能会包括两个以上的黑产团伙(它们可能是比价相似的黑产团伙),接下来对所有的黑产节点(N)进一步划分,然后观察其生成的子节点,可能有以下两种情况:1 子node中包含最多样例的数量为o(n);2 子node中包含最多的样例数量不超过o(log n)。针对第一种情况,需要对当前的父亲节点进一步的划分,针对第二种情况当前父节点就可以停止继续划分了。

最终当作者对一些黑产数据进行社区划分和黑产社区鉴定之后,会发现同一个黑产社区内的username会有相同的格式,例如都是由特定格式的数字和字母组成(因为这些username都是在spammer统一操作下使用相同的软件工具生成的)。

猜你喜欢

转载自blog.csdn.net/guoyuhaoaaa/article/details/81015222