最专业的八方代购网站源码!

资讯热点
微信十亿级用户异常检测框架的设计与实践

发布时间:2021-5-6 分类: 行业资讯

每月互联网用户越高,他们就越有可能成为黑色产品的目标。在微信的安全生态中,正是由于网络黑色生产层出不穷,而且已经发生了变化,微信安全性不断发展。本文将让您了解微信如何处理异常检测框架?

如何在大规模数据下检测异常用户一直是学术和产业研究的焦点,也是微信安全的实际生态:

一方面,黑色生产方法是可变的。为了捕捉黑色生产的恶意模式,如果采用监督方法模型,可能需要经常更新,维护成本高;

另一方面,通过分析恶意帐户,我们发现恶意用户经常表现出某种“聚合”特征,因此需要更多地依赖无监督或半监督手段来检测恶意用户。

但是,微信上每日活跃账户的数量基本上都在1亿。如何在有限的计算资源下从亿级帐户中查找可疑帐户给集群方案的设计带来了很多挑战,本文就是要解决这个问题。对问题的小小尝试。

异常检测框架设计目标和核心思想

设计目标为了满足在实际场景中检测异常用户的要求,在设计之初,我们提出以下设计目标:

它主要用于检测恶意帐户的可能环境聚合和属性聚合;

该程序需要轻松集成其他辅助信息,如现有的肖像信息;

该解决方案需要具有高度可扩展性,可直接用于十亿级用户群的异常检测。

核心思想通常基于聚类。异常用户检测思想是基于用户特征计算节点之间的相似度,并基于节点之间的相似度构建节点相似性连接图,然后在获得的图上聚类以发现恶意组。 。

但是,一个简单的分析会发现上述方案在实际应用场景中并不现实。如果在两百二个用户之间计算相似性,则时间复杂度和空间消耗基本上是不可接受的。

为了解决这个问题,可以将整个用户空间划分为多个子空间,子空间中的用户相似度较高,子空间中用户之间的相似度较低,因此我们只需要每个用户计算节点相似度。子空间避免相似度较低的节点对之间的相似性计算(这些边缘对最终聚类结果的影响较小),这可以大大减少计算所需的时间和空间开销。

基于这一思想,考虑到恶意用户自然形成的环境聚合和属性聚合,我们可以根据环境和用户属性划分整个用户空间,并仅在这些子空间上计算节点之间的相似度,并基于用户相似度图形挖掘恶意用户社区。

此外,直观地说,如果由两个用户聚合的维度是“可疑的”,则维度对恶意聚合的贡献应该更高,例如,如果两个用户在相同的IP地址“可疑”下,则与普通IP相比,它们之间存在更高的恶意聚合概率。基于此,为了计算每个用户子空间中的用户对之间的相似度,可以根据用户聚合维度的可疑性给予每个维度不同的权重,并且使用所有聚合维度的权重的加权和。作为用户之间相似性的衡量标准。

注意:根据上述思想,在划分属性后,需要在子空间中计算两个用户之间的相似度。但是,实际数据中特定属性值下的子空间会非常大,考虑到计算时间和空间开销,实际在实现中,我们会根据一定的大小(如5000)拆分特别大的组,并计算拆分子空间中的节点相似度。 (实际的实验结果表明,这种近似对结果没有太大的影响)

异常检测框架设计

基于以上思想,异常检测解决方案需要解决以下问题:

如何根据使用的用户特征/特征将整个用户空间划分为多个子空间?

如何衡量用户特征是否“可疑”?

如何根据构造获得的用户相似关系图找出异常用户组?

为了解决上述三个问题,经过几轮实验和迭代,我们形成了更为一般的异常检测方案。特定异常检测方案的框架图如图1所示:

图1异常用户检测框架

如图1所示。如图1所示,首先,用户空间划分模块根据“划分属性”将整个用户空间划分为若干个子空间,并且在这些子空间内执行后续节点之间的相似度计算;恶意属性检测模块基于输入数据自动并自适应地识别用户特征中的“可疑”值;在完成用户空间划分和恶意属性检测之后,用户相似度计算模块基于每个用户子空间中的恶意属性检测恶意属性库。并且相应的加权策略计算两对用户之间的相似性。对于每个特征及其对应的不同可疑程度,加权策略模块为其分配相应的权重值,并且用户之间的权重是节点。聚合项的所有权重的加权和,为了避免可能由边缘构建引起的巨大空间开销,该方案仅保留权重大于某个阈值的边缘;在获得在前一步骤中构建的用户相似关系图之后,可以使用常用的图。聚类算法执行聚类以获取可疑的恶意用户组。

用户空间分区

