PaperNote - Poirot:对比攻击行为与内核审计记录保以进行网络威胁猎杀

原文标题:Poirot: Aligning Attack Behavior with Kernel Audit Records for Cyber Threat Hunting

原文作者:Sadegh M. Milajerdi,Birhanu Eshete,Rigel Gjomemo,V.N. Venkatakrishnan

原文来源:CCS 2019

原文链接:https://arxiv.org/pdf/1910.00056.pdf

1 摘要

网络威胁情报(Cyber Threat Intelligence,CTI)可以用来用来寻找攻击的Indicators

Misuse-based:本文使用kernel audits,将威胁猎杀(Threat Hunting)建模为一个非精确的图模式匹配(Graph Pattern Matching,GPM)问题。基于相似性度量,将由内核审计日志构建的provenance graph和由CTI关联构建的query graph进行比对。

评估实验使用DARPA数据集,结果表明,CTI关联可以用做威胁猎杀,并且具有鲁棒和可靠。

2 简介

威胁猎杀存在以下几个的挑战:

  • 搜索范围巨大
  • 识别具有鲁棒性,并且能关联与攻击相关的实体
  • 高效检测以做出及时响应

为了促进CTI以IOCIndicators of Compromise)形式进行交换,便于将攻击者的TTPs进行特征化描述,一些安全社区采用了OpenIOCSTIXMISP等开放标准.为了提供更好的攻击概述,这些标准通常包含描述性关系,以显示indicators或observables如何相互关联。

本文从CTI报告和IOC描述中,将威胁猎杀问题形式化,开发了POIROT系统。该系统可以得到一个表示攻击成功可能性的分数。简而言之,给定一个用图表示的IOCs及其之间的关系(描述了APT),我们称之为query graph。然后在系统运行中产生的更大的provenance graph中寻找与其匹配的图。

3 相关文献

  • 基于日志的攻击分析

DNS、web代理日志;网络流量;系统审计日志;

  • 探索Provenance Graph
  • 查询处理系统(Query Processing Systems)

现存的方法与POIROT正交,可以作为实现POIROT的基础

  • 行为发掘

本文所使用的是图模式匹配

  • 图模式匹配

GPM可以被定义为一个搜索问题:在一个大图中搜索与某个特定图相匹配的子图,在许多案例中这是一个NPC问题

4 方法概览

4.1 Provenance Graph 构建

Provence Graph特点:labeled、typed、directed

顶点表示实体,边表示信息流和因果关系。

POIROT支持从Windows、Linux、FreeBSD上收集审计日志,并在内存中构建Provenance Graph

4.2 Query Graph 构建

从CTI报告中提取与已知攻击相关的IOC和他们之间的关系。除自然语言之外,攻击还经常用结构化/半结构化的语言进行描述,如OpenIOC、STIX、MISP等。另外,也有工具可以从自然语言中自动提取IOCs,这些工具可以用来进行初始特征提取。

我们从CTI报告中建模的行为也是一个labeled、typed、directed的图,我们称之为query graph。在POIROT中,我们使用nametype(如processes、file、sockets、pipes)来指定query graph和provenance graph之间的映射。

  • Query Graph 构建的一个例子:

下面是恶意软件DeputyDog的分析报告摘要

在这里插入图片描述

从中我们可以看出,描述subject所执行动作的动词,通常可以轻松地映射为从磁盘或网络进行读/写、以及到进程或进程之间的交互(例如,浏览器下载文件、进程产生另一个进程,用户单击鱼叉式钓鱼链接等)。

下图展示了与上述摘要对应的query graph:

在这里插入图片描述

Query Graph是攻击图的一个总结

4.3 Graph Alignment

最终,我们把威胁猎杀建模为:攻击的query graph是否在provenance graph中现身

G q G_q Gq描述了实体之间的高级别关系,而 G p G_p Gp描述了完整系统活动的低级别信息。这样就会出现, G q G_q Gq中的一条边对应 G p G_p Gp中的许多条边的情况, G p G_p Gp中多出来的那些边很有可能是攻击者为了绕过检测而添加的噪声活动。因此,如何实现 G q G_q Gq G p G_p Gp之间的一一映射是至关重要的。

