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

本文主要是介绍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 摘要
  • 2 简介
  • 3 相关文献
  • 4 方法概览
    • 4.1 Provenance Graph 构建
    • 4.2 Query Graph 构建
    • 4.3 Graph Alignment
  • 5 算法
    • 5.1 Alignment Metirc
      • 5.1.1 Influence Score(节点之间)
      • 5.1.2 Alignment Score(图之间)
    • 5.2 Best-Effort Similarity Search
      • Step 1 找到所有候选Alignment节点
      • Step 2 选择种子节点
      • Step 3 扩大搜索范围
      • Step 4 Graph Alignment Selection
  • 6 评估
    • 6.1 DARPA TC
    • 6.2 Public Attacks
    • 6.3 Benign Datasets
    • 6.4 效率
  • 7 启发

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

这篇关于PaperNote - Poirot:对比攻击行为与内核审计记录保以进行网络威胁猎杀的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/326671

相关文章

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y