论文分享 | 经典图模型欺诈检测系统BotGraph

本周论文分享是一篇2009年的论文《Botgraph: Large scale spamming botnet detection》。这篇文章虽然年代比较久远,但是仔细剖析依然有很多值得借鉴的地方。另外,文章详细介绍了一个反欺诈算法从算法设计、工程实现到业务应用的整个链路,对于刚接触反欺诈算法的同学是一个很好的入门资料。

这篇文章的作者有 DataVisor 的创始人谢映莲和俞舫女士,这是她们在 微软 研究院时期发表的论文。关于 DataVisor 的无监督算法在以后的文章中会进行解析,在这里先挖一个坑。下面言归正传,我们来逐步解读这篇文章。

背景

论文是为了解决一种名为“僵尸网络”(botnet)的攻击,这种攻击一般是通过僵尸程序控制很多台“肉鸡”,通过这些“肉鸡”注册大量的邮箱账号(bot-users/bot-accounts)并发送垃圾邮件。我们希望通过算法找到这些bot-users。

算法设计

由于“肉鸡”是在统一的spammer指挥下进行邮件发送等动作的,因此bot-users之间会存在一些行为的同步性或者资源上的公用。论文提出的算法是基于botuser的注册、登录、发送邮件等操作时共享的IP地址,建立botuser之间的关系。

第一步:构建User-User图

以每一个bot-user为图上的顶点,以两个bot-user共享的IP数量作为边的 权重

第二步: 层次 聚类 (自上而下)

上述算法的意思是:设定边 权重 (共享的IP地址数量)和阈值T,抽取G的子图(边 权重 w>=T)。对G作连通子图 聚类 ,得到k个连通图。若连通图的成员数大于M,那么对该连通图进一步作取子图操作,但边 权重 阈值从T变成了T+1。不断迭代上述整个过程。

该核心算法是一个自上而下的 层次 聚类 ,随着层数的加深 聚类 条件越来越严格,第一层为原始图无约束条件,而第二层的团体必须满足w>=T,以此类推。

第三步: 剪枝 (pruning)

根据第二步得到团体后,需要对团体的置信度进行评价,即该团体的嫌疑度到底有多大。论文中采用的规则是团体中80%的成员日均发送邮件数>3,若团体满足该条件则认为是一个候选的botuser团体。

需要注意的是这里的删除操作可以认为是独立针对每一个节点的。父节点删除其子节点不一定会删除;同理子节点删除,父节点也不一定会删除。关于这一点,在最后的讨论中会再谈。

第四步:成团(Grouping)

第三步得到的候选嫌疑团体之后,还要做一次树的遍历。该步是为了解决如果父节点和子节点都是嫌疑团体,那么应该取哪一个的问题。遍历的方法是:

1)若父节点(成员数为N)至少存在一个子节点团体包含的成员数量为o(N),则向下遍历;

2)若父节点(成员数为N)所有子节点团体包含的成员数量都不超过o(log N),那么停止遍历。

前四步的算法实施过程可以用下图来形象化表示:

第一层是最原始的user-user图R;

第二层是由R分解的A和B两个大规模团体(子图)和其他小规模团体(或者孤立点),子图A和B中的边都满足w>=T并且成员数>M;

第三层则是由A和B进一步分解的大规模团体C、D、E,这些团体的边都满足w>=T+1并且成员数>M;

第四层则是由C、D、E分解的若干小规模团体(或者孤立点),这时已经没有团体满足w>=T+2并且成员数>M。

下面则是成团操作:

A满足向下遍历条件到C,C满足停止遍历条件则停止,A由一个giant group(C)和其他一些小规模团体(或者孤立点)组成,因此A是一个bot-user团体(C属于团体A)。

B满足向下遍历条件到D和E,D和E满足停止遍历条件则停止,B由两个giant group(C)和其他一些小规模团体(或者孤立点)组成,因此B不是一个bot-user团体(D和E是)。

第五步:验证

这一步是从更多的角度去验证团体是否正确,如团体中的账户昵称是否有相同的模式等。

工程实现

工程实现部分主要讲的是如何用分布式算法建图。

第一种简单的数据并行化方法:Map阶段,根据IP进行分区,对于每个分区维护一个以(Ui,Uj)为key的HashTable,生成(Ui,Uj,1);Reduce阶段,以(Ui,Uj)为key作hash partition,聚合weight。

第二种则是采用了过滤的方法:Map阶段,根据UserID进行分区;对于分区p,生成该分区中出现IP的一个List,将这个IP List分发到其他各分区,对于其他分区中的User若使用IP List中的IP数量小于w那么在图中肯定形成不了边,于是将其过滤掉,将剩下的(U,IP)传输到原分区p中。

问题和讨论

对于一个算法工程师,仅仅达到读懂论文的程度是远远不够的。为了能将经典论文在实际业务中借鉴和应用,一些背后蕴藏的问题需要认真思考。下面我列举一下读完这篇论文中后发现的问题:

1. 在剪枝 步骤中,为什么团体节点的处理是独立的、与层级结构无关?

2. 两种并行化建图方法各有什么优劣,我们如何根据自己的实际情况进行选择?

3. 在算法第四步中确定团体(grouping)的时候,为什么A是一个图体、但是B不是?这样处理会不会造成一些遗漏?

4. 可以建立User-IP的异构图进行连通图聚类 吗?与这样做与建立User-User图的区别在哪里?

5. 团体的层级结构应该采用什么样的数据结构存储比较好?

6. 对若干规模不等的子图做连通图聚类 时如何设计并行算法效率最高?



大家可以积极参与思考和讨论,共同成长哦~

资源地址 论文链接: https://www.usenix.org/legacy/events/nsdi09/tech/full_papers/zhao/zhao.pdf
原文地址: https://zhuanlan.zhihu.com/p/57479763
极验
极验

极验是全球顶尖的交互安全技术服务商,于2012年在武汉成立。全球首创 “行为式验证技术” ,利用生物特征与人工智能技术解决交互安全问题,为企业抵御恶意攻击防止资产损失提供一站式解决方案。

理论 反欺诈 算法