高级威胁发现(3)SLEUTH: Real-time Attack Scenario Reconstruction from COTS Audit Data

SLEUTH: Real-time Attack Scenario Reconstruction from COTS Audit Data

  • https://blog.csdn.net/Sc0fie1d/article/details/104273798

摘要

本文提出了一种实时重构企业主机上攻击场景的方法和系统。为了满足问题的可伸缩性实时需求,我们开发了一个平台中立的、基于主存的、审计日志数据的依赖图抽象方法。然后,我们提出了高效的、基于标签的攻击检测和重建技术,包括源识别和影响分析。我们还开发了一些方法,通过构建紧凑的攻击步骤的可视化图来揭示攻击的大局。我们的系统参与了由DARPA组织的红色团队评估,并能够成功地检测并重建了红色团队对运行Windows、FreeBSD和Linux的主机的攻击细节

一、说明

我们正在目睹由熟练的对手进行的有针对性的网络攻击(“企业高级和持续威胁(APTs))[1]的迅速升级。通过将社会工程技术(例如,鱼叉式网络钓鱼)与先进的开发技术相结合,这些对手通常会绕过广泛部署的软件保护系统,如ASLR、DEP和沙箱。因此,企业越来越依赖于二线防御,例如,入侵检测系统(IDS)、安全信息和事件管理(SIEM)工具、身份和访问管理工具,以及应用程序防火墙。虽然这些工具通常很有用,但它们通常会生成大量的信息,这使得安全分析师很难区分真正重要的攻击——众所周知的“大海捞针”——从背景噪音。此外,分析人员缺乏“连接这些点”的工具,即,将跨越多个应用程序或主机并在长时间扩展的攻击活动的碎片拼凑起来。相反,需要大量的手工努力和专业知识来整理由多个安全工具发出的众多警报。因此,许多攻击活动被错过了数周甚至数月的[7,40]。

为了有效地控制高级攻击活动,分析人员需要新一代的工具,不仅帮助检测,而且还生成一个总结攻击的因果链的紧凑总结。这样的摘要将使分析人员能够快速确定是否存在重大入侵,了解攻击者最初是如何违反安全规则的,并确定攻击的影响。

将导致攻击的事件的因果链拼接在一起的问题首先在反向跟踪器[25,26]中进行了探索。随后的研究[31,37]提高了由反向跟踪器构建的依赖链的精度。然而,这些工作在一个纯粹的法医环境中运行,因此不处理实时进行分析的挑战。相比之下,本文提出了侦探(SLEUTH),一个系统,该系统可以实时提醒分析师一个正在进行的活动,并在攻击后的几秒钟或几分钟内为他们提供一个紧凑的、直观的活动摘要。这将使在对受害者企业造成巨大损害之前及时作出反应。实时攻击检测和场景重构提出以下几点:

  • 事件存储和分析:我们如何有效地存储来自事件流的数百万条记录,并让算法在几秒钟内筛选这些数据?
  • 确定分析实体的优先级:我们如何帮助被数据量淹没的分析师,优先排序并快速“放大”最有可能的攻击场景?
  • 场景重构:如何从攻击者的入口点开始,简洁地总结攻击场景,识别整个活动对系统的影响?
  • 处理常见的使用场景:如何应对正常的、良性的活动,这可能类似于在攻击期间观察到的常见活动,例如,软件下载?
  • 快速、交互式推理:我们如何为分析人员提供通过数据进行有效推理的能力,比如说,用另一种假设?

下面,我们将简要介绍侦探调查,并总结我们的贡献。侦探假设攻击最初来自企业外部。例如,对手可以通过外部提供的恶意输入劫持web浏览器、插入受感染的u盘或向企业内运行的网络服务器提供零日攻击来启动攻击。我们假设对手在侦探开始监视系统之前并没有在主机上植入持续的恶意软件。我们还假设操作系统内核和审计系统是值得信赖的

1.1方法概述和贡献

