HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows
abstract
1 | In this paper, we present HOLMES, a system that implements a new approach to the detection of Advanced and Persistent Threats (APTs). HOLMES is inspired by several case studies of real-world APTs that highlight some common goals of APT actors. In a nutshell, HOLMES aims to produce a detection signal that indicates the presence of a coordinated set of activities that are part of an APT campaign. One of the main challenges addressed by our approach involves developing a suite of techniques that make the detection signal robust and reliable. At a high-level, the techniques we develop effectively leverage the correlation between suspicious information flows that arise during an attacker campaign. In addition to its detection capability, HOLMES is also able to generate a high-level graph that summarizes the attacker’s actions in real-time. This graph can be used by an analyst for an effective cyber response. An evaluation of our approach against some real-world APTs indicates that HOLMES can detect APT campaigns with high precision and low false alarm rate. The compact high-level graphs produced by HOLMES effectively summarizes an ongoing attack campaign and can assist real-time cyber-response operations. |
abstract中主要说明文章:
HOLMES
目标是在检测到当前活动与 APT 活动的部分攻击一致时触发报警信号。挑战之一是使得报警信号可靠、值得信赖。- 在高层次,
HOLMES
有效地利用了攻击者在活动期间可疑信息流之间的关联。 - 除了检测能力,
HOLMES
还能够生成高层级的实时攻击图。该攻击图可以被分析专家用来参考做出有效的攻击反映。
另外,文章是发表在 2019 IEEE Symposium on Security and Privacy
上 的。
文中使用的案例
方法概览
方法的核心还是即使不同攻击存在不同技术细节,但是在高层次,APT 的战术意图、目的是符合 APT 杀伤链的。APT 杀伤链步骤如上图。
大多数 APT 攻击是包含该攻击链的部分或者全部步骤的,而且这些步骤是因果相关的,这种联系是判断攻击正在进行的重要标志。
对于同一个战术阶段,攻击者使用的具体的技术可能是不同的,例如初始访问可能是鱼叉攻击,也可能是恶意脚本下载等等。尽管具体执行的技术可能不同,在战术层次,他们还是会相互依赖的,例如泄露就需要先进行敏感信息收集。因此技术之间必定存在关联关系或者数据流的联系。
因此研究的主要问题是能够基于 APT 战术和数据流来进行检测。解决这个问题的重要挑战是如何将审计日志和攻击链联系起来。
为实现底层的审计日志到高层的 APT 战术阶段之间的映射,添加了中间层 TTPs & HSG
实现。
要实现该校过有几个技术难点:
- 有效地匹配审计日志中的事件到 TTP,
- 在攻击步骤中检测关联性
- 降低假阳性
系统设计
数据收集和表示
系统接受各种系统产生的审计日志格式,如 Linux 的 auditd、BSD 的 dtrace 和 windows 的 ETW。
将这些数据表示为一张起源图,图中的点包括对象和子对象,对象包括文件、管道和 socket 连接,子对象包括进程。边表示实体之间的依赖关系,使用事件名称作为关系的注释。
需要注意的是,在这张图中实体是存在版本的,比如给一个节点添加父节点改变了该节点的依赖,这就需要创建一个新的版本。版本控制实现了优化,可以在不改变取证分析结果的情况下删除审计日志中的大部分事件。此外,版本控制的图是无环图,这可以简化许多图算法。
另一个点是,这张图是存在内存中的,之前的作者之前工作中,实现了一个将起源图存储在内存中的算法,一个事件存在内存中大概占用 5 字节的空间。这个算法保证了日志获取和图构建的实时性。基于规则的查询分析将会在这张图上进行,查询那些与 TTP 规则符合的行为。
TTP 规则
TTP 规则提供了底层日志事件到高层 APT 步骤之间的对应规则。这将是论文中方法的关键点,为此,使用了三个方法来确保方案的有效性和准确性。
要想将日志数据映射到基于 TTP 的中间层,需要依赖两个技术:
- 以图的形式表示安全事件
- 与 TTP 相关的信息流依赖关系
在这个框架中,作者发现如果使用带前提条件的实体的话,大多数 TTP 可以使用单个事件来建模。具体案例如下图。
通过引入前提条件,也降低了模型的假阳性,提高了模型的准确率。
HSG 构建
如上图,就是对前文中提出案例的 HSG 构建,HSG(High-Level Scenario Graph,高层次场景图)。
该图的构建是基于前提条件的,如果前提条件满足并且 TTP 匹配的话,该 TTP 将会被添加到图中。这大大减少了图中的 TTP 数量,使得在不影响实时性能的条件下可以使用较为复杂的算法。
避免虚假依赖
正常的进程可能会访问被恶意活动影响的日志,在起源图(provenance graph)中会给该正常进程添加指向恶意活动的依赖。这可能会导致依赖爆炸,大量的正常活动被标记为可疑活动,导致最终在 HSG 中显示了大量的正常活动。
对于这个问题,作者使用不同的优先级来标记依赖,具体为强依赖(stronger)和弱依赖(weaker)。如果一个进程为恶意进程的子进程或者被恶意进程直接修改,则为强依赖。强依赖在分系统会被着重分析,而弱依赖则会被弱化。
首先定义了 AC_min(f)
表示攻击者完全控制该数据流需要攻破的父节点数量,并且定义了 path_factor(N1, N2)
,代表攻击者对从 N1 到 N2 数据流的控制程度。在文章第五节中提出了一个计算 path_factor
的有效算法,并且在实验中证明,此处基于强、弱依赖的方法可以有效缓解依赖爆炸的问题。
去噪
一个严重的问题是正常活动可能会匹配 TTP 规则,例如一些长时间活动的程序,浏览器、web 服务器和 SSH等。
结合基于训练数据的降噪规则,提出了两个概念,来解决此问题:
- 正常活动的前提条件匹配
- 正常数据流量
也就是:
-
对于每个进程,我们的系统学习在良性环境中运行系统时频繁触发的先决条件。在运行时,当触发的 TTP 的先决条件与培训期间遇到的先决条件匹配时,我们将忽略匹配。
-
基于良性先决条件的规则会产生误判,例如,即使没有任何攻击 nginx 也会在开始时读取
/etc/passwd
,然而如果将所有对/etc/passwd
访问的 nginx 列入白名单则会出现误判。 -
为了解决此问题,在学习的过程中加入了对数据流的量的学习,例如,nginx 对
etc/passwd
访问时流向 nginx 的数据量等于该文件大小,如果有大量的数据流在访问是从etc/passwd
流向 nginx,则说明出现了攻击。为了学习该特征,作者在良性环境中观察了一段时间的进程-文件对和进程-套接字对。
信号关联和检测
给出一组 HSG,如何高准确率地检测出攻击的组成部分呢?为了解决这个问题,给每一个 HSG 分配了一个严重程度。这个过程通过两个步骤来完成:
-
威胁元组(Threat Tuples)
通过与 HSG 相应的威胁元组来表示攻击者在攻击活动中的进展,对于每个 HSG 威胁元组是一个七元组
S1, s2, s3, s4, s5, s6, s7
,如本文方法概览中的 APT 阶段,每一个s
代表其对应 APT 阶段的严重程度。同一个阶段可能有多个候选者,在这里选择最高严重程度的候选者来表示该阶段,例如本文案例的严重程度为
<M,L,H,H,−,H,M>
。 -
HSG 排名和优先级
为了对 HSG 进行排名,首先把威胁元组转化为数值。通过下图,将严重等级转化为数值。
然后根据威胁元组计算得出一个 HSG 综合得分,此得分的计算基于两个原则:灵活性和定制性;APT 步骤的相关性反映在步骤展开时分数的放大率中。在训练集上进行了一些实验发现,加权乘积的效果最好。
其中,n
代表 APT 阶段,wi, Si
分别代表权值和威胁元组中 APT 阶段的数值, threshold
为检测阙值,当某一阶段无 TTP 发生时,Si
取 1.
实施
起源图构建的流消耗
上图展示了 HOLMES 的架构,为了实现平台的独立性,来自不同系统的审计日志将会首先被转化成一种通用的数据表达格式(Common Data Representation,CDR)。为了能够对该数据进行流处理,审计日志将会被发不到流处理服务器 Kafka
上,实时分析和检测将会在流服务器上进行。
作者采用了之前的工作,SLEUTH 系统进行流消耗的管理、因果跟踪和起源图构建。
策略匹配引擎和 HSG 图的构建
策略引擎使用 TTP 规则作为输入,在起源图上进行匹配操作。下图中是在现在的实现中一些有代表性的 TTP 规则。
匹配策略引擎将会逐条匹配规则库中的每一条规则和他们的先决条件。
此处任务有一个特别具有挑战性的部分,就是检查每一个 TTP 规则有关已经匹配的 TTP 和路径因子的先决条件。先前匹配的 TTP 可能位于图形的较远区域,路径因子值可能必须便利长路径。
注意到在先前的取证工作中,有一个常见的做法是从 TTP 匹配点进行反响跟踪,以达到最初的攻击点。但是在实时检测中,这是一种计算成本很高的方法,因为起源图中可能包含数百万个事件。
为了不适用回溯解决这个问题,采用了增量匹配的方法,存储以前的计算结果,并沿着图形匹配和传播指向这些结果的指针。
当一个特定的 TTP(也可能是在其他的 TTP 规则匹配中作为先决条件出现)匹配时,我们在 HSG 中创建相应的节点和指向该节点的指针。路径因子 path_factor
的计算方法也是类似的,假设匹配的 TTP 表示为 HSG 中的一个节点,为起源图的节点递增计算路径因子值,这些节点依赖于匹配的 TTP 的实体。
这个基于指针的层关联方法有一个可见的瓶颈是随着实践推移,空间开销和复杂度将不断增加。
但是在实验中,作者观察到大量的实体指向同一组 TTP,这种现象实际上是进程书到所有子进程传播的结果。事实上,随着分析的进行,添加新指针的情况很少见。一般来说,关键是要维护一个中间对象,该对象将起源图中的实体映射到 HSG 的 TTP 上。因此,起源图中的每个实体只有一个指向中间映射器的指针,而映射器包含一组指针。
噪声过滤和检测引擎
噪声过滤引擎识别良性的 TTP 匹配,以便将他们从 HSG 中排除。它将在良性环境中学习正常行为作为模型的输入。此模型包含在良性环境中匹配的 TTP 的映射以及这些程序从系统对象读取或写入的字节数的阙值。如果传输的字节总数低于良性阙值,则过滤掉与匹配的 TTP 对应的节点,否则将对应的节点添加到 HSG 中。
最后,检测引擎计算不同 HSG 的加权和,并在该值超过检测阙值时发出警报。