扩展安全威胁检测与Apache火花和砖

下载幻灯片

苹果必须检测各种各样的安全威胁,并上升到挑战使用Apache引发跨不同池的遥测。这个演讲包括一些本土的解决方案我们构建解决规模并发症:

  • Notebook-based测试CI——以前我们有一个混合发展模式为结构化流工作中大多数代码都编写和测试笔记本,但单元测试要求出口的笔记本用户的IDE以及JSON示例文件是由当地SparkSession执行。我们部署了小说CI解决方案利用砖工作API执行真正的集群上笔记本在DBFS使用示例文件。再加上我们的新测试生成库,我们看到2/3减少测试所需的时间和地方少85%。
  • 自调优警报——苹果公司的安全分析师团队筛选检测规则生成的警报。他们注释为“假阳性”或“真阳性”后的结果分析。我们已经把这个反馈用于结构化流管道,因此,系统自动从共识,调整未来的行为。这有助于我们从其余的噪声放大信号。
  • 自动化的调查,分析师可能会问一些标准问题进行警报时,如:这个系统通常做什么,在哪里,和谁使用它?使用ODBC和工作区API,我们已经能够templatize许多调查和在某些情况下,整个过程包括自动化事件控制。
  • DetectionKit——我们写一个自定义的SDK形式化的配置和测试工作,包括一些有趣的特性,如模块化前/后置处理程序变换函数,并使用foreach批stream-compatible排斥机制。

看更多的火花+人工智能会话

免费试着砖

视频记录

——你好和欢迎。我希望每个人都有一个好的火花峰会。我对苹果的Josh Gillner检测工程团队。在这个会话中,我们将看看威胁检测使用火花和砖与特定的关注一些整洁的技巧我们克服挑战的规模。让我们开始我的团队是谁,我们做什么。在高级别上苹果的检测工程团队使用的遥测系统在我们公司发出的基础设施。从主机水平网络套接字应用程序事件日志数据。我们的工作是筛选的数据可以显示恶意活动模式如恶意软件或网络上的黑客。它可以非常具有挑战性的,因为我们要找的人正试图隐藏他们的行为和融入正常使用的数据,但这就是使它有趣。

哪些技术?

为此,我们使用许多不同的技术。一些现成的和定制开发。这些都是那些我们将集中在一点在这说话。

在我们深入了解细节之前,重要的是水平集的一些术语我们将使用。我们将开始通过观察我们称之为检测或代码的最基本单位监控程序的构建块。

检测是一块业务逻辑输入一些数据适用于任意数量的转换模式匹配或统计数据,然后出来一个安全警报。我们封装这些Scala类,通常有一个类一个笔记本一个砖的工作关系。这些能做漂亮的截然不同的东西,但通常他们都遵循相同的模式使用相同的组件。

接下来会发生什么?

这些工作已经发现一些潜在的恶意,意识到是输入一个编排系统。我们有一个持续的安全分析师团队进行警报找出如果有真正的安全问题或只是看起来可疑但最终造成任何威胁。分析师分析完成后,编制系统钩子内部系统,可用于响应,包含一个安全问题。锁定账户或踢机器的网络。在某些情况下,编排系统可能已经足够的信息包含一个问题没有一个人。我们会看看,以后多一点。

现在我们已经了解这些检测的一般流程,让我们看看一些提出的问题,我们继续编写越来越多的检测工作。

问题# 1——发展开销

首先是一个不合理的开销在部署新度检测。大部分的代码基本IO和常见的转换是完全相同的只是重新实现在许多笔记本。这些工作需要一个相应的测试和人手动保存示例文件,编写Scala测试。这意味着我们是不可持续的想出了很酷的新想法的速度比我们可以把他们轰出来。

问题# 2 - Mo检测,密苏里州的问题

其他问题后才开始表面我们已经部署了一系列的这些工作。改变所有的行为或检测需要大量的重构的一个子集在所有这些不同的笔记本电脑,即使你要的功能是相对次要的。每个工作都需要某种程度的持续维护和性能调优,与所有这些不同的配置可以很乏味和逻辑。

问题# 3——不支持常见的模式

人们倾向于使用一些常见的模式,这些检测,充实或统计基准,对历史数据比较当前活动的新颖性。但我们看到的是,没有任何手头基本每个人都有自己的特殊的方式解决同样的问题。当我们需要更新或修复它们,我们必须找出每个实现真正把我们检测到下一个级别,我们需要如何编写形式化和更好地利用我们有限的人类的能力。所以我们开始一段旅程找到解决这些。我们和很多行业合作伙伴和看一些第三方的产品,但是很不满意,因为我们bob体育外网下载无法找到任何适合我们的需要。