图1提供了我们的方法的概述。侦探是操作系统中立的,目前支持微软的Windows、Linux和FreeBSD。来自这些操作系统的审计数据被处理成平台中立的图形表示,其中顶点表示主题(进程)和对象(文件、套接字),边表示审计事件(例如,读、写、执行和连接等操作)。该图可作为攻击检测、因果关系分析和场景重建的基础。

image-20220513135637994
  • 本文的第一个贡献是针对高效事件存储依赖图表示的开发和紧凑的事件存储和分析(第2节)的挑战。主存表示上的图形算法可以比磁盘上的表示快几个数量级,这是实现实时分析能力的一个重要因素。在我们的实验中,我们能够在14秒内处理来自FreeBSD系统的79小时的审计数据,主存使用量为84MB。这种性能表示的分析速率比生成数据的速率快2万倍。

  • 本文的第二个主要贡献是开发了一种基于标签的方法用以识别最有可能参与攻击的主题、对象和事件。标签使我们能够确定分析的优先级和重点,从而解决上面提到的第二个挑战。标签编码对数据(即对象)以及过程(主题)的可信度和敏感性进行评估。此评估是基于来自审计日志的数据来源。从这个意义上说,从审计数据中衍生出的标签类似于粗粒度信息流标签。我们的分析也可以很自然地支持更细粒度的标记,例如,细粒度的污染标记[42,58],如果它们可用的话。在第3节中更详细地描述了标签,以及它们在攻击检测中的应用。

  • 本文的第三个贡献是开发了利用标签进行根源识别和影响分析的新算法(第5节)。从图1中所示的攻击检测组件产生的警报开始。我们的反向分析算法遵循图中的依赖关系来识别攻击的来源。从源代码开始,我们使用前向搜索对对手的行动进行全面的影响分析。我们提出了几个标准,以生成一个紧凑的图。我们还给出了一些转换,进一步简化了这个图,并生成了一个图,以一种简洁和语义上有意义的方式直观地捕获攻击,例如,图中的图。 4.实验表明,我们基于标记的方法是非常有效的:例如,侦探可以分析3850万个事件,并生成一个只有130个事件的攻击场景图,代表事件量减少了5个数量级。

  • 本文的第四个贡献,旨在解决上面提到的最后两个挑战,是一个用于标记初始化和传播的可定制策略框架(第4节)。我们的框架提供了合理的默认值,但是可以覆盖它们以适应特定于操作系统或应用程序的行为。这使我们能够调整检测和分析技术,以避免在良性应用程序表现出类似攻击行为的情况下出现误报。(参见第6.6节了解的尾部。)策略还使分析人员能够测试攻击的“备选假设”,方法是重新对认为为可信或敏感的内容进行分类,并重新运行分析。如果分析人员怀疑某些行为是攻击的结果,他们还可以使用策略捕获这些行为,并重新运行分析以发现其原因和影响。由于我们处理和分析审计数据的速度比它生成的速度快数万倍,因此可以有效地、并行地、实时地测试alternate假设。

本文的最后贡献是一个实验评估(第6节),主要基于由DARPA组织的一个红色团队评估,作为其透明计算项目的一部分。在这项评估中,在Windows、FreeBSD和Linux主机上进行了类似现代apt的攻击活动。在这项评估中,侦探能够:

  • 在几秒钟内处理包含参与期间产生的数千万事件的审计日志;
  • 成功地检测和重建这些攻击的细节,包括它们的入口点、系统中的活动和过滤点;
  • 过滤无关事件,实现数据中非常高的减少率(高达100K次),从而提供这些攻击的清晰语义表示,其中几乎不包含系统中其他活动的噪声;
  • 并实现较低的假阳性和假阴性率。

我们的评估并不是为了表明我们发现了最复杂的对手;相反,我们的观点是,给定几种未知的可能性,我们系统的优先级结果可以实时到位,没有任何人类的帮助。因此,它确实填补了今天存在的一个空白,即法医分析似乎主要是手动启动的。

二、 主内存依赖性图