在精确匹配中,要求 G q G_q Gq G p G_p Gp中的子图必须是重构的;但是在GPM中,放松了精确匹配的一些限制,以提取更多有用的子图;然而,两者都属于NPC问题。

现存的解决GPM的方法存在以下不足:

  • 并不是为labeled、typed图设计的
  • 处理大规模图的能力不够
  • 在比对过程中对所有节点进行比对
  • 其目的不在于threat hunting

首先,POIROT找到所有的候选比对集合i:j,其中i和j分别表示 V ( G q ) V(G_q) V(Gq) V ( G p ) V(G_p) V(Gp)中的节点。然后,从匹配可能性最高的比对(称为种子节点seed node)开始,扩大搜索范围以寻找其他节点比对。

采用影响分数(influence score)来评估这种可能性。根据攻击者产生流量所需的工作量来对flow进行优先级排序

当找到比对 G q G_q Gq:: G p G_p Gp时,一个表述二者之间相似度的分数会被计算,如果分数超过阈值,就会引发警报,并且向分析人员报告比对节点和边以及时间戳;否则,POIROT从下一个候选种子节点继续比对。

5 算法

5.1 Alignment Metirc

下表介绍了一些概念,其中定义了两种类型的比对,即node alignment$和graph alignment

在这里插入图片描述

基于这些定义,那么当前的问题是要在众多的候选比对图中,找出最有可能的比对图。为了解决这个问题,考虑query和provenance graph G q G_q Gq G p G_p Gp,以及下图中两个可能的对比图:

在这里插入图片描述

虚线表示 G p G_p Gp中与 G q G_q Gq对应的子图,相同的标号表示与 G q G_q Gq中的同一条边相对应。现在的问题就是,决定哪个比对图是最佳候选者。从图中可以直觉地看出, ( G q : : G p ) 2 (G_q::G_p)_2 (Gq::Gp)2 ( G q : : G p ) 1 (G_q::G_p)_1 (Gq::Gp)1 G q G_q Gq更加接近,因为其aligned nodes更多,而且其边也与 G q G_q Gq更加一致。

5.1.1 Influence Score(节点之间)

  • 假设攻击者偏好简单的路径进行攻击(被攻击进程享有较少的祖先进程)
  • 仅加载在一个进程中的攻击没有,在图中不会产生记录,因此难以检测。POIROT用来解决这个问题
  • 攻击者可能用来增加噪音并逃避检测,但是其每项活动都可能具有相同的共同祖先,即攻击的初始危害点。因此,除非攻击者为执行更独特的危害付出了更高的成本,否则这种把戏无法改变Influence Score

基于此,我们将节点 i i i j j j之间( G p G_p Gp中)的influence score定义为 Γ i , j \Gamma_{i, j} Γi,j

在这里插入图片描述

其中, C min ⁡ ( i − → j ) C_{\min }(i-\rightarrow j) Cmin(ij)表示攻击者想要生成flow i − → j i-\rightarrow j ij所需要的最少攻击数目,这些攻击步骤互不相同且独立。这个值捕获了攻击者控制整个flow的程度,并且根据出现在flow中进程的共同祖先的最小值来计算。举个例子,如果一个flow中的所有进程都来自同一祖先,那么 C min ⁡ ( i − → j ) = 1 C_{\min }(i-\rightarrow j)=1 Cmin(ij)=1.

C t h r C_{thr} Cthr表示 C min ⁡ ( i − → j ) C_{\min }(i-\rightarrow j) Cmin(ij)的最大值,因为在实际的APT活动中,攻击入口点一般只有一个或者少数几个。

C min ⁡ ( i − → j ) C_{\min }(i-\rightarrow j) Cmin(ij)描述了攻击者要控制特定路径的困难程度;influence score描述了攻击者想要控制特定路径的容易程度。且当 i − → j i-\rightarrow j ij没有flow时,influence score为0。