所以我们花了几个月到达了一个重大突破。一个全新的SDK的安全检测检测设备。这个框架可以显著降低运行新检测的复杂性,帮助我们反应更快通过提高质量和自动化调查。

组件

这里有太多的特性来深入,但我将突出一些。

让我们从输入开始因为它们在任何检测的第一步。的数据集加载这些工作需要随机应变的变化。在生产他们会想要一个蜂巢表名,在功能测试中,他们会希望保留样本文件的路径和dBFS。这意味着选择的火花。阅读必须具体化,在全班同学从外面通过冲突。但是我们把它进一步建立一个火花之间切换。阅读和火花。readstream外部提供的分区过滤器。它允许我们改变从一个流到一批检测需求而不改变类本身。

在大多数情况下,一个检测包含不同的逻辑就像一桶,所有寻找相同高度的不同方面的攻击。的代码结构,我们喜欢说有多个检测警报,其中每个警报被描述为一个数据帧火花产生的一些变换输入,检测类创建一个公开了一个键值的所有奖项名称映射到各自的数据帧,可以使用其他检测或后置处理方法,应用前一个事件被发送的分析师审查。

就像我们外部化控制检测输入发射器做同样的事情,但输出的东西。在生产中,我们发送一个糟糕的AWS运动。但是在其他情况下可能需要运行一个磁盘或内存中的一个表。在发射器代表所有这些输出参数如目标运动提示文件或流传递选项。就像输入,发射器也提供的配置,这样你就可以轻松地更改输出检测无需修改类的行为。

配置推理

有很多小细节需要这些工作很烦人提供流路径或调度程序池检查站。我们发现他们中的大多数可以推断按照惯例使用参数已经在可选的配置对象覆盖只有在人们想要手动指定它们。这最小化所需的字段和简化我们的配置结构。

检测可以包含多个相关但独立的话,大多数时候,你会希望他们以同样的方式进行配置。使用相同的发射器或推断的参数相同的约定。默认情况下,他们会继承父母的配置检测,但仍单独配置,应该你想细粒度的控制。

模块化的前/后处理

我们可以把检测数据帧序列的转换。第一变换序列或者我们称之为的预处理方法中提供配置应用核心检测逻辑。这是一个理想的地方注入特定类型的操作,比如分区过滤器将确定如何将处理输入的数据,或上的谓词下推流,告诉它从哪里开始。

毕竟已经处理的数据,我们已经取得了一系列的可疑事件,可能会有一些额外的充实应用之前他们承认,其中许多是常见的在多个工作。为了更方便我们爆发了一些常见的转换为可重用模块,定义在一个可变的学者名单顺序和应用的检测。最后,可能有某些类型的操作是本地不支持结构化流API。对于那些我们可以指定一个变换函数应用在每一批。我们会更详细地讨论一个具体的例子。

手动调整周期检测

检测本身就是不完美的。他们为了寻找异常数据集,有时充满这些怪异的小边界情况和特性会随时间而变化的,和真的很难预测,即使你有世界上所有的历史数据。实际上,人类评论这些事件的信号噪声比是非常重要的。我们不断调整检测使用这些分析师的建议。但是他们一个接一个都是需要花费很多的时间和他们在工作的同时,我们没有写新的检测周期。

自调优警报

当分析师分流提醒他们的标签是假阳性,如果发现不是真正的安全问题,或一个真正的正面实际上如果是恶意的。这个反馈是记录三角洲表中,我们将它回检测管道。而不是我们手动调整每一个检测,系统可以从动物的共识和自动调整未来的行为。这样每天的大部分调优是自我服务,我们看到工作总量减少了70%左右,当我们部署的,这很好。

复杂的除外

在某些情况下,自动化很难弄明白,我们可能仍要做某种程度的手工调优。每一轮的调优添加一个排斥检测逻辑,直到不可避免地看起来最右手边。最后这些丑陋的附件一样大的检测逻辑本身,不是这事,不是那件事一遍又一遍,一遍又一遍。为了解决这个问题,我们建立一个新的机制,爆发的SQL表达式列表应用对我们所有的产出和最后的每一批的变换。它允许我们我们要排斥一样复杂逻辑,同时仍然保持检测类很干净。因为他们融入我们的功能测试,我们可以确保过于挑剔或畸形的SQL表达式之前被他们影响生产工作。尽管这些表达式匹配的事件被排除在分析人士认为,我们不仅要在地板上。排除所有的事件写进自己的表,我们可以排除的持续监测记录的数量单独每个表达式。

重复调查…会发生什么?

