第十三章 利用机器学习搜索网络威胁

机器学习(ML)和人工智能(AI)是目前最热门的两个词。许多供应商营销说他们正在使用ML和AI来解决我们所有的安全问题。我们许多从事安全行业多年的人会立即对供应商提供的任何“简单”解决方案打折扣。网络狩猎更是如此。这并不意味着适当利用机器学习没有多少价值。在本章中,我们将介绍如何使用ML实现一些真正可靠的搜索结果,不需要数据科学背景。我们还将尝试让您更好地了解ML是什么以及它在流程中的工作方式。

对利用ML进行搜索充满热情的原因之一是,它使我们在各个方面都更加有效,特别是对于新晋分析师而言,他们可以“打出超出自己体重的一拳”。请允许我解释一下。

当我在寻找一个新的组织时,我倾向于首先查看的地方之一是HTTP头信息的流出。这是为什么呢?HTTP协议的RFC没有为HTTP报头指定特定的序列,也没有指定它们应该是驼峰大小写还是其他什么。但是,大多数合法的程序使用Windows、Mac或Linux库来创建HTTP通信。虽然HTTP的RFC没有指定case和order之类的细节,但这些库肯定有约定。许多恶意软件在内部创建HTTP头文件,而不是利用操作系统库。因为恶意软件作者很少熟悉标准HTTP库的所有细微差别,所以您最终会得到一些细微差别,这些差别可以用来区分手动创建的HTTP和标准的。这种方法的缺点是需要花费大量的时间和精力来熟悉这些细微差别。有了ML,我们可以让电脑找出其中的细微差别。

需要说明的是,ML不是解决你所有网络搜索需求的银弹。使用ML时,最大的工作量是预先管理数据和训练模型(本章将对此进行介绍)。由于无论如何都需要获取和管理数据以有效地进行网络搜索,因此已经完成了相当一部分工作。ML的好处是,一旦您为您的组织训练了一个模型,团队中任何一个人,从最缺乏经验的到最有经验的,都可以利用它来发现恶意活动。这就是我说的“出拳超过你的体重等级”。“ML应用于网络狩猎的令人兴奋之处在于,你可以让新手网络猎人取得与有经验的网络猎人相同的结果。考虑到我们这个领域的人才短缺,这是非常有用的。

我想确保这篇文章不是理论性的,并允许你,读者,和我一起工作。为此,我将展示样例代码,并介绍一个真正的ML项目,该项目的重点是在HTTP头文件中查找。

一、机器学习的基本知识

你不需要成为一个数据科学家来利用机器学习来获得一些真正优秀的结果。但是,您需要对ML有一些基本的了解才能有效,因此我们将从一些基础知识开始。

第十三章 利用机器学习搜索网络威胁_第1张图片

机器学习是人工智能这个更大领域的一个子集。在当前的成熟度级别上,ML主要是应用统计数据。这种说法无疑会冒犯许多数据科学家,但请注意“在当前的成熟水平”这一限定词。图1显示了AI和ML之间的关系。

大多数ML算法处理一组数据并创建特征矩阵。这个特征矩阵称为您的“模型”,它将用于评估其他数据。该模型是用数据训练ML算法的输出,用于评估其他数据以确定它是什么。例如,当您在搜索中使用ML模型时,您将对模型运行新的数据,然后分析人员应该仔细查看结果。

毫无疑问,你们中的一些人在想“我已经迷路了”,所以让我用一个比喻来更清楚地说明这一点。让我们来比较一下不同的汽水罐。你如何辨别它们的区别?它们通常是相同的大小和形状。但是,当然,在颜色、文本和其他细节上有很多不同。本质上,这是ML的核心。算法是对数据点进行采样,比如颜色和文本,然后进行类比和比较。

有了一个合理的易拉罐样品,ML就可以很容易地从两个易拉罐中确定一个。

汽水罐的分类是ML的一个简单的用例,ML的有趣之处在于更有挑战性的比较,比如狗和猫。乍一看,这似乎同样简单。但是如果你想一下狗和猫的范围,你不能仅仅把它和耳朵形状,脸的形状或颜色联系起来因为狗和猫的种类很多很多。虽然最后的比较比较复杂,但是ML在这里也可以做得很好。狗vs.猫,以及大多数ML分类问题的关键是一个足够的数据集来覆盖极端情况。

ML成为了威胁搜索的一个优势,因为一旦我们训练了一个模型来区分我们感兴趣的东西的类型,例如恶意的HTTP内容,计算机就会不知疲倦地查看大量的数据并不断地查找(即搜索)。

ML不像签名,匹配意味着您已经找到了一些东西。相反,把ML想成是你正在寻找的“类似”的东西。一个好的模型可以产生80%到90%的准确率。只要准确率超过90%,你就有了一个很好的模型。这就是为什么ML通常更适合于寻找这样的情况:您希望获取大量数据,然后让ML算法将其简化为人们应该关注的有趣内容。

