跳转至

A systematic survey on multi step attack detection

A systematic survey on multi-step attack detection

PDF: A systematic survey on multi-step attack detection.pdf

1 - Introduction

高级攻击者往往会采用多步的攻击方式。至少是因为以下两个原因:

  1. 被攻击方是很大的组织,网络拓扑复杂,有些业务不对外网开放
  2. 多步攻击更难检测,很多攻击步骤本身对系统并无威胁

这样的攻击方式称为 multi-step attacks。它比常规的攻击方式更加复杂和隐蔽。

为了检测多步攻击,我们需要从整体的角度来看待一场攻击,并注意到从网络的各个角落收集到的大量痕迹之间的因果关系。攻击者留下的踪迹一般符合逻辑顺序,执行各个 step 之后,攻击者能获取关于靶标的更多的知识,来更好地安排后续的攻击步骤。

论文作者分析了 181 篇文章,119 种检测多步攻击的方法。在本文中只关注那些检测真实攻击痕迹的方法,而不关心描述网络中可能的攻击路径的方法。

2 - 术语定义

事件(Event)。一个事件是在一个设备上发生的一个可识别的动作。事件常常用文本来表示,称为日志

包(Packet)。这是网络通讯中最小的数据交换单元。

警报(Alert,aka. alarm)。这是安全系统产生的 event,于检测到可疑行为或检测到错误时产生。

痕迹(Trace)。它包含了 "all the indications of the execution of an action in a network",例如事件和网络包。

入侵检测系统(IDS)。指的是自动检测可疑行为的系统。IDS 可能是基于网络的,也可能是基于主机的。基于网络的 IDS 会检测网络流量,基于主机的 IDS 检测应用程序和操作系统的行为,部署在终端机器上。本文中,IDS 是观测者和报告者,产生 alert。

image-20210913125914270

我们把攻击者为了达成某一特定目标,在网络中进行的所有步骤称为 multi-step attack。一个 multi-step attack 至少要包含两个不同的行为。

举个例子,DDoS 攻击中,攻击者发出了大量的包,但它们属于同一个行为。所以 DDoS 是一个 multi-agent 的 single-step attack。

本文所 review 的方法,都假设了一个基本的前提:同一个攻击场景所产生的 event 之间具有关联。从而,找到 action(体现为 trace)之间的联系就是检测多步攻击的第一步。至于如何找到两个 action 之间的联系,有多种方法:

  • IP 地址。如果有相同(或在同一个 IP 段)的 IP 地址参与了两个 action,则这两个 action 之间可能有关联。
  • 两个 action 一起被报告,则可能有关联。
  • 时间。如果 action 发生的间隔是确定的,或者这些 action 同属一个时间窗口,则它们可能有关联。
  • 逻辑顺序。如果一个 action 为另一个 action 准备了条件,则它们很可能有关。
  • action 的种类相同。这个判断方式一般用于分析 IDS 的警报,如果警报种类相同的话则可能有关。

3 - 多步攻击检测面临的困难

首先,一般的攻击检测所面临的所有困难,我们都得面对。举例来说,网络数据非常复杂,从中提取出安全有关的信息是困难的;最危险的攻击发生得很少,导致训练数据集中我们只有少量对应样本。这在入侵检测研究中叫做“Rare Data Problem”。还有一些统计学上的困难,比如不平衡的数据集、偏斜分布的数据集。

单步攻击只关联到系统中的单个漏洞,从而比较容易取出来与相似的情形进行比对;多步攻击难以学习和刻画攻击之间的相似性,因为攻击步骤有很多个。对于多步攻击,我们不止要推断出每个 step 的性质,还要推断出各个 step 之间的联系。哪怕我们能识别所有的单个 step,我们也可能搞不清楚整场攻击的策略。