为了支持快速检测和实时分析,我们将依赖关系存储在图形数据结构中。存储此图的一个可能的选择是图形数据库。然而,诸如Neo4J[4]或Titan[6]等流行数据库的性能[39]在许多图形算法中都是有限的,除非主内存足够大,可以容纳大部分数据。此外,一般图数据库的内存使用太高,适合我们的问题。即使是毒刺[16]和NetworkX[5],两个为主存性能而优化的图形数据库,每个图边[39]分别使用约250字节和3KB。在企业网络上报告的审计事件的数量每天很容易达到数十亿到数百亿亿美元之间,这将需要几tb范围内的主内存。相比之下,我们提出了一个更有效的空间依赖图设计,每条边只使用大约10个字节。在一个实验中,我们能够在329mb的主存中存储38m个事件

Subjects

  • 表示进程;
  • 属性值包括:process id(pid)、命令行、所有者(owner)以及代码和数据的标签

Objects

  • 表示实体,例如文件、pipes、网络连接
  • 属性值包括:名称、类型(文件、pipe、socket等)、所有者和标签

事件:subjects和objects之间或者两个subjects之间带标签的边,用read 、connect、 execveread、connect、execveread、connect、execve来表示。 事件存储在subjects中,从而消除了subject-event的指针、事件标识符(event id)的需求。他们的表示采用可变长编码,在通常情况下可以采用4 bytes,当需要时可以扩展到8、12或者16 bytes。

三、 标签和攻击检测

我们使用标签来描述objects和subjects的可信度和敏感度。对可信度和敏感度的评估基于以下三个因素:

  • 起源(Provenance):依赖图中,subject或object直接祖先的标记
  • 系统先验知识:我们对一些重要应用行为的了解,比如远程接入服务器、软件安装程序和重要的文件(/etc/passwd 和 /dev/audio)
  • 行为:观察subject的行为,并将其与预期行为进行比较

一个默认的策略被用从从input到output传播标签:为output分配input的可信度标签中的最低值,以及机密性标签的最大值(也就是说,入口点的行为是危险的,出口点的行为也被标注为危险;入口点的数据是机密的,出口点的数据也被标注为是机密的)。这是一种保守的策略,该策略可能会导致一些良性事件被错误地识别为恶意事件(over-tainting),但绝不会漏掉攻击。

标签在SLEUTH中扮演了核心角色。它为攻击检测提供了重要的上下文信息,每个事件都在这些标记组成的上下文中进行解释,以确定其导致攻击的可能性。此外,标签对我们的前向和回溯分析的速度也很有用。最后,标签为消除大量与攻击无关的审计数据也起到了关键作用。

3.1 标签设计

如下定义可信度标签(trustworthiness tags,t-tags),可信度依次降低:

  • 良性可信标签(Benign authentic tag):为数据和代码分配该标签,其来源(source)为良性且可靠性可被验证

  • 良性标签(Benign tag):为数据和代码分配该标签,其来源为良性,但是来源可靠性未被充分验证

  • 未知标签(Unknown tag):为数据和代码分配该标签,但是其来源未知

策略(policy)定义了那些来源是良性的,哪些来源验证时充分的;策略的最简单情况是白名单。如果对于某个源,没有策略应用在它上面,那么这个源则被打上未知标签。如下定义机密性标签(confidentiality tags,c-tags),机密性依次降低:

  • Secret:高度敏感的信息,例如登陆凭证、私钥
  • Sensitive:数据的披露可能会对安全产生重大影响,例如,披露了系统中的漏洞,但没有为攻击者提供访问系统的直接途径。
  • Private:资料的披露涉及私隐,但未必构成安全威胁。
  • Public:可以被公开的数据

我们设计的一个重要方面是分离代码和数据的t-tag。具体而言,即一个subject给定两个t-tag,一个表示其代码可信度(code trustworthiness,code t-tag),另一个表示其数据可信度(data trustworthiness,data t-tag)。这样的设计可以削减重建场景的规模,加快取证分析的速度。而机密性标签仅仅与数据相关联。

已经存在的objects和subjects使用标签初始化策略分配初始标签。在系统执行过程中还会产生新的objects和subjects,它们由标签传播策略分配标签。最后,基于行为的检测策略来检测攻击。