如何将ML应用于狩猎之类的问题?利用机器学习有六个关键步骤。它们是:

1. 选择要解决的问题

2. 决定方法

3.有适当的数据

4. 确定适当的特征

5. 建立你的工具

6. 测试和调整

如果你完成了以上六个步骤,你的武器库中就会有一个强大的工具。我们将依次介绍这六个步骤。我在简化它,并无意冒犯数据科学家。这些步骤(以及许多子步骤)的细微差别确实需要整个领域的专门知识。然而,ML当前状态的美妙之处在于,许多比我聪明得多的人已经承担了大部分艰苦的工作,并将其简化,这样只要对ML有了基本的了解,就可以获得强大的结果。这和开车很相似。一个了解汽车的机械和工程细节的人可以修改它,从而比一个只知道如何驾驶它的人得到更好的结果。因为有那么多有才华的工程师制造了这辆车,并在引擎盖下做了许多复杂的事情,所以我可以很有效地利用它来满足我的需求。我在本文中的目标之一是让您相信,ML已经达到了类似的状态,您可以在不成为数据科学家的情况下有效地使用它。

二、第一步——需要解决的问题

利用ML的第一步是决定要解决什么问题。这是重要的第一步,因为虽然机器学习是一个强大的工具,但它不是解决所有问题的万能药。ML目前的成熟状态是,它比更广泛的问题更有效地解决非常特殊的问题。

下面是一些我用ML来帮助解决的问题:

•在我的DNS日志中找到恶意活动

•在我的Windows日志中找到恶意的PowerShell活动

•查找伪装成合法HTTP/HTTPS的恶意流量

注意每一个都是非常特殊的问题。ML不能很好地解决的广泛类型的问题的例子是在网络上找到所有的恶意协议或者期望一个单一的模型找到所有类型的恶意事件。这并不是说ML不能用于更广泛的用例,而是随着用例的宽度增加,复杂性和困难度也会增加。从本质上说,您可以更紧密地确定问题的范围,您就更有可能成功地创建一个具有高精确度的模型。

选择问题的另一个关键方面是需要适当的数据。我们将在步骤3中进一步展开,但是作为选择问题的先决条件,这一点值得注意。

三、第二步-决定方法

第二步是决定要使用有监督的ML还是无监督的ML。这一步通常是一个非常简单和快速的决定,但是需要解释一下它们是如何工作的,以及相关的优缺点。

1、监督机器学习

ML之所以这样叫是因为你需要指导(即监督)它的训练。这意味着您将需要一组数据,这些数据在您试图构建模型以识别的类型之间分离。例如,如果试图在Windows日志中查找恶意PowerShell,则需要将恶意和非恶意日志分开。当你训练你的模型时,你会告诉程序哪个是哪个,并让它在未来建立模型来区分。

为了不太深入科学,监督学习通常是与特定问题一起使用的最佳选择,就像我在前一节中提倡的那样。

2、非监督机器学习

监督ML的另一种替代方法是无监督ML,这可能并不令人吃惊。无监督ML本质上是异常检测。无监督ML非常强大,但通常更适合更广泛的用例。

毫无疑问,一提到“异常检测”,一些有经验的安全从业人员就会兴奋起来,而且它确实非常有用。不过,我倾向于不这么做的原因是,我发现现实世界中的大多数异常并不是安全问题,而是配置错误的服务器或奇怪(但不恶意)的用户或应用程序活动。通过异常检测,您最终会得到另一个需要查找的数据堆。

当然,这是有价值的,但我发现,通过为我想要寻找的东西精确地训练一个模型,我可以得到更有趣的东西。但需要明确的是,两者都有各自的价值和地位。

另一种描述监督和非监督的方法的方法是,监督需要更多的前期工作来管理(即标记和清理)你的数据,而非监督允许你更快地运行,但将需要更多的分析在背面评估什么是发现。这篇文章的另一方面,当然对于那些想继续深入研究ML的人来说,是一种混合方法,你可以利用无监督的ML来帮助你找到感兴趣的东西,然后切换到有监督的ML来构建一个模型,以长期找到那些有趣的东西。

四、第三步—选择适当的数据

机器学习的肮脏小秘密是,这一步是你将花费大部分时间的地方。稍后您将看到,实际的ML工作非常简单。艰苦的工作是管理您的数据。在一个典型的ML项目中,我花费了大约90%到95%的时间来整理数据。“无用输入,无用输出”这一古老的比喻无疑适用于ML。数据管理得越好,结果就会越好。

对于本文的示例代码和应用程序,我使用了监督学习。我在本例中选择使用的问题是在HTTP标头中查找恶意活动。对于我的示例,第一步是收集大量HTTP头信息。我是Bro的超级粉丝,所以任何涉及网络流量的事情我都会使用Bro。