与普通的攻击检测相比,多步攻击检测任务面临的特殊困难:

  • 各个独立的 step 本身可能看起来是无害的。
  • 我们不能假设自己知道整个攻击计划。这是与传统的 plan recognition 非常不同的地方,它们的 possible action 是有明确定义的。
  • 攻击者可能会想出多个攻击计划,一个攻击计划的执行可能会因各种原因突然终止。
  • 我们不一定能检测到所有的 step。
  • action 被表达为 trace 的过程,可能丢失时间顺序。
  • 攻击者常常无需按照特定的顺序执行各个攻击行为,导致可能的的攻击行为顺序会非常多。
  • 攻击者可能会做一些规避检测的行为。
  • 我们需要把攻击场景建模,并以某种标准的形式进行表述。
  • IDS 所提供的信息未必就是问题的源头。
  • trace 包含的很多特征是分类变量而非有序分类变量、定量变量,阻碍了数学建模。
  • step 之间间隔时间可能非常长。
  • 本任务缺乏标准的公开数据集来评估表现。

大量的检测方法采用 IDS 警报作为数据来源。

image-20210913140818417

IDS 产生警报也会面临大量困难:

  • 中等大小的网络里,IDS 就能产生大量的警报。实时处理存在困难。
  • 真正有威胁性的 alert 与假阳性 alert、无关的 alert 混在一起。
  • 不同的安全系统会对相同的行为生成不同的 alert。
  • 不同供应商提供的安全系统,alert 的格式会不一样。需要想办法归一化。
  • 缺乏清晰描述 IDS alert 的语义、格式的文档。

4 - 选取 review 对象的方法

这部分与我们无关,跳过。

5 - 文献的统计

与我们关系不大。有两张图:

image-20210913143309085

image-20210913143321426

可以通过以上这些 paper 进行进一步的了解。

6 - 各种多步攻击检测方法

这是论文的核心部分。作者将目前各种各样的 method 划分为了五个大类:

  • 基于相似度。这类方法利用 trace 之间的相似程度来建模攻击。又划分为三个小类:
  • 渐进式构建(通过属性匹配或关联)
  • 场景聚类
  • 异常检测
  • 因果关系。将多步攻击序列的各个 step 进行分类,然后关注这些 step 之间的因果关系。其也可以分为三个小类:
  • 前提和结果
  • 统计推断
  • 模型匹配
  • 结构化。收集到的 trace 被映射到一个模型中,预测未来的攻击路径。
  • 基于案例。检测周知的攻击场景。
  • 混合模型

image-20210918092348192

各个方法在文献中的占比:

image-20210918093545492

基于相似度的方法

基于相似度的方法通过各个原子 step 之间的相似性来构建攻击场景。

这套方法基于“相似的 alert 与同一个 root cause 有关”的假设,重点是如何计算相似度。

相似度由 trace 的几个属性计算出来:IP地址,端口号,时间戳,trace 的类型,etc.

各个检测方法计算关联度(correlation index),可能是一个二分类的(轨迹相关或不相关),可能是一个复杂的相关性函数。

有些文献只考虑一个特征,多数文献考虑了多个特征,可能会有不同的权重。

主要优点:如果相似度的衡量比较恰当,那么很容易加以实现、能检测到未知的多步攻击。

宽松的规则会导致大量的误报,严格的规则很容易漏报。还要注意过拟合问题,在数据集上调参调出花,面对真实攻击场景也可能木大。

根据 method 如何使用相似度指标,我们可以把这类方法分为三个类。

  1. 渐进式构建。通过不断地获得相似 trace,逐步建立起攻击场景。
  2. 场景聚类。直接把所有的 alert 作为数据集,跑一个聚类算法。与渐进式构建相比,场景聚类不考虑 alert 发生的时间。
  3. 异常检测。把输入的 trace 序列与一些正常情况下的 trace 进行比对,如果认为与常规 trace 不一致则考虑是攻击场景的一部分。

渐进式构建

在渐进式构建方法中,攻击序列是一步步建立起来的。如果一个 trace 与一个场景中的 trace 比较相似,则整个 trace 会添加到该场景中。用于比较的 trace 要处于相同时间窗口。

