从去年开始,我们发现很多影音公司开始使用机器学习和人工智能,希望找到一种快速有效的方法来分析和隔离新型恶意软件,并在同时,扩充恶意软件库。然而,实际上,这里有一个很大的问题。许多人将机器学习视为万能的魔杖,这实际上并不完全正确。0×00简介Deepviz是一个强大的自动化恶意软件分析平台,也是一个强大有效的智能威胁情报平台。此外,它还可以分析恶意软件分析器提取的所有数据,通过关联算法做出最佳选择。机器学习是Deepviz使用的关键技术。它可以识别新的恶意软件,找到相似的样本进行关联,并扩展恶意软件库。但实际上,实现一个有效的机器学习算法并不像大多数人想象的那么简单——不是“给智能机器尽可能多的详细信息,它会自己找到窍门”。接下来,我们一步步探索机器学习的原理。0×01。聚类算法聚类分析是一种旨在从给定数据集中识别重要组的统计分析技术。通过现有的恶意软件组,我们可以找到与该组具有相同特征的类似新恶意软件或样本。为了对数据集进行分组,我们需要一个表达式来描述数据集中每个元素之间的相似性。每个元素都由一个特征集描述,其属性在某种程度上对元素很重要。设计特征集时,主要考虑两点:***,需要了解如何选择属性。上面提到,很多人认为聚类分析应该让分析程序抽取上百万的属性进行计算,但是他们忽略了一点:考虑的属性越多,计算的时间就越长,有些属性是不能用来计算的准确区分恶意软件。例如,使用PE文件的唯一熵属性作为特征集将导致不正确的聚类。然而,我们需要找到足够的属性,使我们能够将一些具有特定行为的恶意软件分类到几个不同的恶意软件组中。所以我们要提取的属性是对恶意软件分析有意义的属性,这也是DeepvidMalwareAnalyzer***的一个组成部分。其次,找到最合适的指标来验证和比较恶意软件的属性。每个恶意软件都可以描述为一个数值属性(例如:信息熵)或一个抽象属性。在数学中,相似性度量用于描述两个对象之间的相似性。欧几里德距离是比较数值属性相似性的著名方法之一。那么,如何衡量抽象数据的相似度呢?Deepviz中给出了两个恶意软件及其相关的IP和URL。我们如何比较这两个集合?如何聚合它们?例如注意,下图是访问网站complifies.ru的所有软件的MD5聚合:我们的聚类算法将样本分为4个不同的组,上图是整个聚合过程最后一步的截图.要得到一个相似集,我们需要知道每个元素在哪些方面与其他元素相似,或者在哪些方面不同。这些值可以用距离矩阵表示。基于此,我们需要得到的是:1.选择一个特征集,该特征集由一个或多个属性组成,通过该特征集可以对原始数据集中的元素进行分类。2.选择一种计算距离的算法,通过该算法可以计算元素之间的距离。那么,我们需要做的步骤是:3.比较一个元素与该元素本身的距离,以及该元素与数据集中其他元素的距离4.使用聚类算法聚合相似的元素。在我们的例子中,我们聚合的是恶意软件组元素之间的相似性。欧几里得距离被大量用于计算数值元素之间的距离。在这里,我将介绍另一种计算距离的方法——杰卡德距离(Jaccarddistance),作为抽象值的度量。先举个例子,下面是两个样本及其相关网址的列表,计算集合中每个元素与样本的相似度,具体结果如下样本26414a9d627606c4974d8c3f372b0797和27f72541c93e206dcd5b2d4171e66f9a:如下:具体结果页面:https://intel.deepviz.com/hash/26414a9d627606c4974d8c3f372b0797/https://intel.deepviz.com/hash/27f72541c93e206dcd5b2d4171e66f9a/Jaccard相似度用于比较抽象数据点之间的相似度,是应用最广泛的相似度算法。算法定义为两个并集的交集中元素个数占并集的比例。如果两个集合没有重复元素,则Jaccard相似度为0。如果两个集合的所有元素都相同,则Jaccard相似度为1。Jaccard相似度的计算公式如下:考虑以下问题:1.集合A由19个元素组成2.集合B由12个元素组成3.两组相交处共有4个元素。通过Jaccard公式可以计算出两组之间的相似度为0.15。因此,上述公式也可以转化为按距离计算的公式,如下:distance=1–similarityif我们计算所有样本之间的Jaccard距离,可以得到如下距离矩阵:如图所示,集合A和B之间的距离为0.1***,C之间的距离为0.8,依此类推。元素与自身的距离为0,是对称的。A和B之间的距离与B和A之间的距离相同,呈对角对称。为了优化矩阵计算时间,我们可以使用这个对称属性来只计算矩阵的一半。矩阵计算完成后,就可以将距离矩阵输入到聚类算法中进行进一步计算。从这里我们可以看出,从数据中提取的属性越有效,后续聚类算法聚合的结果就会越准确。聚类算法(DBSCAN)聚类算法根据元素之间的距离对每个元素进行分类。更简单地说,它是一个元素与其所在集合的距离,其中还包括特征集中的元素。那么,我们如何将这个算法应用到恶意软件分析中呢?DBSCAN(density-basedclusteringalgorithm)是一种具有代表性的基于密度的聚类算法。该算法是将聚类定义为密度连接点。的***集,将密度足够高的区域划分成簇,可以在嘈杂的空间数据库中找到任意形状的簇。之前,我们已经计算了集合的距离矩阵,所以我们可以知道每个元素与任何其他元素的距离。该算法需要两个输入:1.最小密度(min_pts)2.扫描半径(eps)如下图所示:1.密度:以一个点为圆心,半径为eps的区域内点的个数为称为点的密度。2、核心点:以该点为圆心,半径为eps的区域内的点数大于最小包含点数(min_pts),则称该点为核心点,其中的点这些区域形成一个簇3.边界点:密度鱼中包含的点数(min_pts)最少的点称为边界点。有趣的是,边界点在其邻域内至少包含一个核心点。4.噪声点:不属于核心点或边界点的为噪声点。从上面的定义可以知道,每个形成的簇至少包含min_pts个点。epsradius的值设置得越高,聚类形成的限制就越少。距离中等的样本可能会被分到同一个簇中,原本是噪声的点可能会变成边界点(甚至是核心点)。因此,在我们的恶意分析程序中,Min_pts和eps的值可能会被改变。另一方面,需要注意的是噪声点并不是独立于集群的,它取决于我们是要寻找新的变种还是要替换现有的恶意软件集群。现在,我们再举几个例子来感受一下。在前面的例子中,我们通过“URLs”作为特征属性获取了元素之间的距离,然后我们使用IPs来做聚类。从我们网络威胁感知记录的页面中,我们发现了一个有趣的IP:1.234.83.146通过我们威胁感知系统的API,我们发现这个IP1.234.83.146同时关联了我们的353个样本***中第一步,我们使用Jaccard距离算法计算所有样本与IP列表之间的距离矩阵。Jaccard距离的取值范围为0(表示两个样本具有相同的关系),然后我们通过DBSCAN算法计算聚类,其中半径eps为0.5,最小密度min_pts设置为1,即噪声点也将成为一个簇。需要注意的是,上图并不是DBSCAN算法计算出来的结果。上图只是距离矩阵在空间图上的表达,矩阵图还需要进一步计算得到聚类。从图中可以清楚的看到DBSCAN划分了两个集群,集群的完整信息下载地址:https://deepvizblog.files.wordpress.com/2016/01/cluster1.docx然后我们尝试改值接下来看结果:设置半径eps为0.1,最小密度min_pts为1。不出所料,DBSCAN算法划分了更多的簇。具体资料下载地址:https://deepvizblog.files.wordpress.com/2016/01/cluster2.docx以上只是一些很简单的例子,但是你可以通过聚类算法识别出更多的新样本,无论是不管是否有恶意软件集群,只要能够提取出正确的数据,就可以帮助您识别和隔离恶意软件。以下是我们威胁感知平台得到的一些孤立样本DeepvizThreatIntel290f3104a53cc5776d3ad8b5622916804fa660009cba0b3401f71439b885e0676368cc6d88c559bb27da31ef251a52a127bd99bf75491447fb3383d1f54f4e40c7b19f8250b70ae5bd46590749bf96608f68c9a4a1769f57651a6a26b0ea2cf9