5.1.2 Alignment Score(图之间)

该分数基于influence score的概念,为graph alignment G q : : G p G_q::Gp Gq::Gp设计:

在这里插入图片描述

其中,节点 i 、 j i、j ij属于 V ( G q ) V(G_q) V(Gq),节点 k 、 l k、l kl属于 V ( G p ) V(G_p) V(Gp),flow i − → j i-\rightarrow j ij G q G_q Gq上定义。

首先,对于 G p G_p Gp中那些 k k k i i i 相似、 l l l j j j 相似的节点对 ( k , l ) (k,l) (k,l),对其influence score进行求和;然后进行归一化, ∣ F ( G q ) ∣ |F(G_{q})| F(Gq)表示 G q G_q Gq中的flow数量,即influence score之和的最大值。

可以看出, S ( G q : : G p ) S(G_q::G_p) S(Gq::Gp)越大,node alignments的值越大, G q G_q Gq G p G_p Gp之间的flow的相似度越大,遭受攻击的可能性也越大。其中, S ( G q : : G p ) S(G_q::G_p) S(Gq::Gp)的值在0到1之间。

最后,当 S ( G q : : G p ) S(G_q::G_p) S(Gq::Gp)超过阈值之后,就引起报警。那么如何确定最合适的阈值呢?回想之前我们定义的 C t h r C_{thr} Cthr表示我们假设的攻击者想要exploit的入口点进程数的最大值,因此influence score的值为 1 C t h r \frac{1}{C_{t h r}} Cthr1或者更大;另一方面, S ( G q : : G p ) S(G_q::G_p) S(Gq::Gp)表示influence score的平均值。因此,我们如下定义阈值 T \mathcal{T} T

在这里插入图片描述

如果 S ( G q : : G p ) S(G_q::G_p) S(Gq::Gp)超过阈值 T \mathcal{T} T,就会产生报警。

5.2 Best-Effort Similarity Search

在定义完alignment score之后,我们来描述如何搜索alignment使得alignment score最大化。

第一个面临的挑战的 G p G_p Gp的规模会很大,因此,存储 G p G_p Gp中每一对节点的influence score是不实际的,我们对图执行按需便利;此外,我们假设所有的分析是在 G p G_p Gp固定快照上进行的,即从开始搜索到终止,其节点或边不会发生任何变化。

搜索算法包含以下四步,其中步骤2-4会重复执行,直到找到alignment score超过阈值时停止:

Step 1 找到所有候选Alignment节点

G p G_p Gp中找到所有 G q G_q Gq的候选节点,其依据是 G q G_q Gq中节点的name、type、annotations等。比如在 G p G_p Gp中出现的与 G q G_q Gq具有相似type(如process)和label(FireFox)的节点等;与 G q G_q Gq中的正则表达式描述的节点相对应的节点;以及用户手动配置的alignment节点。

注意到在这一步我们没有关于路劲和flow的充分信息,而只是孤立的看待每个节点。在Fig.3中,候选节点alignments用相同的颜色来标识。

Step 2 选择种子节点

为了找到足够好的 G q : : G p G_q::G_p Gq::Gpalignment,我们需要通过在 G p G_p Gp中遍历,来探索上一步得到的候选节点之间的连接关系。

由于 G p G_p Gp的规模问题,需要选择一个好的开始点进行遍历。我们观察到,恶意活动占据了 G p G_p Gp的一小部分,而良性活动一般会重复多次。基于此,我们依据 G q G_q Gq中每个节点在 G p G_p Gp中对应的候选alignmen的个数,对 G q G_q Gq中的节点进行排序,然后优先选择具有最少alignment的 G q G_q Gq中的节点(最有可能是攻击行为)作为种子节点。

在Fig.3中,%browser%为种子节点

Step 3 扩大搜索范围