对于像我这样发现恶意流量的用例,可以从http://malwaretraffc-analysis.net开始。这是一个神奇的宝藏的恶意软件样本,包括包捕获。所以,让我们从一堆恶意流量pcap开始吧。如果您正在使用Bro,那么下一步就是对pcap文件运行Bro -r。Bro将处理它们中的每一个,就像它是实时通信流一样,并根据您启用的Bro配置和模块生成.log文件的标准组合。您可以在图2中看到这一点。

第十三章 利用机器学习搜索网络威胁_第2张图片

在本例中,我们正在寻找httpheader.log。这不是一个标准的Bro模块。它不是像HTTP

.log那样将每个HTTP组件拆分成单独的列/字段,而是创建整个HTTP头的单个串行连接。我选择这个而不是HTTP的原因主要是为了试验和测试使用ML分析HTTP头文件的不同方法。

下一步是分析样本中不属于恶意活动的任何部分。这个特定的样本相当干净,只是包含恶意软件活动,所以它适合用于训练我们的模型。你会想要养成检查的习惯,因为很多时候恶意软件会通过点击谷歌DNS或Microsoft NTP来检查连接。同样的检查也由许多合法的软件来完成,所以你不想训练你的模型,让它知道那些特定的活动是恶意的。

获得非恶意的流量实际上是一个更大的挑战。理想情况下,您希望从希望使用模型的环境中提取典型的流量。但是你需要花一些时间来排除任何恶意活动,这样你就不会建立一个认为恶意流量是可以接受的模型。不可避免地,这是我花费大部分时间的地方。我发现编辑出httpheader .log这类网站中的恶意活动比预先消除它们要容易得多。为了实现这一点,我从我的企业中拿出一整天的流量,并通过Bro来运行它。然后,我交叉引用了团队当天发现的所有恶意活动,并将这些条目从httpheader .log文件中删除,并将它们粘贴到另一个httpheader .log文件中,并将其标记为mal_httpheader .log。

你将需要大量的非恶意流量。你拥有的流量越多,你的模型就会越好。显然,很多都不是很具体。“很多”到底有多少并没有一个正确的答案。我通常尝试收集至少1tb的非恶意流量。这不是一个要求,但我在自己的实验中发现,这是一个很好的阈值,在我的模型中得到了很好的结果。

五、标记和分区数据

一旦你收集了你的恶意和非恶意的数据(或任何你想要的分类),你需要确保你已经把它分开,以便于标记哪个数据是哪个类型。当我收集数据时,我简单地在我的项目文件夹下创建“恶意”和“非恶意”文件夹,并在清理它们时将日志碎片放入适当的目录中。

您需要做的另一件事是为以后的测试划分出每种类型的20%。在收集了训练数据之后,我创建了“恶意测试”和“非恶意测试”文件夹,并简单地将20%的数据移动到每个文件夹。我们将使用这些数据集来确定我们的模型在构建之后的有效性。80%将用于创建模型。

六、第四步-确定合适的特征

特征是ML模型用于计算统计方差的数据点。获得正确的特性对模型的准确性至关重要。这一步需要最深入的数据科学和统计知识来构建可能的最佳模型。也就是说,您仍然可以构建非常有效的模型,而无需彻底地了解特性选择。

以下是一些不同类型车辆的特点:

•HTTP头文件中的URL

•HTTP头文件中的用户代理

•在Windows事件日志中的事件ID

•DNS查询和响应的DNS日志

从这些示例中可以看出,基于主题内容的专业知识,某些特性通常很明显。有时候,最好的特性并不明显,一个合适的数据科学家通常不会假定任何特性,而是使用所有可能的数据点作为特性构建一个模型,然后使用各种测试,比如计算各个特性之间的差异,以指导应该选择哪些特性。然而,即使对数据科学家来说,良好的旧实验也是其中的很大一部分。我在实践中发现,从基于对协议或数据的理解的特性开始,大多数情况下会产生非常有效的模型。

正是对优秀特性的试验使我在单个HTTP头值上使用httpheaders模块。请记住,与构建静态IDS签名不同,我们希望构建更模糊的结果。我们的模型永远不会产生100%的准确性,但它也会发现一些东西,一个静态签名不会因为这些相同的原因。这正是为什么我觉得ML是一个伟大的狩猎工具,而不是一个标准的检测工具。

特性选择的最后一个考虑因素是,更多的特性不一定比更少的好。添加的特性越多,计算就越复杂(因此也就越慢)。有一个最佳点,在这个点上,您有足够的特性来保证高度的准确性,但又不会太多,以至于模型永远都无法处理您的数据。

你可能感兴趣的:(第十三章 利用机器学习搜索网络威胁)