文章可以在这里获取
Abstract
APT攻击越来越成为普遍的威胁,然而,以前的工作表现出几个缺点:
- 需要包含攻击的数据和APT的先验知识
- 无法提取隐藏在来源图中的丰富上下文信息
- 由于其令人望而却步的计算开销和内存消耗而变得不切实际。
本文介绍一种自监督APT检测方法MAGIC,能够在不同级别的监督下进行多粒度检测。利用掩码图表示学习对良性系统实体和行为进行建模,对来源图进行高效的深度特征提取和结构抽象。通过异常值检测方法检测异常系统行为,MAGIC 能够执行系统实体级和批处理日志级 APT 检测。
MAGIC是专门为处理概念漂移而设计的,具有模型适配机制,并成功应用于通用条件和检测场景。我们在三个广泛使用的数据集上评估了MAGIC,包括真实世界和模拟攻击。评估结果表明,MAGIC在所有场景中都取得了令人鼓舞的检测结果,并且在性能开销方面比最先进的APT检测方法具有巨大的优势。
Introduction
高级持续性威胁(APTs)是由熟练的攻击者进行的蓄意和复杂的网络攻击,对企业和机构都构成巨大威胁。大多数 APT 都涉及零日漏洞,并且由于其隐蔽性和多变性而特别难以检测。
最近关于APT检测的工作利用数据来源进行APT检测。数据来源将审计日志转换为来源图,从审计日志中提取丰富的上下文信息,为细粒度的因果关系分析和 APT 检测提供完美的平台。
早期工作基于典型或特定的 APT 模式构建规则,并将审计日志与这些规则进行匹配,以检测潜在的 APT。
最近的一些工作采用统计异常检测方法来检测APT,这些APT侧重于不同的来源图元素,例如系统实体、交互和社区。
最近的研究基于深度学习的方法。他们利用各种深度学习 (DL) 技术对 APT 模式或系统行为进行建模,并以分类或异常检测方式执行 APT 检测。
虽然这些现有方法已经证明了它们能够以合理的准确性检测 APT,但它们遇到了以下挑战的各种组合:
- 监督方法存在缺乏数据 (LOD) 问题,因为它们需要有关 APT 的先验知识(即攻击模式或包含攻击的日志)。此外,当面对他们没有接受过处理培训的新型 APT 时,这些方法特别容易受到攻击。
- 基于统计的方法只需要良性数据即可发挥作用,但无法提取审计日志中埋藏的复杂良性活动的深层语义和相关性,导致误报率高。
- 基于深度学习的方法,特别是基于序列和基于图的方法,以沉重的计算开销为代价,取得了可观的有效性,使其在实际检测场景中不切实际
在本文中,我们通过引入MAGIC来解决上述三个问题,MAGIC是一种新颖的自监督APT检测方法,它利用掩码图表示学习和简单的异常值检测方法从海量审计日志中识别关键攻击系统实体。MAGIC首先通过简单而通用的步骤从审计日志中构建出处图。然后,MAGIC使用图表示模块,该模块通过以自我监督的方式合并图特征和结构信息来获得嵌入。该模型建立在图形掩蔽自编码器[19]之上,在掩蔽特征重建和基于样本的结构重建的共同监督下。采用无监督异常值检测方法对计算出的嵌入进行分析,并得到最终的检测结果。
MAGIC首先通过简单而通用的步骤从审计日志中构建出处图。然后,MAGIC使用图表示模块,该模块通过以自我监督的方式合并图特征和结构信息来获得嵌入。该模型建立在图形掩蔽自编码器之上,在掩蔽特征重建和基于样本的结构重建的共同监督下。采用无监督异常值检测方法对计算出的嵌入进行分析,并得到最终的检测结果。
MAGIC 旨在灵活且可扩展。根据应用程序背景,MAGIC 能够执行多粒度检测,即检测批处理日志中是否存在 APT 或定位实体级对手。虽然 MAGIC 旨在执行 APT 检测而不会受到攻击包含数据,但它非常适合半监督和完全监督的情况。此外,MAGIC还包含一个可选的模型适配机制,为其用户提供反馈渠道。这样的反馈对于MAGIC进一步提高性能、对抗概念漂移和减少误报非常重要。
我们在三个不同的 APT 攻击数据集上评估了MAGIC的性能和开销:DARPA Transparent Computing E3 数据集、StreamSpot 数据集和 Unicorn Wget 数据集。DARPA 数据集包含真实世界的攻击,而 StreamSpot 和 Unicorn Wget 数据集则在受控环境中完全模拟。评估结果表明,MAGIC 能够以 97.26% 的准确率和 99.91% 的召回率执行实体级 APT 检测,并且开销最小,对内存的要求更低,并且比最先进的方法快得多
contribution总结
- 提出了MAGIC,这是一种基于掩码图表示学习和异常值检测方法的通用APT检测方法,能够对海量审计日志进行多粒度检测。
- 通过扩展的图形掩码自动编码器将计算开销降至最低,从而确保 MAGIC 的实用性,即使在狭小的条件下,也能在可接受的时间内完成训练和检测。
- 通过各种努力确保MAGIC的普遍性。我们利用掩码图表示学习和异常值检测方法,使 MAGIC 能够在不同的监管级别、不同的检测粒度和来自不同来源的审计日志下进行精确检测。
- 在三个广泛使用的数据集上评估了 MAGIC,涉及真实世界和模拟的 APT 攻击。评估结果表明,MAGIC检测的APTs具有良好的结果和最小的计算开销。
- 提供 MAGIC 的开源实现,以造福社区未来的研究,并鼓励进一步改进我们的方法。
Background
攻击场景
在这里,我们提供了我们在整篇文章中使用的 APT 场景的详细说明。带有 Drakon Dropper 的 Pine 后门是来自 DARPA Engagement 3 Trace 数据集的 APT 攻击 [20]。在攻击过程中,攻击者构建恶意可执行文件 (/tmp/tcexec) 并通过网络钓鱼电子邮件将其发送到目标主机。然后,用户会无意识地下载并打开电子邮件。电子邮件中包含的可执行文件旨在执行用于内部侦测的端口扫描,并在目标主机和攻击者之间建立静默连接。
图 1 显示了我们的动机示例的出处图。图中的节点表示系统实体,箭头表示实体之间的定向交互。显示的图是通过删除大多数与攻击无关的实体和交互,从完整的来源图中抽象出来的子图。不同的节点形状对应不同类型的实体。被条纹覆盖的实体被视为恶意实体。
Prior Research and their Limitations
- 监督方法:对于早期作品,需要构建特殊的启发式规则来涵盖所有攻击模式。许多基于深度学习的APT检测方法基于良性和攻击性数据构建来源图,并以分类方式检测APT。这些监督方法可以在学习的攻击模式上获得近乎完美的检测结果,但在面临概念漂移或看不见的攻击模式时尤其容易受到攻击。此外,对于基于规则的方法,启发式规则的构建和维护可能非常昂贵和耗时。对于基于深度学习的方法,包含攻击的数据的稀缺性阻碍了这些监督方法的实际部署。针对上述问题,MAGIC 采用完全自监督的异常检测方式,在有效处理不可见攻击模式的同时,允许不存在包含攻击的数据。
- 基于统计的方法:最新的基于统计学的方法通过识别系统实体、交互和社区的稀有性或异常分数来检测APT信号。然而,系统实体的稀有性并不一定表明它们的异常,通过因果分析或标签传播获得的异常评分是来源图上的浅层特征提取。为了说明这一点,在我们的攻击示例中,进程 tcexec 对不同的 IP 地址执行多个端口扫描操作(参见图 1),这可以被视为正常的系统行为。但是,考虑到源自外部网络的进程 tcexec 也会读取敏感的系统信息 (uname) 并与公共 IP 地址 (162.66.239.75) 建立连接,我们可以很容易地将 tcexec 识别为恶意实体。由于无法提取系统实体之间的深层语义和相关性,通常会导致基于统计的方法检测性能低下和误报率高。然而,MAGIC采用图表示模块对来源图进行深度图特征提取,从而产生高质量的嵌入。
- 基于 DL 的方法:最近,基于DL的APT检测方法,无论是有监督还是无监督,都产生了非常有希望的检测结果。然而,在现实中,中型企业每天会产生数百GB的审计日志。因此,基于深度学习的方法,特别是基于序列的和基于图形的方法,由于其计算开销而不可行。例如,ATLAS平均需要 1 小时才能在 676MB 的审计日志上进行训练,而 ShadeWatcher在具有 GPU 的 DARPA E3 Trace 数据集上训练平均需要 1 天。此外,一些基于图自编码器的方法在来源图规模扩大时会遇到爆炸性内存开销问题。MAGIC 通过引入图形掩码自动编码器避免了计算要求高,并在短短几分钟内完成了对 DARPA E3 Trace 数据集的训练。第 6.4 节中详细介绍了 MAGIC 的性能开销。
- 端到端方法:除了上面讨论的三个主要局限性之外,还值得一提的是,最新的APT检测方法是端到端检测器,并且专注于一个特定的检测任务。例如,ATLAS专注于端到端的攻击重建,而 Unicorn则从流日志中生成系统级警报。相反,MAGIC的方法是通用的,可以在各种检测场景下执行多粒度APT检测,也可以应用于从不同来源收集的审计日志。(什么叫通用的?预训练精调?还是知识说能检测多场景多力度就算通用了?)
Threat Model and Definitions
威胁模型:我们假设攻击者来自系统外部,并以系统内的有价值信息为目标。攻击者可能会执行复杂的步骤来实现其目标,但在日志中留下可追踪的证据。系统硬件、操作系统和系统审计软件的组合是我们值得信赖的计算基础。在我们的威胁模型中不考虑毒物攻击和逃避攻击。
出处图:来源图是从原始审计日志中提取的有向循环图。构建来源图是数据来源的常见做法,因为它连接系统实体并呈现它们之间的交互关系。来源图包含代表不同系统实体(例如,进程、文件和套接字)的节点,以及代表系统实体之间交互(例如,执行和连接)的边缘,并标有它们的类型。例如,/tmp/tcexec 是一个 FileObject 系统实体,而 /tmp/tcexec 和 tcexec 之间的边缘是 FileObject 面向 Process 的执行操作(参见图 1)。
多粒度检测:MAGIC 能够执行两个粒度的 APT 检测:批处理日志级别和系统实体级别。MAGIC的多粒度检测能力催生了两阶段检测方法:首先对流式日志进行批量日志级检测,然后对正批次进行系统实体级检测,以识别详细的检测结果。将这种方法应用于实际环境将有效减少工作量、资源消耗和误报,同时产生详细的结果。
- 批处理日志级别检测。在这种粒度的 APT 检测下,主要任务是给定来自一致来源的批量审核日志,如果在一批日志中检测到潜在的 APT,MAGIC 会发出警报。与Unicorn类似,MAGIC无法在这种检测粒度下准确定位恶意系统实体和交互。
- 系统实体级检测。在这种粒度的APT检测下,检测任务是给定来自一致来源的审计日志,MAGIC能够在这些审计日志中准确定位恶意系统实体。在APT期间识别关键系统实体对于后续任务(如攻击调查和攻击故事恢复)至关重要,因为它提供了可解释的检测结果,并减少了对领域专家的需求以及冗余的手动工作。
MAGIC是一种新型的自监督APT检测方法,它利用掩蔽图表示学习和异常值检测方法,能够对海量审计日志进行高效的多粒度检测。MAGIC的流水线由三个主要组件组成:(1)来源图构建,(2)图表示模块和(3)检测模块。它还提供了可选的 (4) 模型适配机制。在训练过程中,MAGIC 用 (1) 转换训练数据,用 (2) 学习图嵌入,用 (3) 记住良性行为。在推理过程中,MAGIC 使用 (1) 转换目标数据,使用训练的 (2) 获得图形嵌入,并通过 (3) 检测异常值。图 2 概述了 MAGIC 架构。
系统审计软件收集的流式审计日志通常以批量方式存储。在来源图构建 (1) 期间,MAGIC 将这些日志转换为静态来源图。系统实体及其之间的交互被提取并分别转换为节点和边。使用几种降低复杂性的技术来删除冗余信息。 然后,将构建的出处图通过图表示模块(2)馈送,以获得输出嵌入(即对象的综合向量表示)。图表示模块基于图屏蔽自动编码器构建,并集成了基于样本的结构重构,将节点和边属性嵌入、传播和聚合到输出嵌入中,这些嵌入包含节点嵌入和系统状态嵌入。图形表示模块仅使用良性审核日志进行训练,以对良性系统行为进行建模。在对可能包含攻击的审计日志执行 APT 检测时,MAGIC 利用基于输出嵌入的异常值检测方法来检测系统行为中的异常值 (3)。根据任务的粒度,使用不同的嵌入来完成 APT 检测。在批处理日志级任务中,反映整个系统一般行为的系统状态嵌入是检测目标。此类嵌入中的异常值意味着其相应的系统状态是看不见的,并且可能是恶意的,这会显示该批次中的 APT 信号。在系统实体级任务中,检测目标是那些节点嵌入,它们表示系统实体的行为。节点嵌入中的异常值表示可疑的系统实体,并以更精细的粒度检测 APT 威胁。
在实际检测设置中,MAGIC 有两个预先设计的应用程序。对于系统审计软件收集的每批日志,可以直接利用MAGIC的实体级检测来准确识别批次中的恶意实体,也可以按照第2.3节的规定进行两阶段检测。在这种情况下,MAGIC 首先扫描批次并查看批次中是否存在恶意信号(批处理日志级别检测)。如果警报为阳性,则 MAGIC 将执行实体级检测,以更精细的粒度识别恶意系统实体。与实体级检测相比,批量日志级别检测的计算要求要低得多。因此,这样的两阶段例程可以帮助MAGIC的用户节省计算资源,避免误报,同时不影响MAGIC的检测细度。但是,如果用户喜欢对所有系统实体进行细粒度检测,则前一个例程仍然是一个可访问的选项。
为了应对概念漂移和看不见的攻击(unseen attack),采用了可选的模型适配机制为其用户提供反馈渠道(4)。由安全分析师检查和确认的检测结果将反馈给 MAGIC,帮助其以半监督的方式适应良性系统行为变化。在这种情况下,MAGIC获得了更有希望的检测结果,这将在第6.3节中讨论。此外,MAGIC 可以很容易地应用于现实世界的在线 APT 检测,这要归功于它能够适应概念漂移和最小的计算开销。
1用的啥?2用的基于图屏蔽自动编码器,3用的啥?KNN? (4)是干啥的?
(4)是靠人工标注进行监督学习的。
unseen attack
“Unseen attack”(不可见攻击)是一种高级持续性威胁(Advanced Persistent Threat,APT)攻击中的一种策略。这种攻击手段的目标是使攻击者的活动对受害者尽可能地不可见,让受害者很难察觉到自己受到了攻击。
这种类型的攻击通常采取了多种隐蔽的方法,旨在规避传统安全监控和检测工具的检测。一些常见的不可见攻击技术包括:
- 无文件攻击(Fileless Attacks):这种攻击方式不会在受害者系统上留下可被传统防病毒软件等检测到的文件。攻击者通过利用系统内置的工具或脚本语言,例如 PowerShell 或 WMI (Windows Management Instrumentation),在内存中执行恶意代码。
- 隐蔽通信:攻击者会使用加密或隐藏的通信渠道,以避免被网络监控和入侵检测系统检测到。这可能包括使用加密协议、隐蔽通信端口或者隐藏在合法网络流量中的恶意数据。
- 低频攻击:攻击者会在较长时间间隔内执行活动,以减少被检测到的风险。这种攻击方式通常不会引起系统管理员的注意,因为攻击活动没有频繁发生。
- 持续访问:攻击者在成功进入受害者网络后,会尽可能长时间地保持对系统的访问,以获取更多的信息和权限。他们可能会隐藏在系统的深层次,并悄悄地窃取数据或监视受害者的活动。
- 动态改变攻击模式:攻击者会不断地改变他们的攻击方式和工具,以规避传统的安全防御措施。这种变化性可以使传统的签名检测和规则检测方法失效。
Design Details
Provenance Graph Construction
MAGIC 首先从原始审计日志中构建出处图,然后再执行图表示和 APT 检测。我们遵循三个步骤来构建一致且优化的来源图,为图表示做好准备。
日志解析:第一步是简单地解析每个日志条目,提取系统实体以及它们之间的系统交互。然后,可以构建一个原型出处图,以系统实体为节点,以交互为边。现在,我们提取有关节点和边的分类信息。对于提供实体和交互标签的简单日志格式,我们直接使用这些标签。对于提供这些实体和交互的复杂属性的某种格式,我们应用多标签哈希(例如,xxhash)将属性转换为标签。在这个阶段,来源图是有向多图。我们设计了一个示例来演示如何处理图 3 中日志解析后的原始来源图。
初始嵌入:在这个阶段,我们将节点和边标签转换为维度 d 的固定大小的特征向量(即初始嵌入),其中 d 是图表示模块的隐藏维度。我们应用了查找嵌入,在节点/边标签和 d 维特征向量之间建立了一对一的映射。如图 3(I 和 II)所示,进程 a 和 b 共享相同的标签,因此它们映射到相同的特征向量,而 a 和 c 嵌入到不同的特征向量中,因为它们具有不同的标签。我们注意到,唯一节点/边缘标签的可能数量由数据源(即审计日志格式)决定。因此,查找嵌入在转导设置下工作,不需要学习看不见的标签的嵌入。
降噪:我们的图表示模块的预期输入出处图将是简单图。因此,我们需要在节点对之间组合多个边。如果一对节点之间存在同一标签的多个边(也共享相同的初始嵌入),我们将删除多余的边,以便只保留其中一条。然后,我们将剩余的边合并为一条最终边。我们注意到,在一对节点之间,可能会保留几个不同标签的边缘。组合后,通过对剩余边的初始嵌入进行平均来获得所得唯一边的初始嵌入。为了说明这一点,我们在图3(II和III)中展示了我们的降噪如何结合多边,以及它如何影响边的初始嵌入。首先,对于每个标签,将 a 和 c 之间的 3 次读取和 2 次写入交互合并为一个。然后我们将它们组合在一起,形成一个边缘 eac,其初始嵌入等于其余边缘的平均初始嵌入(e′ 2 和 e′ 5)。我们在附录E中提供了我们的降噪步骤与以前工作的比较
简单来说就是先对边和节点进行多标签哈希,目的是将多个类别标签映射到设计的那几个标签上(如果是有标签的日志格式则不需要这一步),这样每个边都有标签,标签就是边的含义(read,write等)。然后将节点和标签转为d维的初始嵌入,再将节点对之间嵌入值相同的边合并成一个边。
Graph Representation Module
MAGIC 采用图表示模块从特色出处图(featured provenance graphs)中获取高质量的嵌入。如图 4 所示,图表示模块由三个阶段组成:用于部分隐藏节点特征(即初始嵌入)以进行重建的掩码过程,通过传播和聚合图特征生成节点和系统状态输出嵌入的图编码器,图解码器通过掩码特征重建和基于样本的结构为图表示模块的训练提供监督信号重建。编码器和解码器形成图形掩码自动编码器,在生成快速且节省资源的嵌入方面表现出色。
Feature Masking
在训练我们的图表示模块之前,我们对节点执行掩码,以便在重建这些节点时可以训练图掩码自动编码器。屏蔽节点是随机选择的,覆盖所有节点的一定比例。此类屏蔽节点的初始嵌入将替换为特殊的屏蔽令牌 xmask,以涵盖有关这些节点的任何原始信息。但是,边缘不会被屏蔽,因为这些边缘提供了有关系统实体之间关系的宝贵信息。总之,给定节点初始嵌入 $x_n$,我们按如下方式屏蔽节点:
其中 $\tilde{N}$ 是随机选择的掩码节点,$emb_n$ 是节点 n 的嵌入,准备训练图表示模块。此掩蔽过程仅在训练期间发生。在检测过程中,我们不会屏蔽任何节点。
Graph Encoder
从图构建步骤中获得的初始嵌入仅考虑原始特征。然而,原始特征还远远不足以对系统实体的详细行为进行建模。实体的上下文信息,如其邻域、多跳关系以及与其他系统实体的交互模式,对于获得高质量的实体嵌入起着重要作用。在这里,我们采用并扩展了图形屏蔽自编码器,以自监督的方式生成输出嵌入。图形屏蔽自动编码器由编码器和解码器组成。编码器通过传播和聚合图特征来生成输出嵌入,解码器重建图特征以提供用于训练的监督信号。这种编码器-解码器架构在生成的嵌入中保留了上下文和语义信息,同时通过掩蔽学习显着降低了其计算开销。
我们的图表示模块的编码器包含多个堆叠层的图注意力网络(GAT)。GAT层的功能是根据节点本身及其相邻节点的特征(初始嵌入)生成输出节点嵌入。与普通的GNN不同,GAT引入了一种注意力机制来衡量这些邻居的重要性。【GAT加了attention真的还好算吗?训练代价应该也不小吧】
为了详细解释,GAT 的一层将前几层生成的节点嵌入作为输入,并将嵌入从源节点传播到目标节点,并沿交互传播到消息中。该消息包含有关源节点以及源节点和目标节点之间交互的信息:
并采用注意力机制来计算消息源与其目的地之间的注意力系数:
然后,对于目标节点,GAT 聚合来自传入边缘的消息,以通过计算所有传入消息的加权和来更新其节点嵌入。权重正是注意力系数:
其中 $h^l_n$ 是 GAT 第 l 层节点 n 的隐藏嵌入,$h^{l-1}_n$ 是 l − 1 层的隐藏嵌入,$\mathcal{N}_n$ 是 n 的单跳邻域。第一个 GAT 层的输入是初始节点嵌入。Embe 是初始边缘嵌入,在整个图形表示模块中保持不变。$W_as$,$W_am$,$W_{self}$ ,$W{msg}$ 是可训练的参数。更新的节点嵌入构成了节点单跳交互行为的一般抽象。
将此类 GAT 的多层堆叠以获得最终的节点嵌入 h,该节点嵌入由原始节点嵌入和所有 GAT 层的输出连接起来:
其中 ·||·表示串联操作。GAT堆叠的层数越多,相邻范围就越宽,节点的多跳交互模式能够表示的就越远。因此,图编码器有效地结合了节点初始特征和多跳交互行为,将系统实体行为抽象到节点嵌入中。图编码器还对所有节点嵌入应用平均池化,以生成图本身的全面嵌入,它概括了系统的整体状态:
图编码器生成的节点嵌入和系统状态嵌入被视为图表示模块的输出,用于不同场景下的后续任务。
Graph Decoder
图形编码器不提供支持模型训练的监督信号。在典型的图自编码器中,使用图解码器对节点嵌入进行解码,并通过特征重构和结构重构来监督模型训练。然而,图形屏蔽自编码器放弃了结构重建,以减少计算开销。我们的图解码器是两者的混合体,它集成了掩码特征重建和基于样本的结构重建,以构建优化图表示模块的目标函数。
给定从图编码器获得的节点嵌入 $h_n$,解码器首先重新屏蔽这些屏蔽节点,并将它们转换为屏蔽特征重建的输入:
随后,解码器使用上述类似的GAT层来重建掩码节点的初始嵌入,从而可以计算特征重建损失:
【所以这个掩码节点是拿个seed全局保留的马?】
其中 $L_{fr} $是通过计算掩码节点的初始嵌入和重建嵌入之间的缩放余弦损失获得的掩蔽特征重建损失。这种损失在简单样本和困难样本之间急剧增加,从而有效地加快了学习速度。这种缩放的程度由超参数γ控制。
与此同时,基于样本的结构重建旨在重建图结构(即预测节点之间的边)。与重建整个邻接矩阵不同,后者具有O(N2)的复杂度,基于样本的结构重建在节点对上应用对比采样,并预测这些节点对之间的边概率。仅非掩蔽节点参与结构重建。正样本是由所有非掩蔽节点之间的所有现有边构建的,负样本则是在那些没有现有边的节点对中进行采样构建的。
使用简单的两层 MLP 重建节点对样本之间的边,为每个样本生成一个概率。在这些样本上,重建损失的形式为简单的二元交叉熵损失:
其中 (n, n−) 和 (n, n+) 分别是负样本和正样本,ˆ N =N− e N 是一组非掩码节点。基于样本的结构重建仅对输出嵌入进行监督。我们没有使用点积,而是使用 MLP 来计算边缘概率,因为交互实体的行为不一定相似。此外,我们并没有强迫模型学习预测边缘概率。这种结构重构的功能是最大化抽象节点嵌入中包含的行为信息,以便一个简单的MLP足以将这些信息合并并解释为边缘概率。
最终的目标函数 L = $L_fr$ + $L_sr$ 结合了 $L_fr$ 和 $L_sr$,并为图表示模块提供监督信号,使其能够以自监督的方式学习参数。
Detection Module
基于图表示模块生成的输出嵌入,利用异常值检测方法以无监督方式进行APT检测。如前几节所述,此类嵌入以不同的粒度总结了系统行为。我们的检测模型的目标是识别恶意系统实体或状态,前提是仅对良性系统行为有先验的了解。如果通过图表示学习生成的嵌入在图中具有相似的交互行为,则它们的相应实体往往会形成聚类。因此,系统状态嵌入中的异常值表示不常见和可疑的系统行为。基于这样的洞见,我们开发了一种特殊的异常值检测方法来进行APT检测。
在训练过程中,首先从训练来源图中抽象出良性输出嵌入。在这个阶段,检测模块所做的只是记住这些嵌入,并将它们组织在一个K-D树中[33]。经过训练后,检测模块通过三个步骤揭示异常值:k-最近邻搜索、相似度计算和过滤。给定目标嵌入,检测模块首先通过 K-D 树搜索获得其 k 最近邻。这样的搜索过程只需要 log(N) 时间,其中 N 是记忆训练嵌入的总数。然后,应用相似性准则来评估目标嵌入与其邻居的接近程度并计算异常分数。如果其异常分数高于超参数 θ,则目标嵌入被视为异常值,其相应的系统实体或系统状态为恶意。检测模块的示例工作流程形式化如下,使用欧几里得距离作为相似性准则:
其中 $\overline{dist}$ 是训练嵌入与其 k 最近邻之间的平均距离。在执行批处理日志级别检测时,检测模块会记住反映系统状态的良性系统状态嵌入,并检测新到达的来源图的系统状态嵌入是否为异常值。在执行系统实体级检测时,检测模块会记住指示系统实体行为的良性节点嵌入,并给定一个新到达的来源图,它会检测所有系统实体嵌入中的异常值。
Model Adaption
为了使APT检测器在实际检测场景中有效运行,必须考虑概念漂移。当面对良性但以前未见过的系统行为时,MAGIC 会产生误报检测结果,这可能会误导后续应用程序(例如攻击调查和故事恢复)。最近的工作通过忘记过时的数据[10]或通过模型适应机制[18]将他们的模型拟合到良性系统变化来解决这个问题。MAGIC还集成了模型适应机制,以对抗概念漂移,并从安全分析师识别的误报中学习。与其他仅使用误报来重新训练模型的作品略有不同,MAGIC可以使用所有反馈进行重新训练。如前几节所述,MAGIC 中的图形表示模块以自监督的方式将系统实体编码为嵌入,而无需知道其标签。任何看不见的数据,包括那些true negative,都是图表示模块的宝贵训练数据,以增强其对看不见的系统行为的表示能力。
检测模块只能通过良性反馈进行重新训练,以跟上系统行为的变化。而且随着它记住越来越多的良性反馈,它的检测效率会降低。为了解决这个问题,我们还在检测模块上实现了折扣机制。当记忆嵌入的数量超过一定数量时,随着新到达的嵌入被学习,最早的嵌入被简单地删除。我们提供模型适配机制作为概念漂移和看不见的系统行为的可选解决方案。建议通过将确认的假阳性样本提供给 MAGIC 的模型适应机制来使 MAGIC 适应系统变化。
Implementation
我们在 Python 3.8 中使用了大约 3,500 行代码实现了 MAGIC。我们开发了几个日志解析器来应对不同格式的审计日志,包括 StreamSpot [34]、Camflow [35] 和 CDM [36]。来源图是使用图处理库 Networkx [37] 构建的,并以 JSON 格式存储。图形表示模块是通过 PyTorch [38] 和 DGL [39] 实现的。该检测模块是用Scikit-learn[40]开发的。对于MAGIC的超参数,特征重建损失中的比例因子γ设置为3,相邻变量k设置为10,学习率为0.001,权重衰减因子等于5×10−4。我们在实验中使用了 3 层图形编码器和 0.5 的掩码率。在批处理日志级别检测和实体级检测两种检测方案中,输出嵌入维度 d 是不同的。我们在批处理日志级别检测中使用 d 等于 256,在实体级检测中使用 和 an 等于 64 以减少资源消耗。检测阈值 θ 是通过对每个数据集分别进行的简单线性搜索来选择的。超参数可能有其他选择。我们将在稍后的评估部分演示这些超参数对 MAGIC 的影响。在我们的超参数分析中,d 是从 {16, 32, 64, 128, 256} 中选出的,l 是从 {1, 2, 3, 4} 中选出的,r 是从 {0.3, 0.5, 0.7} 中选出的。对于阈值 θ,在批处理日志级别检测中选择介于 1 和 10 之间。有关实体级检测,请参阅附录 D。
Evaluation
我们使用来自各种系统审计软件的 131GB 审计日志来评估 MAGIC 的有效性和效率。我们首先描述了我们的实验设置(第 6.1 节),然后详细说明了 MAGIC 在不同场景中的有效性(第 6.2 节),进行误报分析并评估模型适应机制的有用性(第 6.3 节),并分析了 MAGIC 的运行时性能开销(第 6.4 节)。MAGIC的不同组件和超参数的影响在第6.5节中进行了分析。此外,附录 C 中还对我们的动机示例进行了详细的案例研究,以说明 MAGIC 的管道如何用于 APT 检测。这些实验在相同的设备设置下进行。
Experimental Settings
我们评估了MAGIC在三个公共数据集上的有效性:StreamSpot数据集[21],Unicorn Wget数据集[22]和DARPA Engagement 3数据集[20]。这些数据集在数量、来源和粒度方面各不相同。我们相信,通过在这些数据集上测试MAGIC的性能,我们能够将MAGIC与尽可能多的最先进的APT检测方法进行比较,并探索MAGIC的普遍性和适用性。我们对这三个数据集的详细说明如下。
StreamSpot 数据集:StreamSpot数据集(见表1)是由StreamSpot[34]使用审计系统SystemTap [41]收集并公开的模拟数据集。StreamSpot 数据集包含 600 批次审计日志,用于监控 6 个独特场景下的系统调用。其中五个方案是模拟的良性用户行为,而攻击方案模拟的是偷渡式下载攻击。该数据集被认为是一个相对较小的数据集,由于没有提供日志条目和系统实体的标签,因此我们对 StreamSpot 数据集执行批量日志级别检测,类似于以前的工作 [10, 15, 17]。
Unicorn Wget 数据集:Unicorn Wget数据集(见表1)包含Unicorn[10]设计的模拟攻击。具体来说,它包含 Camflow [35] 收集的 150 批日志,其中 125 批是良性的,其中 25 批包含供应链攻击。这些攻击被归类为隐形攻击,经过精心设计,其行为类似于良性系统工作流程,预计很难识别。这个数据集被认为是我们实验数据集中最难的,因为它的体积大,日志格式复杂,而且这些攻击的隐蔽性。与最先进的方法相同,我们在此数据集上执行批处理日志级别检测。
DARPA E3 数据集:DARPA Engagement 3 数据集(见表 2)作为 DARPA 透明计算计划的一部分,在对抗性参与期间在企业网络中收集。利用不同漏洞的 APT 攻击 [20] 由红队进行,以泄露敏感信息。蓝队试图通过审核网络主机并对其执行因果关系分析来识别这些攻击。Trace、THEIA 和 CADETS 子数据集包含在我们的评估中。这三个子数据集总共包含 51.69GB 的审计记录,包含多达 6,539,677 个系统实体和 68,127,444 次交互。因此,我们评估了MAGIC的系统实体级检测能力,并解决了这些数据集的开销问题。
对于不同的数据集,我们采用不同的数据集拆分来评估模型,并且我们仅使用良性样本进行训练。对于 StreamSpot 数据集,我们从 500 个良性日志中随机选择 400 个批次进行训练,其余批次进行测试,从而形成一个平衡的测试集。对于 Unicorn Wget 数据集,选择了 100 批良性日志进行训练,其余用于测试。对于 DARPA E3 数据集,我们使用与 ThreaTrace [17] 相同的真值标签,并根据其出现的顺序拆分日志条目。最早的 80% 日志条目用于训练,其余条目保留用于测试。在评估过程中,MAGIC在100个全局随机种子下的平均性能被报告为最终结果,因此实验结果可能包含系统实体/日志批次的分数。
Effectiveness
conclusion
我们推出了 MAGIC,这是一种普遍适用的 APT 检测方法,它以最高的效率运行,开销很小。MAGIC 利用掩码图表示学习从原始审计日志中对良性系统行为进行建模,并通过异常值检测方法执行多粒度 APT 检测。在各种检测场景下对三个广泛使用的数据集进行评估表明,MAGIC以低误报率和最小的计算开销取得了良好的检测结果。
知识补充
多标签哈希
多标签哈希(Multi-Label Hashing)是一种用于解决多标签分类问题的技术。在多标签分类问题中,每个样本可以属于一个或多个类别,而不是单一的类别。
哈希是一种将数据映射到固定长度的二进制编码的方法。多标签哈希技术将这种哈希方法应用于多标签分类问题,将样本的多个标签映射为固定长度的二进制编码,从而方便快速的类别检索和处理。
以下是多标签哈希的一些关键思想和方法:
1. 单一哈希方法
- Bit-Vector Hashing:最简单的多标签哈希方法之一是将每个标签映射为二进制编码的位向量。例如,如果有5个类别,则可以用5位二进制编码来表示每个标签,如
[1, 0, 1, 1, 0]
。
2. 多哈希方法
- Binary Relevance:这种方法将每个标签独立地进行哈希处理。对于每个标签,都使用一个单独的哈希函数,将其映射为固定长度的二进制编码。这种方法简单直观,但可能导致标签之间的相关性被忽略。
- Multiple Hashing:这种方法使用多个哈希函数,将每个标签映射为多个不同的二进制编码。这可以捕捉到标签之间的一些相关性,提高多标签哈希的性能。
3. 哈希函数的选择
- 局部敏感哈希(Locality Sensitive Hashing,LSH):LSH 是一种常用的哈希方法,它能够使相似的样本在哈希空间中映射为相邻的编码。这有助于快速的近似最近邻(ANN)搜索,对于多标签分类中的相似性检索很有用。
- Deep Learning Hashing:使用深度学习模型学习哈希函数也是一种常见的方法。例如,可以使用卷积神经网络(CNN)或循环神经网络(RNN)来学习将标签映射为二进制编码的函数。
4. 检索和评估
- 哈希编码检索:一旦对样本进行了哈希处理,可以使用快速的哈希编码检索技术来查找与查询标签最相似的样本。
- 评估指标:对于多标签哈希,常用的评估指标包括 Hamming Loss、Hamming Distance、Precision、Recall、F1 Score 等,用于衡量模型的分类准确性和性能。
多标签哈希方法可以提高对于多标签数据的处理效率和准确性,尤其在大规模的多标签数据集中具有很好的应用前景。
图形掩蔽自编码器
“Graph Masked Autoencoders” 是一种用于图形数据的自编码器模型,旨在学习图形数据的低维度表示。
这个模型的主要思想是结合了自编码器(Autoencoder)的概念和图形数据的结构。自编码器是一种无监督学习算法,用于学习数据的紧凑表示,并在重建时最大程度地保留原始数据的信息。
“Graph Masked Autoencoders” 在这个基础上加入了一种“掩蔽”机制,用于处理图形数据。这个“掩蔽”机制的目的是在训练过程中限制模型只能看到部分图形数据,从而强制模型学习到更加泛化的图形特征表示。
具体来说,训练过程包含以下步骤:
- 掩蔽图形数据(Masking Graph Data):模型会随机地将一些节点或边从输入图中“掩蔽”(即隐藏),使得模型在训练时只能看到部分图形数据。
- 编码器(Encoder):掩蔽后的图形数据通过编码器部分进行编码,将其映射到一个低维度的特征表示空间。
- 解码器(Decoder):然后,模型尝试从这个低维度表示中重构原始的图形数据。
通过这个过程,模型被迫学习到不同节点和边之间的潜在关系,以及如何在只看到部分数据时对图形数据进行有效的编码和解码。
这种方法的优势在于它能够提高模型对图形数据的泛化能力。因为模型只能看到部分数据,它不会过度依赖于特定的节点或边,从而可以更好地处理未见过的图形数据。
“Graph Masked Autoencoders” 的应用包括图形节点分类、图形重构、图形生成等任务。它是图神经网络(Graph Neural Networks)领域中的一种重要技术,用于学习和处理复杂的图形结构数据。
概念漂移
概念漂移是指机器学习模型在应用于新数据时性能下降的现象。这种现象通常发生在训练模型的数据分布与新数据的分布不同时。具体来说,概念漂移可能会导致模型在新数据上的预测准确性降低。
概念漂移可以分为几种不同类型:
- 特征漂移(Feature Drift):特征漂移是指输入特征的分布在训练数据和测试数据中不同的情况。例如,训练数据中的特征范围可能与测试数据中的范围不同,这会导致模型无法准确地泛化到新数据。
- 标签漂移(Label Drift):标签漂移是指目标变量的分布在训练数据和测试数据中不同的情况。换句话说,模型在训练数据中学到的标签分布可能与实际数据中的标签分布不同,从而影响模型的性能。
- 概念漂移(Concept Drift):概念漂移是指预测变量和目标变量之间的关系在时间或数据分布上发生变化。这种情况下,模型在训练时学到的规律可能在应用到新数据时不再适用。
概念漂移是机器学习应用中一个重要的挑战,因为它可能导致模型的预测性能下降,需要采取一些方法来处理。一些应对概念漂移的方法包括:
- 在线学习(Online Learning):使用新数据不断更新模型,使其能够适应新的数据分布。
- 监督漂移检测(Supervised Drift Detection):监测模型在新数据上的表现,当性能下降时触发模型的重新训练。
- 集成学习(Ensemble Learning):结合多个模型的预测结果,以减少概念漂移对整体性能的影响。
- 领域适应(Domain Adaptation):通过调整模型或数据来使其适应新的数据分布。
处理概念漂移是一个活跃的研究领域,因为许多现实世界的应用场景中数据分布经常发生变化。
K-D tree
K-D 树(K-Dimensional Tree,K-Dimensional Binary Tree)是一种用于高效处理k维空间的数据结构,用于解决近似最近邻搜索(Approximate Nearest Neighbor Search)等问题。它是一种二叉树结构,用于对 k 维数据进行分割和组织,以便快速地搜索最近的邻居。
我的想法
和之前看的ATLAS比较起来,通过mask和减小模型复杂度来实现降低开销,并且没有造成结果的损失。好像就没啥更吊的地方了吧?
加了个监督学习的步骤
嵌入阶段用了mask和图注意力网络的技术手段,能获得质量更高,多跳敏感的嵌入。
通过检测时候通过KD树找到K个临近的embedding,然后通过相似性计算, 设立一个阈值来判断是否具有恶意。再用decoder来还原出embedding所对应的边或者节点