经典图模型欺诈检测系统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
作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: