HOLMES: Real-time APT Detection through Correlation of Suspicious Information Flows
S&P-2019
伊利诺伊大学芝加哥分校、密歇根大学迪尔伯恩分校、石溪大学
Milajerdi S M, Gjomemo R, Eshete B, et al. Holmes: real-time apt detection through correlation of suspicious information flows[C]//2019 IEEE Symposium on Security and Privacy (SP). IEEE, 2019: 1137-1152.
目录
- 0. 摘要
- 1. 引言
- 2. 一个实例
- 3. 方法概述
- 4. 系统设计
- A. 数据收集和表示
- B. TTP规范
- C. HSG构造
- D. 伪依赖避免
- E. 减少噪声
- F. 信号关联与检测
0. 摘要
在本文中,我们介绍了 HOLMES,这是一种实现高级和持续性威胁 (APT) 检测新方法的系统。HOLMES 旨在产生一个检测信号,表明存在一组协调的活动,这些活动是 APT 活动的一部分。
- 一套使检测信号稳健可靠的技术
- 有效地利用了攻击者活动期间出现的可疑信息流之间的相关性
- 生成一个高级图表,实时总结攻击者的行为
1. 引言
典型的 APT 攻击包括成功渗透(例如,驱动式下载或鱼叉式网络钓鱼攻击)、侦察、命令和控制 (C&C) 通信(有时使用远程访问木马 (RAT))、特权升级(通过利用漏洞),通过网络横向移动,泄露机密信息等。简而言之,杀伤链为理解和映射 APT 参与者的动机、目标和行动提供了参考。
现有的 IDS/IPS 系统缺乏低级警报的组合能力,不能揭示APT活动的高级场景。
现有的警报关联系统如 Splunk、LogRhythm 和 IBM QRadar等:
- 缺乏对警报和入侵实例之间复杂关系的理解
- 不具备关联长时间发生在不同主机上的攻击步骤所需的精度
问题陈述:
本文基于来自企业的主机日志和 IPS 警报,实时检测正在进行的 APT 活动(包括长时间跨多个主机的许多不同步骤),并向分析师提供攻击场景的高级解释。主要有三个方面:
- 警报生成:从主机的低级事件中搞笑地生成低噪声的警报
- 警报关联:将多个警报组合成一个代表APT活动的信号(signal)
- 高级场景:直观、高层次地总结攻击便于分析师快速掌握攻击信息
方法和贡献:
HOLMES 根据主机审计数据(例如,Linux auditd 或 Windows ETW 数据),生成一个检测信号,该信号描绘了正在进行的 APT 活动的各个阶段。在较高层面上,HOLMES 新颖地使用 APT 杀伤链作为关键参考,解决了 APT 检测的上述三个方面所涉及的技术挑战。
- 首先,HOLMES从日志中生成语义上接近APT步骤(TTPs)的警报,然后映射到杀伤链模型。
- 第二,利用低级实体(进程、文件)之间的信息流作为警报关联的基础,因为APT活动的初始妥协点一般是文件和进程
- 第三,开发了高级场景图(HSG),图的节点代表TTPs,边代表实体之间的信息流。通过祖先覆盖、降噪技术和优先级排名来精简高级场景图和减少误报。
- 最后,HSG 提供了非常紧凑直观的活动摘要。10M的审计日志中得到一个仅有16个节点的HSG
评估:
使用DRAPA-TC作为数据集,对九种真实场景进行评估,实现高精度和召回率。
2. 一个实例
图中的节点表示系统实体,例如进程(表示为矩形)、文件(椭圆形)、网络连接(菱形)、内存对象(五边形)和用户(星形)。边对应于系统调用,并以信息流和/或因果关系的方向为导向。
我们的溯源图已使用参考文献 [23] 中描述的(优化的)节点版本控制技术呈现为无环的。
[23] Md Nahid Hossain, Junao Wang, R. Sekar, and Scott Stoller. Dependence preserving data compaction for scalable forensic analysis. In
USENIX Security Symposium. USENIX Association, 2018.
- 初步妥协:攻击者通过80端口套接字(S1)上载了恶意载荷(playload),利用Nginx使内存区域(M1)变得可执行。接下来,攻击者通过使用反射自加载漏洞获得对 Nginx 进程的控制
- C&C通信:受损的 Nginx 进程与 C&C 服务器建立连接 (S2) 以接收来自攻击者的命令
- 提权。攻击者利用现有漏洞将 Nginx 的权限提升至root(U1)
- 内部发现:攻击者发出 whoami (P5) 和 hostname (P6) 等命令(红队使用这些命令来模拟对机密/专有数据的访问)。攻击者还读取用户名和密码哈希值(F2、F3、F4)并将所有这些信息写入一个临时文件
- 外泄:攻击者将包含收集到的信息的文件传输到他的的机器 (S3)
- 清扫:攻击者删除临时文件 (F5) 以清除所有攻击残余
这个实例揭示了面临的挑战:
- 隐形攻击:攻击者利用内存和合法进程实施攻击,整个活动与系统行为重合且不会留下可见痕迹如文件。
- 大海捞针:检测罕见攻击需要高误报为代价,从大量虚警中过滤出真正的攻击具有挑战性
- 实时检测:几秒钟内
尽管攻击无缝融入良性后台活动,但其有两个明显的攻击表征:
- 攻击步骤与部分APT阶段对应
- 攻击活动通过信息流连接
因此,利用信息流串联步骤,再与APT行为做对比,使得检测这种隐蔽攻击成为可能。
3. 方法概述
我们的方法背后的核心见解是,尽管具体的攻击步骤在不同的 APT 之间可能有很大差异,但高级 APT 行为通常符合杀伤链。大多数 APT 都包含这些步骤的一个子集,且这些步骤存在信息流或因果关系。例如,数据外泄依赖于内部侦察来收集敏感数据。
因此,关键在于检测工作是否可以基于APT最重要的高级行为步骤和步骤间的依赖性。然而这么做的难题在于:低级审计日志和高级杀伤链视图(攻击者意图、目标、能力)之间的语义鸿沟。
弥补语义鸿沟:
构建了一个中间层,如图 3 所示。到该中间层的映射基于 MITRE 的 ATT&CK 框架,该框架描述了近 200 种定义为在公开环境(wild)观察到的战术、技术和程序 (TTP) 的行为模式。每个 TTP 都定义了一种实现特定APT步骤的可能方式。这些较低级别的操作更接近审计日志的抽象级别,因此可以根据溯源图中的节点和边来描述 TTP。
技术挑战:
为了实现上述方法,主要挑战是:低级事件流与TTP的有效匹配、检测攻击步骤之间的相关性、减少误报
- 为了进行高效匹配:溯源图放内存中、编码了实体之间的额信息流依赖关系
- 为了检测步骤间相关性:高级场景图作为中间件
- 为了减少误报:学习可能产生误报的良性模式、为节点和路径分配权重用以对进行HSG排名
4. 系统设计
对操作系统内核、审计系统及其产生的日志的攻击不在我们的威胁模型的范围内。假设系统一开始是良性的,即最初的攻击必须来自企业外部,使用远程网络访问、可移动存储等方式。
A. 数据收集和表示
对于Linux,数据来源是auditd;对于BSD,数据来源是dtrace;对于Windows,数据来源是ETW。这些原始审计数据被收集并处理成与操作系统无关的格式,用作 HOLMES 的输入。
数据表示为溯源图,但是经过版本化处理。如果该边更改了节点的现有依赖项(即祖先节点集),则在添加传入边之前创建节点的新版本。这样可以在不更改分析结果的情况下删除审计日志中的大部分事件,而且,这个版本图是无环的,可以简化很多图算法。
大概是指:如果出现环(即一个进程的子孙反过来影响了自己,那自己既是自己的祖先又是自己的子孙),此时就为这个节点创建一个新的版本,既方便删除子树不影响别的部分,无环又可以简化图搜索。
此外,溯源图存于内存,根据之前的工作进行了优化存储,每个事件仅需要不到五个字节。
B. TTP规范
TTP 规范提供了低级审计事件和高级 APT 步骤之间的映射。依靠两种主要技术将审计日志数据提升到这个中间层:(a) 以溯源图的形式对安全相关事件进行操作系统无关的表示,以及 (b) 在涉及的实体之间使用信息流依赖关联TTP。 使用信息流依赖性对于检测通过使用良性系统进程来实现其目标来隐藏其活动的隐秘 APT 至关重要。
除了指定 TTP 的步骤之外,我们还需要捕获其先决条件(prerequisites)。先决条件采用因果关系和 APT 阶段之间的信息流的形式,不仅有助于减少误报,还有助于理解 TTP 在更大范围的 APT 活动中的作用。
TTP 规则规范的示例如表 4 所示,
- 第一列表示 APT 阶段
- 第二列表示关联的 TTP 名称和 TTP 中涉及的实体
- 第三列指定与 TTP 关联的事件系列
- 第四列中显示了该系列中包含的一些特定事件(不是规则的一部分,只定义一次,在规则中重复使用)
- 第五列表示与每个 TTP 关联的严重性级别,用于警报排名。根据常见攻击枚举分类而得到,支持定制。还支持权重定制机制。
- 最后一列指定了 TTP 规则匹配的先决条件。先决条件可以捕获两个 TTP 中涉及的实体之间的关系,例如进程上的父子关系,或文件之间的信息流。使用先决条件,我们能够修剪许多误报,即类似于 TTP 的良性活动。
先决条件可以指定匹配TTP的参数,例如第一行 U n t r u s t e d R e a d T T P Untrusted Read TTP UntrustedReadTTP 的套接字参数S。先决条件还可以包含先前匹配的 TTP 及其参数的条件。例如, M a k e M e m E x e c ( P , M ) T T P Make Mem Exec(P,M) TTP MakeMemExec(P,M)TTP 的先决条件列包含一个条件 ∃ U n t r u s t e d R e a d ( ? , P ′ ) ∃ Untrusted Read(?, P' ) ∃UntrustedRead(?,P′)。仅当不可信读取 TTP 已与进程 P ′ P' P′ 早先匹配,并且两个 TTP 中涉及的进程的 p a t h _ f a c t o r path\_factor path_factor 小于指定阈值时,才满足此先决条件。
C. HSG构造
图 5 说明了运行示例的 HSG,其中椭圆表示匹配的TTP,椭圆内的是溯源图实体,图的边代表不同TTP之间的先决条件。HSG 的构造主要由先决条件驱动:如果满足所有先决条件,则匹配 TTP 并将其添加到 HSG。这使得HSG总能保持一个较少数量的TTP,进一步使实时进行复杂分析成为可能。
D. 伪依赖避免
伪依赖指的是对攻击者活动的无趣和/或不相关的依赖。例如,在图 2 中,进程 nginx (P2) 写入文件 /usr/log/nginx-error.log,随后 cat 进程读取该文件。然而,即使 cat 和日志文件之间存在依赖关系,但 cat 与攻击无关,而是通过 ssh 独立调用的。更一般地说,考虑与攻击活动带来的进程有关系的良性行为。例如,一个日志轮换系统,它复制一个日志文件,其中包含攻击者进程产生的部分条目。此类进程虽然代表良性后台活动,但会在来源图中被标记为依赖于攻击者的进程。如果不及时删除这些虚假的依赖关系,可能会出现依赖爆炸,从而极大地增加 HSG 的规模。
考虑两个实体和它们之间的路径,在溯源图中指示它们之间的信息。确定此流代表强信息流还是弱信息流等同于确定流中的实体是否共享受损的祖先。如果它们共享受感染的祖先,则它们是攻击者活动的一部分,并且它们之间存在很强的依赖性,必须对其进行优先级排序。否则,我们认为依赖性很弱,并在我们的分析中不再强调它。
为了将这个方法推广到多个进程的情况,我们引入以下信息流路径 f f f 上所有进程的祖先覆盖 A C ( f ) AC(f) AC(f) 的概念:
∀ p ∈ f ∃ a ∈ A C ( f ) a = p or a is an ancestor of p \forall p\in f\exists a\in AC(f)\;a=p\;\text{or }a\text{ is an ancestor of }p ∀p∈f∃a∈AC(f)a=por a is an ancestor of p
A C m i n ( f ) AC_{min}(f) ACmin(f) 表示攻击者完全控制信息流路径 f f f 必须妥协的最少祖先数量。例如,再次考虑从攻击者控制的 nginx 进程到 cat 进程的流程。由于这两个进程没有共同的祖先,它们之间路径的最小祖先覆盖大小等于 2。
定义路径因子 p a t h f a c t o r ( N 1 , N 2 ) path f actor(N1, N2) pathfactor(N1,N2),描述了攻击者对N1到N2流的控制程度,为所以路径的最小祖先覆盖的最小值。
E. 减少噪声
良性事件会与TTP匹配引起噪声,利用两个概念来消除。
良性先决条件:对于每个进程,学习系统在良性环境中运行时频繁触发的先决条件。在运行时,当触发的 TTP 的先决条件与训练期间遇到的先决条件匹配时,忽略该匹配
良性数据流量:为了解决白名单会漏报的问题,同时监控传输的数据量,如果超过阈值,视为攻击行为。
F. 信号关联与检测
定义威胁元组为一个七元组,分别对应七个比价重要的阶段,每个阶段具有不同的TTP选项,每个选项对应不同的严重等级。用HSG去匹配这个七元组,部分阶段可以缺省。
为了对HSG进行排名,首先利用通用漏洞评分系统(CVSS)将元组转换为数值
然后算一个总体评分
∏ i = 1 n ( S i ) w i ≥ τ \displaystyle\prod_{i=1}^n(S_i)^{w_i}\geq\tau i=1∏n(Si)wi≥τ缺省的阶段权重设为1