3.2 基于标签的攻击检测

检测方法不应该要求知晓特定应用的一些细节,因为这需要有关应用程序的专家知识,而在动态环境中,应用程序可能会频繁更新

我们不把着眼点放在变化的应用行为上,而是着眼于攻击者的高级别目标,比如后门插入和信息窃取。具体而言,我们结合了攻击者的动机和手段的推理,注意到我们提出的标签就是用来捕获攻击者的手段:如果一段数据或代码有未 知 标 签 未知标签未知标签,那么它就是由不受信任的源产生的。

根据攻击者的攻击步骤,我们定义了下面包含攻击者目标和手段的策略(Detection Policy):

  • 不受信任的代码执行:当一个拥有高code t-tag的subject执行或加载拥有低t-tag的object时,便会引发警报

  • 被拥有低code t-tag的subject修改:当拥有低code t-tag的subject修改一个拥有高t-tag的object时,便会引发警报。修改的可能是文件内容或者文件名、文件权限等。

  • 机密文件泄露:当不可信的subjects泄漏敏感数据时,将触发警报。具体地说,也就是具有sensitive c-tag 和 unkonwn code t-tag的subject在网络中执行写操作时会触发警报。

  • 为执行准备不可信的数据:该策略由一个拥有unknown t-tag的subject的操作触发,该操作使一个object可执行。这样的操作会包含chmod和mprotect

一点优势:值得注意的是,攻击者的手段并不会因为数据或代码经过了多个中间媒介之后而被“稀释”。啥意思呢?举个栗子:对于不受信任的代码执行策略来说,如果直接从未知网站加载数据的话,当然会触发警报。但是,当这些数据是被下载、提取、解压缩,甚至有可能是编译之后再加载的,在经过了重重转化之后,只要数据被加载,该策略仍然能够被触发。随后再进行回溯分析,就可以找到漏洞利用的第一步。

(与其它探测器合作的能力)另外,其它检测器的输入可以很容易地被集成到SLEUTH中。比如说,某个外部的检测器将一个subject标为可疑,这个时候再SLEUTH中可以将该subject的code t-tag标为unknown,从而后面的分析都会受益。此外该操作也会保留图节点之间的依赖关系。

被不受信的代码执行所触发的策略,不应该被认为工作在静态环境中(需要动态匹配策略),静态环境意味着不允许新代码产生。实际上,我们期望可以连续地更新和升级,但在企业环境中,我们不希望用户下载未知代码。因此,下面会叙述如何支持标准化的软件更新机制。

四、策略框架

本文开发了一个灵活的策略框架(policy framework),用于标签的分配、传播和攻击检测。我们使用基于规则的记法来描述策略,例如:

exec(s,o):o.ttag<benign→alert("UntrustedExec")

这条规则被触发的条件是:当一个subject s 执行了一个object o(比如文件),而o的t-tag要小于良性。 在该策略框架中,规则通常与事件关联,并且包含objects或subjects的属性的一些条件,这些属性包括:

  • name:使用Perl正则表达式来匹配object namesubject命令行

  • tags: 条件中可以放置objects或subjects的t-tags或者c-tags。对于subjects来说,代码和数据的t-tag可以分别使用

  • 所有权和权限:条件中可以放置objects和subjects的所有权,或者objects和事件权限

不同类型的策略有不同的作用:

  • 检测策略:引发警报
  • 标签初始化和传播策略:修改标签

触发点(trigger points):为了更好地控制不同类型策略的匹配,我们将策略与触发点联系起来。此外,触发点允许有相似目的的不同事件共享策略。

在这里插入图片描述

上图展示了策略框架中定义的触发点,define表示一个新的object,比如一个新网络连接的建立、首次提及一个已经存在的文件、新文件的创建等。 (检测策略匹配过程)当事件出现时,检测策略就会被执行。后面,除非手动配置,否则仅当目标subject或object(某个信息流的终点,Target)发生变化时,检测策略才会被再次执行。

