安全分析中的威胁情报(二):ATT&CK

0x00 ATT&CK 背景

ATT&CK 是指 Adversarial Tactics, Techniques, and Common Knowledges 。从名字中就能看出,他不是一项技术,而是更加底层“知识库”的基础资源。ATT&CK 将真实环境中使用到的对抗技术,组织成了一套策略。他关注的不是单点的IOC,而是 IOC 处于攻击过程中的上下文。

ATT&CK 将这种上下文信息用更加标准和抽象的方式总结成了初始访问、驻留、横向移动、命令控制等阶段,并且将具体的攻击行为整理成一个字典,常见的战术动作都可以在ATT&CK Enterprise 中找到相应的位置。

0x01 ATT&CK 对安全分析的帮助

ATT&CK 从攻击战术和技术方面构建知识库,这恰恰是安全分析中研究的重点。但是这方面一直有两大难题:

  • 行为标记
    • 目前检测、分析的起点还是以IOC为主,例如hash、域名、IP、注册表、流量等 IOC 属于特征信息,他不能表达攻击者如何与受害系统交互;只能表示是否受害,受害的过程是无法体现的。
    • IOC 是不稳定的,特别是Hash、IP这种,攻击者可以轻易改变。许多时候,多个 IOC 其实表达的是同一个攻击过程。IOC 方便检测、但是不善于描述攻击。

  • 缺乏统一描述标准
    • 钻石模型,kill Chain 和 TTP 具有很高的现实意义,能帮助分析人员在威胁建模,防御检测方面提供比较完善的理论支持。但是现阶段没有成熟的方法,将攻击描述规范化向分析模型映射。
    • 特别是 TTP 方面,目前还没有统一的描述标准,信息交换方面存在沟通成本。

ATT&CK 完美解决两大痛点,他对攻击性操作进行细分和分类,有了这种完善的参照,极大减少了安全分析中整理总结的成本。那ATT&CK 是通过何种方法解决这两大问题的呢?

0x02 IOC 、SITX 和 ATT&CK

IOC 常被用于安全分析、威胁检测、应急处置等,他是一种共享信息的约定。在整个安全分析周期中,需要有一个载体描述各个分析阶段的实体。IOC常常被作为这个角色进行使用。IOC 狭义的定义:计算机以及网络中的的状态属性和可测量事件,比如一个文件的信息(名称、hash、文件大小等)、注册表键值或者网络请求中的IP、Domain等。(例如OpenIOC)

基于这种定义,IOC 其实是一种“标量”,只能表示“是与否”,“黑或白”,他反应现在所处的状态和发生的事件,是不能表达“攻击过程”这种具有方向性的特征。

谈及威胁检测,威胁发现,TTPs时,经常会说到“战术”,"攻击过程"这样的名词。这类描述,我理解为“矢量”:矢量与标量的区别在于是否有方向。所谓的战术,其实是描述“攻击者借助何种基础设施,采用何种方法对受害者产生影响的过程”,这是一种带有明显方向性的特征。就像标量不能描述矢量一样,狭义的 IOC 是不能描述 TTP 和攻击上下文的。

随后 MITRE 提出了 STIX(Structured Threat Information eXpression), CrowdStrike 提出了 IOA (Indicator of Attack),他们都意识到 IOC 是不足以描述丰富多变的网络安全环境。STIX 通过 Observables(可观察对象)、Indicators(上下文关联)、Incidents(上下文实例)、TTP、Exploit Target(弱点)、Campaign(意图)、ThreatActors(恶意行为特征)、Courses Of Action(反应措施)描述攻击;而 IOA 主要表达攻击者必须采取的什么行动才能达成目的。

不管是何种方式,IOA、SITX 都是在尝试去描述攻击过程这一”矢量“,而 ATT&CK 的出现就像胶水一样,很好的将”部件“进行粘合。丰富且适用的字典可以帮助 IOA、SITX 或其他的一些实践方法进行落地,让攻击描述可以聚焦于更加抽象的过程总结,而不必纠结这个攻击的实际步骤。并且采用统一的描述方法,可以更好的进行信息交换,降低数据转入转出成本,提高信息适用性和可拓展性。并且运用时拿攻击步骤在到 ATT&CK Enterprise中去对应就够了,匹配比总结效率搞得多。

ps:SITX 和 ATT&CK 是一家的,无缝耦合不是问题。

0x03 ATT&CK 与 威胁情报

之前在《小议安全分析》中提到情报整理的重要性。我们投入事件,进行分析,产出情报进行整理存储,在之后的某个时间发现再次活跃的同源攻击事件,根据变化来修正产出的情报,形成,“投入–分析–产出–修正”这种分析模式。

ATT&CK 在这个过程中可以帮助进行威胁情报的规整和知识库的建立。行为标记和统一描述标准两方面,在上一节已经讨论过了。下面看一下业内成功的例子:



ATT&CK Groups 是一个很好的业内实践,他将各个 APT 组织公开报告中的攻击技术和使用的恶意软件,使用 ATT&CK 进行了归档。这种知识库在 APT 发现,溯源分析,价值研判方面有很重要的现实意义。情报提取、循环利用,交叉引用对减少分析时间,提高情报质量十分重要。



图中是APT3和APT29使用的技术映射到矩阵中的样子,这种方式可以让我们已更直观的方式,去比对一个攻击组织常用的攻击战术和攻击手段。都在说 TTP ,但从没有人站出来说 TTP 具体是什么样子的,而借用 ATT&CK,这种表达方式挺容易让人接受。