让我们看看会发生什么在单词分类。通常情况下,没有足够的信息在提醒自己作出裁决。他们想要运行一些临时查询笔记本收集一些确凿的数据。他们需要采取一些有效载荷参数,创建一个笔记本和填写,然后坐在那里等待这些查询完成。很多他们正在寻找的信息并没有真正改变这一切从调查调查。前后发生了什么,通过词和这台机器或该帐户通常做什么?

自动调查模板

为了帮助实现这一目的,我们使用砖工作区API templatize和自动化的执行调查的笔记本。每个检测笔记本和一个特定的目录中有一个对应的模板,编排系统克隆和填充的信息工作。之间的查询是相同的,因为许多相似类别的检测,我们可以模块化和重用组件的模板与百分之一的笔记本电脑运行魔法命令。

这让我们自动化有用的东西…

这个功能武器分析师的信息,他们需要更快的做出决定。也抽象一些巧妙的事情的复杂性,人们通常不会做手工的检测周围可疑的流程执行,一些自定义D3树将呈现一个互动的过程,让你跟踪血统及其关系。在这个例子中,有一个互动反向壳后开发的java web服务器进程,这将是非常难以算出来如果你只是看表中的记录。

我们也采取了一些查询,将执行一个模板笔记本和编排系统通过ODBC运行它们。而不是人类解释结果在一个笔记本,这台机器可以评估当前发生的活动,反对历史基线收集并作出裁决。如果判决的足够的能力,它可以自动包含问题甚至没有人类参与。所以你会得到这些检测测试好,但不一定在现实世界中工作。

检测测试

因为完全结构化,二进制格式像三角洲不要玩和版本控制。我们会用半结构化格式,如JSON和担心编纂模式到我们的测试套件。

所以我们写了一个测试生成Scala库封装测试,我们可以在笔记本运行它们。只使用配置对象中的信息,它将创建一个确定为每个单词,推断出路径的支安打,样品按照惯例。所以你唯一需要担心的作者一个测试运行你的样品和到了正确的地方。,我们看到一个戏剧性的减少85%的代码需要编写一个基本的测试检测。

但是我们把它进一步基于笔记本测试集成到我们的词。它会从公关克隆笔记本到一个特定的目录和一个真正的集群上执行它们,返回一个JSON对象通过DB跑龙套总结测试结果。我们的CI系统收集这些结果,并将通过或失败构建基于发生在砖远程实例。它还可以让我们写来检测,做事情通常不会在一个IDE工作,像百分比运行其他笔记本电脑组件的进口。

乔布斯Cl -为什么?

一旦这些测试通过在砖和生产笔记本的土地,我们还需要手动创建和配置工作,将笔记本的任务执行。可能需要一个特定的cron每一个表达式或想要运行在一个特定的集群。和所有这些细节都是手工输入和维护。在某种程度上,我们有太多的这些检测工作继续管理砖UI,并没有真正的方式进行批量更改集群之间移动一堆工作。

但是砖最近宣布了一个非常漂亮的β称为栈的特性。这是一个梦想成真的人希望建立一个工作CI系统,因为它消除了大部分的复杂性从维护库存和状态在不同的砖的API。你可以包一份工作和所需的所有资源,如笔记本电脑或dBFS文件到一个小小的配置节,和它被部署为一个包。

部署/重新配置与单一的公关工作

所以我们建立一个功能齐全的CI在此之上堆栈COI的工作。我们所有的笔记本电脑,文件和工作参数可以存在并得到与CI做繁重的工作部署。我们去栈配置对象,然后将它们传递到硬币,创建或覆盖的任何资源。但对于工作具体地说,有一些重要的收尾工作,并不是目前涵盖的堆栈。我们增强COI几个助手脚本,将启动新创建的工作或者工作或底层资源已经改变,那么就重新开始他们接受新的配置。乔布斯CI的最后一块拼图,每一块部署测试和自动化的管理从端到端检测。

很酷的东西与CI工作!

到目前为止,我们已经能够做一些相当整洁的CI工作,这将是一个真正的痛苦与UI。诸如集群之间移动一堆工作,或让它重新启动所有的工作当我们改变共享组件。和这是一个理想的地方为我们招收新创建的工作进入我们的标准平台,所以我们得到监控和警报在缺省情况下,这些流。bob体育客户端下载唯一的警告是写作栈JSON是很乏味的。我们包装一个CLR实用程序生成的问卷。

我们将讨论的最后一件事,我想退一步从检测和关注的一些问题我们已经在分类领域。

问题# 1——周期性调查

