原文标题: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):目前,信息安全业界普遍认同的一个理念是,仅仅防御是不够的,更加需要持续地检测与响应。而要做到更有效的检测与更快速的响应,安全情报必不可少。从防御者的角度来看,获取漏洞情报是为了知己,而获取威胁情报是为了知彼。
Gartner 对威胁情报 (TI) 的定义是:威胁情报产品和服务提供关于信息安全威胁和其他安全相关问题的知识。威胁情报可提供的信息包括攻击者的身份、动机、特征以及方法。这些信息来自技术工具(例如流量分析)和人员行动,例如对黑客和诈骗团伙的调查,以及与司法部门和行业组织的信息分享和协作。
与基于漏洞的防御思路不同,威胁情报面向新的威胁形式,它和大数据安全分析、基于攻击链的纵深防御等思想正在形成新一代的防御体系的基石。
网络威胁情报可以用来用来寻找攻击的Indicators。
Misuse-based:本文使用kernel audits,将威胁猎杀(Threat Hunting)建模为一个非精确的图模式匹配(Graph Pattern Matching,GPM)问题。基于相似性度量,将由内核审计日志构建的provenance graph和由CTI关联构建的query graph进行比对。
评估实验使用DARPA数据集,结果表明,CTI关联可以用做威胁猎杀,并且具有鲁棒和可靠。
2 简介
威胁猎杀存在以下几个的挑战:
- 搜索范围巨大
- 识别具有鲁棒性,并且能关联与攻击相关的实体
- 高效检测以做出及时响应
为了促进CTI以IOC(Indicators of Compromise)形式进行交换,便于将攻击者的TTPs进行特征化描述,一些安全社区采用了OpenIOC、STIX、MISP等开放标准.为了提供更好的攻击概述,这些标准通常包含描述性关系,以显示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中,我们使用name和type(如processes、file、sockets、pipes)来指定query graph和provenance graph之间的映射。
- Query Graph 构建的一个例子:
下面是恶意软件DeputyDog的分析报告摘要
从中我们可以看出,描述subject所执行动作的动词,通常可以轻松地映射为从磁盘或网络进行读/写、以及到进程或进程之间的交互(例如,浏览器下载文件、进程产生另一个进程,用户单击鱼叉式钓鱼链接等)。
下图展示了与上述摘要对应的query graph:
Query Graph是攻击图的一个总结。
4.3 Graph Alignment
最终,我们把威胁猎杀建模为:攻击的query graph是否在provenance graph中现身。
描述了实体之间的高级别关系,而描述了完整系统活动的低级别信息。这样就会出现,中的一条边对应中的许多条边的情况,中多出来的那些边很有可能是攻击者为了绕过检测而添加的噪声活动。因此,如何实现和之间的一一映射是至关重要的。
在精确匹配中,要求和中的子图必须是重构的;但是在GPM中,放松了精确匹配的一些限制,以提取更多有用的子图;然而,两者都属于NPC问题。
现存的解决GPM的方法存在以下不足:
- 并不是为labeled、typed图设计的
- 处理大规模图的能力不够
- 在比对过程中对所有节点进行比对
- 其目的不在于threat hunting
首先,POIROT找到所有的候选比对集合i:j,其中i和j分别表示和中的节点。然后,从匹配可能性最高的比对(称为种子节点seed node)开始,扩大搜索范围以寻找其他节点比对。
采用影响分数(influence score)来评估这种可能性。根据攻击者产生流量所需的工作量来对flow进行优先级排序
当找到比对::时,一个表述二者之间相似度的分数会被计算,如果分数超过阈值,就会引发警报,并且向分析人员报告比对节点和边以及时间戳;否则,POIROT从下一个候选种子节点继续比对。
5 算法
5.1 Alignment Metirc
下表介绍了一些概念,其中定义了两种类型的比对,即node alignment$和graph alignment。
基于这些定义,那么当前的问题是要在众多的候选比对图中,找出最有可能的比对图。为了解决这个问题,考虑query和provenance graph和,以及下图中两个可能的对比图:
虚线表示中与对应的子图,相同的标号表示与中的同一条边相对应。现在的问题就是,决定哪个比对图是最佳候选者。从图中可以直觉地看出,比与更加接近,因为其aligned nodes更多,而且其边也与更加一致。
5.1.1 Influence Score(节点之间)
- 假设攻击者偏好简单的路径进行攻击(被攻击进程享有较少的祖先进程)
- 仅加载在一个进程中的攻击没有,在图中不会产生记录,因此难以检测。POIROT用来解决这个问题
- 攻击者可能用来增加噪音并逃避检测,但是其每项活动都可能具有相同的共同祖先,即攻击的初始危害点。因此,除非攻击者为执行更独特的危害付出了更高的成本,否则这种把戏无法改变Influence Score
基于此,我们将节点和之间(中)的influence score定义为:
其中,表示攻击者想要生成flow所需要的最少攻击数目,这些攻击步骤互不相同且独立。这个值捕获了攻击者控制整个flow的程度,并且根据出现在flow中进程的共同祖先的最小值来计算。举个例子,如果一个flow中的所有进程都来自同一祖先,那么.
表示的最大值,因为在实际的APT活动中,攻击入口点一般只有一个或者少数几个。
描述了攻击者要控制特定路径的困难程度;influence score描述了攻击者想要控制特定路径的容易程度。且当没有flow时,influence score为0。
5.1.2 Alignment Score(图之间)
该分数基于influence score的概念,为graph alignment 设计:
其中,节点属于,节点属于,flow 在上定义。
首先,对于中那些 和 相似、 和 相似的节点对,对其influence score进行求和;然后进行归一化,表示中的flow数量,即influence score之和的最大值。
可以看出,越大,node alignments的值越大,和之间的flow的相似度越大,遭受攻击的可能性也越大。其中,的值在0到1之间。
最后,当超过阈值之后,就引起报警。那么如何确定最合适的阈值呢?回想之前我们定义的表示我们假设的攻击者想要exploit的入口点进程数的最大值,因此influence score的值为或者更大;另一方面,表示influence score的平均值。因此,我们如下定义阈值:
如果超过阈值,就会产生报警。
5.2 Best-Effort Similarity Search
在定义完alignment score之后,我们来描述如何搜索alignment使得alignment score最大化。
第一个面临的挑战的的规模会很大,因此,存储中每一对节点的influence score是不实际的,我们对图执行按需便利;此外,我们假设所有的分析是在固定快照上进行的,即从开始搜索到终止,其节点或边不会发生任何变化。
搜索算法包含以下四步,其中步骤2-4会重复执行,直到找到alignment score超过阈值时停止:
Step 1 找到所有候选Alignment节点
在中找到所有的候选节点,其依据是中节点的name、type、annotations等。比如在中出现的与具有相似type(如process)和label(FireFox)的节点等;与中的正则表达式描述的节点相对应的节点;以及用户手动配置的alignment节点。
注意到在这一步我们没有关于路劲和flow的充分信息,而只是孤立的看待每个节点。在Fig.3中,候选节点alignments用相同的颜色来标识。
Step 2 选择种子节点
为了找到足够好的alignment,我们需要通过在中遍历,来探索上一步得到的候选节点之间的连接关系。
由于的规模问题,需要选择一个好的开始点进行遍历。我们观察到,恶意活动占据了的一小部分,而良性活动一般会重复多次。基于此,我们依据中每个节点在中对应的候选alignmen的个数,对中的节点进行排序,然后优先选择具有最少alignment的中的节点(最有可能是攻击行为)作为种子节点。
在Fig.3中,%browser%为种子节点
Step 3 扩大搜索范围
从种子节点开始进行前向/反向分析,看看是否能到达Step1所找到的候选节点。为了高效地进行搜索,我们在搜索过程中,一旦种子节点到搜索到的当前节点之间的influence score为0时,就停止搜索。(文中有举例)
还有一个问题,即从种子节点开始前向/后向分析,可能会有一些节点遍历不到;因此我们对于遍历不到的节点,从未遍历到节点的相邻节点(以被遍历到)开始,进行重复的前向/后向分析。直到中所有的节点的alignment都被覆盖。
Step 4 Graph Alignment Selection
这一步骤用于生成最终的结果,或者开始另一轮Step 2的迭代。
可能的候选graph alignment数量可能会很大,如果中的每个节点对应个候选graph alignment,那么可能的总数为个,在Fig.3的例子中,共有216(2x3x3x3x4)种可能。在这一步,我们根据等式2,寻找可以使得alignment score最大的graph alignment。
本文的方法是:从种的种子节点开始,选择中使得alignment score最大的节点,并将其固定;然后继续固定与种子节点相连的其它节点的alignment。
- Selection Function
该函数的作用是选择、固定node alignment;通过估计每个node alignment会对最终的alignment score产生多大的贡献,来选择产生最大贡献的节点。
对于一个给定的中的aligned node ,计算该节点到其它中的候选节点的最大influence score之和,其中候选节点满足:1)从k可达或者可以到达k;2)在中与和相对应的aligned node 和,同样有路径可以连通。
如在Fig.3中,我们分别对和进行上述过程,然后选出具有最大贡献值的alignment。贡献如下计算:
其中是指示函数,当已经被固定时,其值为1,反之为0。注意和是互斥的。
经过了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
所有实验中的定义为3,因此阈值为,
6.1 DARPA TC
红队依靠威胁描述来展开攻击。本文获取到这些威胁描述,并使用他们来提取query graph。(实际场景下能获取到威胁描述?? )
下图展示了中每个节点对应的候选节点数量的分布情况:
下图展示了每个场景的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