为了计算节点之间的相似性,我们首先需要将整个用户空间划分为不同的子空间。如何选择这些分区属性?经过一系列的实验和分析,我们将用户特征划分为以下两类:

核心功能:核心功能是指黑色生产账户的特点,以避免聚合,这需要很大的成本,包括一些环境功能;

支持功能:支持功能是指黑色生产账户需要避免聚合并更改所需成本的功能。

不难发现,对于上述核心功能,黑色产品避免的成本很大,因此在选择特定分区属性时,我们使用核心功能来划分用户空间,并计算分割之间的节点对子空间。相似。在计算子空间中节点之间的相似度时,我们引入支持特征来补充,使用核心特征和支持特征来同时计算用户之间的相似性,以提高恶意判断的准确性和覆盖率。

什么是“可疑的”

可疑属性提取

在确定分区属性之后,更重要的问题是如何确定哪些用户属性值是可疑的。这里我们主要分析用户的脱敏登录环境信息,并依靠微信安全中心累积环境图像数据多年。分析用户属性值的出现频率,分布和其他维度,并提取一些可疑属性值。

多粒度可疑属性识别

在实验识别号码的过程中,我们发现依靠登录数据的本地信息进行数天的维护,往往未能达到较高的覆盖率。为了解决这个问题,在可疑属性提取过程中,我们将整合安全中心的现有环境图像信息和反垃圾邮件数据等全局信息,以协助判断。本地信息和全球信息的融合具有以下两个优点:p>

结合本地信息和全局信息可以增加可疑属性判断的可信度和覆盖范围,提高算法覆盖率;

增加了用户相似度计算设计的灵活性。例如,如果特定帐户连接到密封帐户,则可以给予附加恶意方额外的权重以增加对已知恶意用户和环境帐户的攻击。

恶意用户身份

我们将超过特定阈值的用户视为恶意用户,其中阈值可以基于由不同阈值获得的算法的准确度和覆盖范围来选择适当的阈值。

此外,出于性能和可伸缩性考虑,我们使用Connected Components算法来识别可疑用户组。同时,在我们获得恶意组后,我们会分析该组并提取在社区维度中聚合的属性值,以增强模型的解释性。

从数百万到数十亿——异常检测框架性能优化路径

在最初的实验中,我们随机选择了大约一百万用户进行实验。为了将建议的解决方案扩展到全面用户并探索可疑用户组,我们进行了以下优化:

Spark性能优化

在基于Spark框架实现上述异常检测框架的过程中,我们也遇到了Spark大数据处理中常见的问题——数据偏差。不难发现上述异常检测方案涉及大量聚合操作,例如groupByKey,aggregateByKey和reduceByKey。为了避免数据偏差对聚合操作中Spark性能的影响,我们主要介绍以下两种策略:两阶段聚合和三阶段自适应聚合。

两阶段聚合

如图3所示,两阶段聚合将聚合操作分为两个阶段:本地聚合和全局聚合。第一次是本地聚合。首先,给每个密钥一个随机数,例如10以内的随机数,原始密钥将变得不同,例如(hello,1)(hello,1)。 (你好,1)(你好,1)将成为(1_hello,1)(1_hello,1)(2_hello,1)(2_hello,1)。然后,执行随机数之后的数据,并执行reduceByKey等聚合操作,进行本地聚合,得到本地聚合结果(1_hello,2)(2_hello,2)。然后删除每个键的前缀以获取(hello,2),(hello,2),然后再次执行全局聚合操作以获得最终结果(hello,4)。

图3两阶段聚合

三阶段自适应聚合

在用户空间划分阶段,我们需要根据分区属性将整个用户空间划分为多个子间隔。在实际的实验中,我们发现在十亿级数据下,使用两阶段聚合,特定密钥下的数据量会特别大,从而导致一种情况。 Spark通常是GC,程序运行速度非常慢,甚至根本无法获得聚合结果。

为了解决这个问题,需要注意的是,在划分属性之后,仍然会根据一定的大小来切割特别大的组,因此不必将该步骤直接集成到聚合过程中,因此具体属性可以解决。在特别大量的数据的情况下,可以大大提高算法的效率。

三阶段自适应聚合分为以下四个阶段:

随机局部聚合:设置一个大数(如100),参考两阶段聚合的第一阶段为每个密钥分配一个随机数,并在随机数后聚合密钥;

自适应本地聚合:随机本地聚合后,可以获得每个随机密钥下的记录数。通过单个随机密钥下的记录数,我们可以估计原始密钥下的数据数量,并在第二次部分聚合期间自适应地调整每个原始密钥使用的随机数;

第二轮随机局部聚合;根据随机数的自适应计算继续给每个密钥一个随机数,注意不同密钥使用的随机值可能不同,而第二轮后随机数本地聚合;