到这里,不可避免的遇到一个问题:如何将攻击活动向 ATT&CK 进行映射?

0x04 ATT&CK 映射

映射分为两部分:人工映射和自动化映射。

  • 人工映射是指分析人员在分析过程中,通过自身知识的总结攻击活动,人工到 ATT&CK 矩阵中去匹配。
  • 自动化映射是指,机器去理解攻击的上下文关系,通过一些AI技术,将攻击过程去 ATT&CK 矩阵中去匹配。

人工映射十分准确,既然是人,肯定有自己擅长的领域以及知识盲区,“人”对非擅长领域的信息是很难进行判断的;同时,人的精力是有限的,面对海量信息显得有些乏力。

为了解决人工映射的弊端,业内有自动化映射的研究,不可否认,自动化映射更符合真实环境需求。受限于当前机器学习发展的瓶颈,很难有一个算法可以全自动地进行 ATT&CK 映射。

前一段时间一直在思考 ATT&CK 自动化映射的方法,这个东西很难但并不是没有办法,

我认为可以从四个角度进行入手:

  • 环境:动作所处的环境,例如操作系统,执行环境(内存、命令行、sql等)
  • 实现:进行了何种操作,例如文件释放,网络请求,数据修改等
  • 操作对象:如释放的文件类型,注册表等
  • 特征:有一些攻击动作,需要特定的条件,比如 T1170,T1156,T1086 等,这种,检测到相关特征,便可进行直接映射。

我们将 ATT&CK 矩阵中所有的动作以这三个元祖进行描述,但是必须要注意:元组中的所有实体,都是可观测对象! 可观测对象简单说就是能通过 Agent,IDS等设备可以捕获到的信息。

对 ATT&CK 矩阵中的动作进行归纳例如:



一些例如 powershell, mshta 有明显特征的就简单多了,例如:



元组中的实体颗粒越细越好,具体使用方法就是将探针和安全设备采集的日志和数据与四元组进行匹配,得到结果。简言而之,就是建立一个 ATT&CK 的知识库。

这是一种自上而下的映射方法,通过环境、动作、操作对象、特征对 ATT&CK 实例进行分割,将其划分成可观测对象去比对。

存在的问题

理想很丰满,但是有一些问题是不可避免的:

  • 攻击上下文理解 和 匹配结果不唯一
    • 通过日志、探针数据、流量等收集来的数据,如何判断哪些数据属于同一个攻击动作?这就涉及到攻击上下文理解, ATT&CK 是对攻击动作进行描述,既然是“动作”,那么就带有连贯的上下文信息。如何从原子数据中判别出哪些信息是同一个攻击动作,这是 ATT&CK 自动化映射最核心的难点之一。此外像 T1156:.bash_profile and .bashrc,T1086:Powershell,T1170:MSHTA 等,他们有明显的特征,检测映射比较方便,但是像 T1182:AppCert DLL、T1168:Local Job Scheduling、T1038:DLL Search Order Hijacking 这种结合上下文进行判断的动作,自动化映射并不容易。检测到修改了“.bash_profile”文件,可以直接匹配 T1156,因为这是T1156 独有的特征。但是检测到 “释放dll” 这种操作,他一定就是 T1038(DLL Search Order Hijacking) 吗?或者他一定是 T1073 (DLL Side-Loading)吗?归根结底,还是需要去理解上下文。

  • 匹配结果嵌套
    • 因为 ATT&CK 并没有将所有攻击动作总结并没有细化到原子层面,这必然导致,检测结果的嵌套。ID:T1056(Input Capture), 实际应用中可能会伴随其他攻击动作,例如 Powershell,hooking。映射的时候,结果往往是一对多。

一些应用:

0x05 ATT&CK 和 态势感知

态势感知是在一段时间和空间内观察环境中的元素,理解这些元素的意义并预测这些元素在将来的状态。

所以态势感知,分为三个阶段:观察、理解和预测。观察就是收集可观测对象的状态和事件,理解是规整观察到的对象反映出的问题,预测是观察到的对象对未来的影响。

在态势感知系统中,观察数据的分类、归并、关联分析等阶段可以借助 ATT&CK 对其进行沉淀和格式化表达,使用 ATT&CK 可以更好地对融合的信息进行综合分析。 ATT&CK 和杀伤链模型有密切的联系,杀伤链模型同样也适用于态势感知系统中的某些功能。但是需要强调一点:杀伤链预测 ≠ 态势预测:

杀伤链还原是对已发生攻击事件的复盘推演,而态势预测是对未来可能发生的事情进行预测。杀伤链分析的对象是攻击线,而态势感知分析的对象网络环境。杀伤链预测的结果可以反馈给态势感知系统形成态势预测的资料。



ATT&CK 可以帮助杀伤链还原量化指标,杀伤链还原可以帮助态势感知进行态势理解和行为预测。

ps:其实杀伤链和态势感知中的应用,有一个上面提到的大坑:如何理解攻击上下文。(笑

0x06 后记

ATT&CK 是好东西,怎么用就是仁者见仁智者见智了。想将其落地,需要解决自动化映射的问题。这就涉及到攻击上下文理解,解决攻击上下文理解就可以做到杀伤链还原。杀伤链还原攻克,那么能极大提升安全产品的能力。

所以,核心问题:攻击上下文理解。

发布于 2019-07-11

文章被以下专栏收录