如果你看这个词的趋势随着时间的推移,你会发现大多数的事件每天不是全新的。很可能一些也许不准确,但类似的事情已经发生在过去,已经修复和调查或关闭。特别是对于分析师团队,经营24/7多个转变。任何一个人真的很难记住所有的历史背景。这导致浪费资源周期性这个同样的事情一遍又一遍。

问题# 2——不同的上下文

解决这一问题的研究。如果人们阅读的各种门票、wiki和调查的笔记本,我们减少很多浪费周期。但这些数据集存在在许多不同的地方,每个都有自己的搜索语法和界面的不合理期望分析师要么读过所有的文档,或者做这些搜索分类工作期间有一次是一个真正的溢价。

问题# 3——寻找模式

因为数据存在于不同的地方,我们不能有效地我的见解。在过去的许多年,我们可以处理多个事件看似无关,但实际上分享一些共同特征,任何人类太模糊。映射工作或事件之间的关系不仅需要亲密熟悉之前发生了什么,而且它们之间的连接很显然有人注意到。

所以我们建立了一个解决这些问题我们称之为医生搜索。首先,我们集中和规范化的事件相关的数据,文本有效载荷的电子邮件,信件,门票,调查,和维基都扔进一个三角洲表。上,我们建立了一个文档推荐机制。有一个地方搜索这些知识在自己的变革。但更重要的是,它为我们提供了通过编程的方法利用我们学过的所有知识在未来更好的通知我们。

“以前发生过这样的冲突吗?“- >自动

所以从分析师的角度来看这是什么样子?我们有代码和所有的投资运行模板笔记本将有效负载和这个词表明潜在的有关文件在一个漂亮的显示HTML表。包括一些非常有用的特性,如判决和分析师评论密码,和一个匹配的术语列表文档和奖相交,可点击链接进入系统,它最初出现在电子邮件通信,这是很整洁的,当你点击链接时,它会打开邮件。应用程序和Mac OS特定线程,您可以做一些进一步阅读。

自动化的建议

所以让我们鸟瞰这是如何工作的。我们会详细的每一个这些步骤在一点。模板的笔记本将标记,从词中提取特定的实体类型的负载。它运行这些实体通过一个浓缩程序确保覆盖每一个可能表示之前寻找事件和所有这些文档。因为我们搜索通过结构化的文本和火花平等和包含操作和很昂贵。我们使用一个更优的并发字符串搜索算法称为汽车Korsak防止性能下降随着项数的增加。根据输入的条件,可能会有大量的深交的文件我们并不真的在乎。所以点击运行通过评分算法来计算他们的相关性,只有最有用的结果会给分析师。

要理解为什么我们需要麻烦与解剖学的标记,让我们看一看一个典型的结构工作。有一组键值对和找到相关文档的目的,并不是所有人都是平等的。有些字符串,比如日期或HTTP方法或港口,会发现成千上万的不同文档和几乎所有的他们并不会彼此相关。在这里也有一些过于选择性的像一个时间戳,只会出现在这个特定的警报和其他地方。但也有令牌的一个子集,描述一个实体的不同方面,和机器,或账户参与观众。这些都是那些有价值的相关性。

实体标记和浓缩

所以我们使用一组正则表达式提取公共实体类型我们关心的。但这是不够的。如果你考虑一个物理机器像某人的MacBook Pro,有许多不同的标识符,可以描述它。它有一个序列号,一些MAC地址,主机名,并有可能随着时间的推移,很多不同的IP地址如果系统使用动态寻址DHCP。一些文件可能包含一个或几个这些但从未他们所有人都在一个地方。所以你要文件指的是同一台机器,但每一个使用不同的属性来描述它们,这使得捆绑在一起很困难。为了解决这个问题,我们已经运行中提取实体通过多个丰富功能,确保我们正在寻找这些标识的超集,你会发现所有的相关文件不管哪块中所包含的信息。

建议的算法

在实体提取和浓缩和搜索文档,结果被送入一个建议的算法,将计算一个术语明智的相关性得分。为每个匹配实体将查看文档的数量出现了多长一段时间及其分布在不同类型的文档。条款要求的平均排名百分比的这些功能,在文件不太常见的一个术语,它的价值将作为它们之间的相关性的指标。包含这个子集的文档有价值的方面会以多少它们包含的顺序呈现,与文件有多个正面进入名单的首位。与此同时,这就是我的所有内容。

看更多的火花+人工智能会话

免费试着砖
«回来
关于Josh Gillner

苹果

Josh Gillner是苹果检测工程团队的一员,负责编写业务逻辑检测和响应在大规模的安全威胁。他在苹果的7年期间,他利用许多技术跟上不断增长的复杂的攻击者,包括最近Apache火花。他大部分时间都埋在数据。