全局聚合:第二轮随机本地聚合后,如果特定密钥下的记录数超过设定的阈值(如5000),则保留结果,此阶段不执行全局聚合;否则,随机密钥恢复到原始密钥。价值,最后阶段的全球聚合。

更快,更快,更快

经过上述调整后,程序运行速度提高了约10倍。然而,在实验中,我们发现当对十亿级用户进行相似度计算并且边缘被阈值过滤时,获得的边数仍然是数百亿的水平,并且存储空间是超过2T。那么我们可以减少这种内存占用吗?答案是肯定的。

通过仔细分析整个异常用户检测过程,我们发现我们不需要计算子空间中所有用户对的相似性。通过初步实验,我们发现当用户的可疑性超过0.7时,基本上可以确定用户是恶意用户。根据用户的可疑性计算公式,当节点相关边缘的权重超过18.2时,其最终结果的权重将超过0.7。基于这个想法,我们引入了动态的Dropping策略。

动态下降策略

引入HashMap以保存当前子空间中每个节点的累积权重值,初始化为0.0;根据原算法遍历子空间中的节点对,如果节点累加两个节点的权重值超过阈值(18.2),则跳过该节点计算权重。否则,根据原始算法计算节点对权重,并将其添加到HashMap以更新关联节点的累积权重值。

引入动态Dropping策略后,对于较大的用户子空间,程序将跳过超过90%的节点对的相似度计算,这大大减少了计算量;同时,生成边缘的内存使用量达到十亿级用户相似度计算从原来的2T以下降到50G左右,它还大大减少了程序的内存占用。

图分区策略

通过相似度计算获得的用户相似性关系图的节点分布极不均匀。大多数节点具有较小程度,并且少量节点具有较大程度。对于这种分布,存在严重倾斜的网络图,而图划分策略的选择对Graph算法性能有很大影响。为了解决这个问题,我们使用EuroSys 2015 Best Paper提出的图形分割算法HybridCut来划分用户相似度图。

图4 HybridCut图分区算法

如图4所示,HybridCut图分区算法根据节点的程度选择不同的处理策略。对于具有较低度数的节点,例如节点2,3,4,5,6,为了确保局部性,算法将集中在一起,并且对于具有较高度数的节点,例如1,以便充分利用图形计算框架能够并行计算,该算法将其相应的一侧扩展到每台机器。

通过节点度来区分节点,HybridCut算法实现了局部性和算法并行性之间的良好平衡。以上只是对HybridCut算法基本概念的粗略介绍。有关该算法的更多详细信息,请参阅文章PowerLyra:差分图计算和偏斜图分区。

总结和讨论

优点和缺点

优点

上述异常用户检测框架具有以下优点:

它可以更好地检测恶意用户可能存在的环境聚合和属性聚合,具有较高的准确性和覆盖率;

它可以自然地融合图像信息和反垃圾信息,通过组合不同的粒度信息,可以提高算法的覆盖范围,并为算法提供更大的设计空间,并可以选择要用作的特征或信息。需要;

良好的可扩展性,可以直接扩展到数百万用户进行恶意用户检测,并且该算法具有很高的运行效率。

不足

无法检测到收集了非环境和属性聚合的恶意用户(当然,这不在解决方案的设计目标中),并且无法处理恶意用户使用插件的情况。绕过环境和属性聚合检测;

上述方案的加权策略部分需要手动分配权重,这无疑会增加手动调整的工作量。如果黑色生产恶意模式或使用特性变化很大,则可能需要重新调整重量并且维护成本高。

下一个…

探索自动权重生成策略,以解决可能的功能或黑色生产模型的变化;

是否有可能根据群集过程中的信息生成实时恶意攻击的规则;

上述方案更适合检测恶意用户可能存在的环境聚合和属性聚合,并且对于恶意类型的非环境和属性聚合无能为力(可能的解决方案是离散连续属性,但这太优雅了) )!),因此我们将尝试从行为维度分析用户行为并构建相应的打击模型。

参考

陈瑞,施杰,陈,等。 PowerLyra:在偏斜图上区分图形计算和分区[C] //第十届欧洲计算机系统会议。 ACM,2015: 1。

Spark性能优化指南——高级https://tech.meituan.com/spark-tuning-pro.html

作者:清远星思(微信安全)/李琦,袁东,苗立园(清华大学,深圳研究生院)

来源:微信公众号:腾讯演讲厅(ID:TX_DJT)

该地图来自PEXELS,基于CC0协议

« 天津代购源码网站建设公司选择以低价建站,经常吃大亏 | SEO分析:为什么SEO经常无法达到预期的效果? »