使用机器学习和 Elasticsearch 进行安全分析:深入挖掘
编者按(2021 年 8 月 3 日):这篇文章使用了已弃用的功能。有关当前说明,请参阅使用反向地理编码映射定制区域文档。
前言
我们曾围绕 Elasticsearch 与 ArcSight SIEM 的集成(使用 X-Pack 告警功能检测成功的暴力登录攻击),推出了由多个部分组成的系列文章。在这个系列的 上一篇帖子中,我们曾提到非常期待即将在 X-Pack 中推出机器学习功能。
现在,这一刻已经到来,X-Pack 机器学习功能 就在我们面前。我们希望带领大家,了解如何通过 Elasticsearch 中存在的数据,利用机器学习检测与网络威胁行为相关的异常。
是算法,不是魔法
在开始之前,我们或许应该先为大家补充一些背景知识。网络安全领域常见的一个误区是,以为机器学习是算法魔法盒,只要您释放出数据,这些算法就能开始为您生产宝贵而出色的网络洞察。
相比之下,网络安全领域对于机器学习更加开明的一种理解是,把机器学习看作"算法助手"工具库,能够帮助安全团队发现潜在的不轨异常和模式,实现安全相关日志数据分析的自动化 - 不过是在人类安全专家的指导下。
威胁监控或威胁追踪 - 机器学习的作用
X-Pack 机器学习功能可用于对威胁相关的异常进行互动式调查。Kibana 中的"异常泳道图"可视化通常被作为威胁追踪征程的起点,但是与被检测到的异常相关的详细信息则会一览无余地展示给安全分析师:被检测到的行为"为什么"异常、它有多不正常、它为什么会和尝试检测的基本攻击行为有关联、数据中有哪些实体对攻击行为有影响。
由于 X-Pack 机器学习功能与 Elastic Stack 紧密集成,因此,我们现在可以将《Elasticsearch 与 ArcSight SIEM 的集成》第 2 部分 和 第 4 部分 的帖子中所介绍的告警技术应用到新的洞察来源 - 机器学习结果索引,其索引名规则为 ml-anomalies-*。这样一来,我们就可以将这些算法助手生成的结果用于触发告警,进行持续的威胁监控。
图 1 与 Elastic Stack 相集成的 X-Pack 机器学习功能
用于威胁检测的机器学习"配方"
尽管基于阈值的事件通知很强大(例如,如果一次成功的登录前经历了多次失败的登录尝试,就触发通知),但是现在,我们无需定义具体的数据条件,而是将异常行为的检测自动化,这样可以简化安全分析师的使用体验。
即便如此,正如我们在上面提到的那样,我们所讨论的是算法而不是魔法,因此必须要向机器学习引擎发送执行指令,例如作业配置中的设置。由于引擎能够为任何类型的时间序列数据建模 - 无论是数值模型还是分类模型 - 因此可以配置出无限的机器学习作业类型。尽管这很灵活,但是对于只是想利用机器学习功能发现威胁的安全分析师而言,就显得过于复杂了。
在这里,我们引入了这样的概念,那就是针对不同的安全用例,推出不同的机器学习"配方"。配方会介绍如何配置机器学习作业,这样我们就可以利用自动异常检测,来发现通过其他方式很难检测到的基本攻击行为。基本攻击行为包括 DNS 隧道传输、网络数据渗漏、可疑端点进程执行等活动。
图 2 机器学习安全用例配方表示例
每个配方都以一份简短的文档呈现,其中包括操作原理、说明以及建模和观察结果时所遵循的具体配方步骤等几个部分。配方步骤包括功能选择、建模方法、检测目标、参照集合、预期检测对象的影响因素、分析时间段和结果解读。
随着 V5.4 的发布,我们推出了四个机器学习安全用例示例。现在可在这个 GitHub 资源库获取,每个示例都包含一份安全用例配方表和各种配置、数据、脚本,供您试用。
用于检测 DNS 隧道传输的机器学习配方
接下来,我们通过一个具体的配方示例,看看如何利用机器学习检测 DNS 隧道传输活动。
先简单地介绍一下背景,DNS 隧道传输是指域名服务 (DNS) 互联网协议为了向和/或从组织的网络传输非 DNS 信息而进行的任何活动。应所有联网的 IT 基础设施的要求,DNS 网络流量通常不会被防火墙政策阻止,因此,对于那些想要通过隧道,绕过组织现有安全防御来发送未经授权的通信和/或恶意通信的人而言,这成为了一种很有吸引力的渠道。例如,FrameworkPOS 恶意软件就是利用这种技术,从销售终端的零售点向外渗漏盗取的持卡人数据。
我们接下来要详细介绍的机器学习安全用例,在 Elastic 安全圈被称作 DNS-EAB02。"DNS"是指这个配方要分析的日志类型是"DNS"。"EAB"是指这个配方要检测的是基本攻击行为(Elementary Attack Behavior,简称 EAB)。"02"是这个配方的唯一标识符,用于区分其他 DNS 配方。配方由几个部分组成:
原理:如果 DNS 查询请求的子域字段中存在异常数量的信息熵(称为"信息容量"),则可以把这视为通过 DNS 协议渗漏数据的表现。
请注意,DNS 数据渗漏有很多种检测方法,这项作业只使用其中一种方法,而且实践证明,这种方法在实际的企业环境中是有效的。如果您的安全团队倾向于使用其他方法,或增加额外的方法,您可以直接克隆这项作业,然后根据您的偏好修改并运行!或者同时运行两种方法,进而比较结果,甚至将结果组合起来。
说明: 这个用例配方能够识别接收到包含异常多"信息容量"的 DNS 查询请求的域,以及生成这些异常请求的 IP 地址。
我们可能很难马上看出来,应该将接收到子域字段中包含异常多信息熵的请求的域作为检测对象。但是,如果我们从数据建模的角度来看,我们需要在分析的过程中,识别可能存在异常特性的数据特征。就拿这项分析来说,DNS 查询日志中的域就是我们要为之建模的特征,而我们要关注的特性就是其子域字段中所包含的信息容量。
效果: 我们是以这个用例配方作为基本示例,向大家介绍如何利用自动异常检测来检测 DNS 数据渗漏。其他采用替代方法或更复杂方法的配方,也许会产生更加有效的检测效果。
请记住,这个配方是一个示例。让您团队中的行业专家参与到这一类检测中来,或许能够提升检测效果。
用例类型:基本攻击行为 (EAB) - 此类用例用于检测与基本攻击行为相关的异常。每个被检测到的异常都会被分配一个标准化异常得分,并且会标注对异常产生统计性影响的数据中所包含的其他字段的值。受到相同的统计性影响因素影响的基本攻击行为,它们通常会与相同的攻击进程有关。
这里补充一点背景知识,这个配方并不对危险因素执行元分析,而是利用 X-Pack 告警,检测可能与其他攻击行为相关联的基本攻击行为,从而检测网络攻击进程。
用例数据来源:DNS 查询日志(从客户端到 DNS 服务器)
用于提醒本配方所需的数据类型
用例配方:
检测对象:DNS 查询请求(过滤问题类型:A、AAAA、TXT)
模型:子域字符串中的信息容量
检测:存在异常多的信息容量
参照物:由查询结果中所有的域(记录最高值)构成的总体
分区方式:无
排除:在分析中经常出现的域
持续时间:对 2 周或更长时间内的 DNS 查询运行分析
相关配方:单独运行此 EAB 用例,或者和 DNS-EAB01 DNS DGA 活动一起运行
结果:影响因素所在的主机可能是 DNS 传输活动的来源
在这个部分,我们会通过简明的语言,将配方的相关信息汇总起来。这个部分会明确地说明:我们会从哪些日志消息抽取数据,会为哪些数据特征建模,我们要尝试检测哪种异常行为,以什么为参照进行比较,是否要对分析进行分区,是否要将可能对结果产生支配性影响的高频值排除在外,要想生成可靠的结果需要多少数据,最好与哪些其他作业共同运行,以及最后如何查找和解读分析结果。
其他配置参数:
为了确保机器学习作业能够按照我们的预期运行,这些部分(Elasticsearch 索引样式示例、Elasticsearch 查询示例和机器学习分析/检测器配置)会提供技术配置细节。这些细节与作业配置视图中的设置直接对应。
为机器学习作业配置好此配方并开始运行后,X-Pack 机器学习功能就会开始索引和分析来自客户端工作站的 DNS 请求日志,为各个客户端发送的 DNS 请求设定正常特性基准线,并在这些特性出现异常时进行检测。
正如我们上文提到的一样,检测到的异常会被存储到 Elasticsearch 索引中,默认名称为 ml-anomalies-*。您可以在 Kibana 仪表板中搜索和查看,也可以使用 X-Pack 机器学习插件探究细节,或者使用 X-Pack 告警功能生成告警。
我们准备了几段简短的视频,为您展示 X-Pack 机器学习功能在实际操作中如何运作。不过,这里给出的示例是查看 DNS 隧道运输作业的结果时,V5.4(测试版)中 X-Pack 机器学习功能异常管理器视图的界面。
结论
X-Pack 机器学习功能将机器学习技术引入安全分析师和工程师的工作之中,让他们能够借助这项技术分析 Elasticsearch 中与安全相关的日志数据。X-Pack 机器学习操作的基本要素是异常检测作业。安全分析用例配方介绍了如何通过配置作业来检测攻击行为。您无需任何编程工作,即可操控一众"算法助手",帮助您检测威胁,扩大整体的安全覆盖范围。