(标签策略)然后,标签策略按照指定的顺序进行尝试,一旦规则匹配,被规则指定的标签将会被分配给目标事件(Target,也就是subject/object)

五、基于标签的双向分析

5.1 回溯分析

回溯分析的目标是识别攻击的入口点,入口点是图中入度为0的节点,并且被标记为untrusted。通常是网络连接,但有时也会是其他形式,比如U盘中的文件。

回溯分析的起点是检测策略产生警报的地方。每个警报都与一个或多个实体相关,这些实体在图中被标记为可疑节点。反向搜索涉及对图的反向遍历,从而识别由可疑节点连接到入口点的路径。我们注意到,在这样的遍历和接下来的讨论中,依赖关系边的方向是相反的。反向搜索带来了几个重大挑战:

  • 性能:依赖图可能包含数亿条边。警报数可以达到数千。在这么大的图上执行反向搜索,会消耗大量的计算资源。

  • 多路径:通常,从可疑节点向后可访问多个入口点。然而,在APT攻击中,通常只有一个真正的入口点。因此,简单的反向搜索可能会导致大量的误报

标签可以用来解决这两个挑战。一方面,标签的计算和传播本来就是一种简洁的路径计算。另一方面,如果节点的标签值是unknown,那么该节点很有可能会构成攻击路径。如果节点A的标签是unknown,这意味着至少存在一条路径,从不受信任的入口点指向节点A,这样节点A就比其他拥有良性标签的邻居节点更有可能是攻击的一部分。使用标签来进行反向搜索,消除许多无关节点,极大地减少了搜索空间。

基于此,我们将反向分析当作最短路径问题的一个实例,标签被用来定义边的代价(cost)。一方面,标签能够“引导”搜索沿着攻击相关的路径,并远离不相关的路径。这使得搜索可以在不必遍历整个图的情况下完成,从而解决了性能方面的挑战。另一方面,最短路径算法通过选择最接近可疑节点的入口点(以路径成本衡量)来解决多个路径的挑战。 计算最短路径使用Dijkstra算法,当入口点被加入到路径中时,算法就停止。

代价函数设计:对于那些表示节点依赖关系的,如果其标签是“未知”,则为其分配较低的开销;其它节点分配较高的开胶,具体地说:

  • 从一个“未知”数据/代码 t-tag 的节点,到一个“良性”代码/数据 t-tag 节点的边,为其分配代价为0
  • 从一个“良性”代码/数据 t-tag 的节点引出的边,为其分配一个较高的代价
  • 从已有“未知” tag 的节点之间引入边,为其分配代价为1

与未知 subject/object 直接相关的良性 subject/object 表示图中恶意和良性部分之间的边界。因此,它们必须包含在搜索中,因此这些边的代价是0。

良性实体之间的信息流动不是攻击的一部分,因此我们将它们的代价设置得非常高,以便将它们排除在搜索之外。

不可信节点之间的信息流可能是攻击的一部分,因此我们将它们的代价设置为一个较低的值。它们将被包括在搜索结果中,除非由较少边组成的可选路径可用。

5.2 向前分析

前向分析的目的是为了评估攻击的影响。通过从一个入口点开始,发现所有依赖于入口点的可能影响。与反向分析类似,主要的挑战是图的大小。一种简单的方法是,标记所有从入口点可到达的 subject/object,这些 subject/object 是通过反向分析得到的。不幸的是,这种方法将导致影响图太大。 在实验中,利用这种方法得到的影响图包含数百万条边,利用我们的简化算法可以降低100到500倍。

一个降低其大小的方法是使用距离阈值dth ,来排除那些距离可疑节点太远的点,分析人员可以调节该阈值。我们使用在回溯分析时使用到的 cost 。

(为什么回溯分析不考虑??)不同于回溯分析的是,我们考虑机密性。特别的,一条边两端的节点,一个由高机密性标签,另外一个具有低代码 integrity(可信度??) 标签(如未知进程)或者低数据 integrity 标签(如未知socket),那么为这条边分配代价为0;而当另一个节点由良性标签时,为其分配较高代价值。