从种子节点开始进行前向/反向分析,看看是否能到达Step1所找到的候选节点。为了高效地进行搜索,我们在搜索过程中,一旦种子节点到搜索到的当前节点之间的influence score为0时,就停止搜索。(文中有举例)

还有一个问题,即从种子节点开始前向/后向分析,可能会有一些节点遍历不到;因此我们对于遍历不到的节点,从未遍历到节点的相邻节点(以被遍历到)开始,进行重复的前向/后向分析。直到 G q G_q Gq中所有的节点的alignment都被覆盖。

Step 4 Graph Alignment Selection

这一步骤用于生成最终的结果,或者开始另一轮Step 2的迭代。

可能的候选graph alignment数量可能会很大,如果 G q G_q Gq中的每个节点 i i i对应 n i n_i ni个候选graph alignment,那么可能的总数为 ∏ i n i \prod_{i} n_{i} ini个,在Fig.3的例子中,共有216(2x3x3x3x4)种可能。在这一步,我们根据等式2,寻找可以使得alignment score最大的graph alignment。

本文的方法是:从 G q G_q Gq种的种子节点开始,选择 G p G_p Gp中使得alignment score最大的节点,并将其固定;然后继续固定与种子节点相连的其它节点的alignment。

  • Selection Function

该函数的作用是选择、固定node alignment;通过估计每个node alignment会对最终的alignment score产生多大的贡献,来选择产生最大贡献的节点。

对于一个给定的 G p G_p Gp中的aligned node k k k,计算该节点到其它 G p G_p Gp中的候选节点 l l l的最大influence score之和,其中候选节点 l l l满足:1)从k可达或者可以到达k;2)在 G q G_q Gq中与 k k k l l l相对应的aligned node i i i j j j,同样有路径可以连通。

如在Fig.3中,我们分别对 f i r e f o x 1 firefox_1 firefox1 f i r e f o x 2 firefox_2 firefox2进行上述过程,然后选出具有最大贡献值的alignment。贡献如下计算:

在这里插入图片描述

其中 1 j : l 1_{j:l} 1j:l是指示函数,当 j : l j:l j:l已经被固定时,其值为1,反之为0。注意 1 j : l 1_{j:l} 1j:l ( 1 − 1 j : l ) (1-1_{j:l}) (11j:l)是互斥的。

经过了Step 3的处理之后,每个节点 i 都有K个候选alignment,而selection function固定了 i 的alignment node:

在这里插入图片描述

最终,在固定了所有的alignment node之后,采用等式(2)计算alignment score,如果低于阈值,那么重复执行Step2-4.

6 评估

用三个实验进行评估:

  • DARPA Transparent Computing
  • real-world incidents
  • attack-free dataset

所有实验中的 C t h r C_{thr} Cthr定义为3,因此阈值为 1 3 \frac{1}{3} 31,

6.1 DARPA TC

红队依靠威胁描述来展开攻击。本文获取到这些威胁描述,并使用他们来提取query graph。(实际场景下能获取到威胁描述?? )

在这里插入图片描述

下图展示了 G q G_q Gq中每个节点对应的候选节点数量的分布情况:

在这里插入图片描述

下图展示了每个场景的Graph Alignment Scores:

在这里插入图片描述

6.2 Public Attacks

采用了如下公开的恶意样本,并对比了三种不同的检测工具。

在这里插入图片描述

其他方法是基于基于哈希签名检测。但当攻击者独立使用一些强大的IOC,弱化事件之间的关联性时,POIROT的效果就没有那么好。

6.3 Benign Datasets

为了测试POIROT产生误报的情况,我们使用DARPA TC中生成的良性数据集,以及我们监测了一个月的四台机器(客户端,SSH服务器,邮件服务器和Web服务器)。

通过衡量F-score确定阈值。

6.4 效率

使用Apache benchmark、JetStream、HDTune来衡量

在这里插入图片描述

7 启发

  • 如何将DARPA TC数据分为benign和attack

  • 构建Query Graph所需要的先验知识较多。在实际场景下,很难获取与正在进行的APT恰好对应的IOC

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值