在渐进式构建中,action 发生的时间是一个很重要的考虑因素(但场景聚类完全不考虑时间)。

对 field 的匹配可能是精确匹配,也可能是模糊匹配。对 event 的 field 进行精确匹配的,我们分到属性匹配(attribute matching)这个小类;采用模糊匹配的,分到属性关联(attribute correlation)这个小类。模糊匹配一般是首先计算关联度,若超过某个阈值,则将两个 trace 放在一起。

image-20210918111022341

属性匹配

Chen 等人(2006)提出了一个基于 Bro IDS 的关联度系统。他们可以直接获取网络流量,而不是收集 event。该系统通过 IDS 给出的特征来判别恶意流量,关注连续的 event,匹配 IP 和端口。

Shaneck 等人(2006)提出了相似的方法。他们把任务分成两个阶段:首先是由 IDS 进行模式匹配和分析,得到很受限的攻击场景。第二个阶段是把其他的 trace 与刚刚判别出的攻击场景中的 IP 相匹配,如果匹配则加入攻击场景。

我认为这个思路非常实用。尽管一场攻击中往往包含未知的漏洞,但一定会有一些迹象可以被探测到。通过探测已知的场景,来把未知的流量加入 scenario,可以识别未知的恶意行为。

Liu 等人(2008)也提出了一个基于 IP 的系统。它们首先把单步攻击标记为最初的攻击场景,然后如果新的 alert 与一个攻击场景中已记录的 IP 相同,则加入该场景。

Brogi 和 Tong(2016)的方法也是关注于如何连接单步攻击,但它们采用的方式是基于标签的。每一个 step 会被系统打上标签,随着信息流传播。如果两个单步攻击之间有雷同的特征,则会被连接起来。

一个另外的思路检测攻击者自己的 IP。Strayer 等人(2005)的系统考虑攻击者在渗透中所用到的资产序列。我感觉没啥道理。

属性关联

Valdes 和 Skinner(2001)提出的系统集成在了 EMERALD 里面,是基于手动构建的各种 alert 的相似度矩阵。具体的运行机制没说。

Dain 和 Cunningham(2001)提出的系统中,利用 IDS alert 的部分相似性来构建攻击场景。每次收到一条 alert,计算出这条 alert 分组到各个攻击场景的概率。概率取决于:IP 相似性;alert 之间的时间间隔;step 之间的逻辑递进关系。

Zhu 和 Ghorbani(2006)的方案计算单步攻击之间的相似性。相似指数是基于 6 个特征,从 alert 中提取。具体的计算相似指数的方式是多层感知机和 SVM。得出的指数存放在 alert 相似矩阵中,用以推断攻击场景。

Wang 等人于 2006 年提出了统计学过滤算法,也是基于关联矩阵。相似指数是根据经验指定的,且固定不变。攻击序列是自动提取出的,但它们是否为一次攻击仍然依赖于人工指定的关联矩阵。2010 年,他们进一步提出了时间窗口,其大小随着时间改变;并将候选的攻击场景分类为三个组,根据成员的关系。2016 年,他们细化出了正向和反向关联度,根据alert的时间顺序。

Pei et al. 在 2016 年提出HERCULE,「攻击故事重构」。他们受社交网络模型启发,定义了一大堆 event 之间可能的联系,从而给 events 建图。边有权重,用一个优化过的算法计算出来。系统返回一张图,表示在多步攻击中所有的事件及其关系。他们做了一些 APT 的模拟工作。

这个和我的任务有关,后续可以看一下

人造免疫系统在单步攻击检测中被广泛使用。iCorrelator 把人类的免疫系统模拟为三层结构,基于细胞(feature向量,例如 IP 相似度)。每一个细胞表示一对警报之间的关联度。关联是基于细胞的,在有监督学习下进化。

场景聚类

很多工作都没有对其细节的清晰描述。秘密研究?