APT 分析及 TTPs 提取

by PIanet

Abstract

本文对 APT 分析及 TTPs 提取进行讨论,总结出一套适用于安全分析、安全研究及企业应急响应人员的分析方法。

文章由六部分组成,引用了杀伤链模型,钻石分析模型,ATT&CK 等内容,介绍了攻击事件、APT 攻击的一些概念,简单概括了 “通过攻击者能力切入” 和 “通过基础设施切入” 的两种 APT 事件分析的方法。着重探讨了 TTP 的提取、使用、应用、落地及归因判断。提出了 “特征矩阵” 和 “事件链图”,设计了描述模型,同时进行了简单的可行性论证。

内容适用于具有一定经验的安全分析师,病毒分析师,威胁情报分析师等安全人员。

0x00 攻击事件

什么是攻击事件?

个人理解,攻击事件是在未授权情况下,对计算机系统或计算机资源进行访问、使用、更改、破坏的活动。根据事件烈度和影响范围,可以分为以下几类:

0x00-01 攻击事件甄别

对攻击事件,可以从烈度、影响、指向以及特点等维度进行甄别。

0x00-02 攻击事件的核心元素

借用钻石模型中的概念,每一起攻击事件(Event)都包含四个核心元素:攻击者(Adversary)、受害者(Victim)、能力(Capability)和基础设施(Infrastructure)。

每一起攻击事件,都有一个攻击者通过基础设施上的能力对受害者产生影响,进而达成某种目的。所有攻击事件都是围绕这四者进行展开的。

在这四核心元素之上,又可以衍生出 “技术”,“社会” 维度,指导安全分析。在此不再展开,之后会单独做一个专题,使用钻石模型进行事件分析。

0x01 APT

APT (Advanced Persistent Threat),翻译为高级持续威胁。这类攻击报告,最早可以追溯到 2005 年 6 月,英国国家基础设施安全协调中心 (UK-NISCC) 和美国计算机应急响应小组 (US-CERT) 发布了技术警报公告,其中描述了有针对性的社交工程电子邮件,这些电子邮件包含特洛伊木马进行窃密。(LM White Paper Intel DrivenDefense)

这个概念炒了好几年,不同身份角色,站在不同角度都有自己的理解,就不过多解读。文章以下内容,限定在国家及组织对抗的 APT 攻击场景。

0x01-00 APT 攻击的特点

国家及组织对抗的 APT 有以下几个特点:

0x01-01 APT 入侵的方式

APT 攻击入侵的方式主要有:鱼叉式钓鱼、IM、水坑攻击、钓鱼网站、1/N day 漏洞、0 day 漏洞和物理接触。入侵包括载荷投递和突破防御两个阶段,各种入侵方式的成本如下图:

入侵方式金字塔,从下到上,入侵成本和危害程度逐层递增。

处于金字塔最底层的是鱼叉式钓鱼邮件和即时通讯软件,它是最常见、入侵成本最低的攻击方式。攻击者常常以鱼叉邮件做为攻击入口,精心构造邮件标题、正文和附件。用来投递恶意网址、伪装文件或者含有漏洞利用的文档。IM 与鱼叉邮件钓鱼类似。水坑攻击和钓鱼网站也是常见 APT 攻击入侵方法。侵入网站,加入恶意 JS 伪装更新;或者通过推特、fb、论坛上面通过发布、评论、转发等方式进行社交平台的水坑攻击。还可以制作钓鱼网站,通过邮件、IM、水坑等方式投递给受害者,窃取账号密码、收集主机信息或者诱惑下载恶意软件。这两种入侵方式的成本也不高。

防御边界的渗透攻击,针对的是受害系统、业务的防御边界,进行常规的渗透攻击,例如常见的 SQL 注入,文件上传,跨站脚本攻击、跨站请求伪造等。此类入侵方式较常规网络攻击并无不同,入侵的目的是突破防御边界,找到稳定且隐蔽的入口,渗透攻击在 APT 攻击中也是比较常见的。

再往上,就是漏洞利用。漏洞利用的目的有两点:未授权安装、运行代码和规避杀软检测。其中 0 day 漏洞危害和成本要远大于 1/N day 漏洞。各种 APT 攻击中,出现过许多操作系统漏洞、路由器或交换机网络设备漏洞,以及 office,Flash,PDF 等应用漏洞。此种攻击往往搭配其他手法,组合进行入侵。例如容器漏洞在渗透攻击中的利用,以及 Office 漏洞在钓鱼中的利用。

漏洞入侵之上是供应链攻击,典型的例子如 XSHELL 、CCleaner、华硕软件更新劫持等攻击事件。在突破上游供应商后,在极短的时间内进行资产摸排、更改、下发、劫持。又同时可以顺利筛选、控制下游目标。整套流程下来,及其考验攻击组织的技术能力,协调能力,后勤能力及储备和信息收集能力。

最顶层是物理接触,典型的攻击事件:“震网”。这种比较少见,不多说。

APT 攻击是否成功,取决于攻击者的目的和所具有的入侵能力,与目标防御强弱无关。防御强弱和目标的价值决定了入侵的方式。漏洞利用,特别是 0 day 漏洞都是针对高价值,特定目标,考虑到入侵成本,APT 攻击更倾向于其他的入侵方式。

0x02 APT 事件分析

在事件分析的初期,我们拿到的线索是破碎零散的,这些线索只是攻击者为了达成目的采取的手段,我们做安全分析,其实是对攻击手段上下文的描述。

事件有四个核心元素,攻击者、受害者、基础设施和能力。我们分析 APT,可以从受害者、基础设施和能力三个角度进行切入。具体方法分为两种。

0x02-00 APT 两种分析方法

通过攻击者“能力”切入分析:

基于能力的分析方法,对应的是样本分析。样本分析要关注样本的行为及上下文关系。

样本行为包括样本的恶意行为、驻留、子进程创建,释放文件、网络请求等。其中要注意样本中携带的信息和加解密、攻击技术、对抗技术方面的特征。这些携带的信息和特征有助于关联匹配到其他样本。

入侵过程中往往有 fake (Downloader),有 Dropper,有 backdoor;各个阶段还会包含伪装、漏洞利用。初期拿到的样本通常只是其中一个。样本分析是事件分析的基础,只有弄清样本的上下文关系,才能理顺攻击手段。

样本分析同学以恶意软件为起点,针对技术(加解密、攻击技术、对抗技术),C2 结构和恶意软件上下文进行分析。根据恶意软件的特征匹配其他样本,扩大分析面。期望分析得到的结果:

各大厂商的 APT 报告都是以攻击者能力切入,所以看到大量篇幅都是恶意软件技术报告。

通过攻击者“基础设施”切入分析

基于基础设施的分析方法是 C2 关联分析。是描述事件上下文最有效的方法。

样本中多少会暴露一些基础设施信息;或是 IP,或是域名。通过 WHOIS 信息来发现统一注册者的不同域名。进一步研究可以得到针对不同攻击者的恶意软件信息(相似/相同的基础设施)。期望分析得到的结果:

分析过程中要注意一点,样本分析和关联分析并不是独立进行的。

对恶意软件进行分析,得到其中的 C2 基础设施。通过对 C2 的关联分析,找到了同一基础设施下发的其他样本。之后再对样本进行分析……由此形成了一个循环。最后的效果,差不多是这样的:

举一个简单的例子:我们拿到初始样本 A,进行恶意软件分析,得到其中的 C2:域名 A 和域名 B,对 C2 基础设施关联分析,发现具有相同基础设施的样本 B。通过对样本 B 逆向分析,得到新的 C2 域名 C。这仅仅是一个循环,分支上就已经可以关联到许多信息。这个循环越多,找到的线索越多,最后事件分析的完整度就越高。

0x02-01 IoC 层级

IoC (Indicators of Compromise) 在取证领域被定义为计算机安全性被破坏的证据。在 APT 领域作用就是描述攻击者得恶意活动。分析人员对 IoC 进行识别和关联,来寻找恶意活动背后得事件和潜在得威胁。APT 分析工作都是围绕 IoC 进行的。

分析过程中遇到的 IoC 有以下几种:

这些 IoC 的地位并不是相同的,其中一些指标远比其他指标更有价值。David Bianco提出了 Pyramid of Pain,描述了 IoC 之间的层级关系。

0x03 TTPs 提取

TTP 是什么?

TTP: Tactics, Techniques, and Procedures (战术、技术、过程)

0x03-00 TTP 提取的难点

战术、技术、过程三个词过于抽象,目前没有很好的方案对 TTP 进行实体描述。

再者就是,相关的资料过于匮乏。国外技术封锁、而国内做 APT 研究的能力性安全厂商寥寥无几。
曾从事过一段时间 APT 分析,结合钻石分析模型、Kill chain,摸索出一种描述 TTP 的方法:特征矩阵和事件链图。

不管是 IoC、IoA、SITX 还是 ATT&CK ,目前市面上都没有成熟的方案对 TTP 进行描述,特别是 ATT&CK ,因为过度炒作,目前已经有点妖魔化。本篇不对 ATT&CK 过多探讨,可以参考阅读《安全分析中的威胁情报(二):ATT&CK》《关于ATT&CK/APT/归因的讨论》以示正听。ATT&CK 对 TTP 提取的帮助,后文会进行讨论。

0x03-01 特征矩阵

特征矩阵是对特征的事件分析过程中,攻击者能力,基础设施,战略等方面的特征总述。

整体分为三个部分,基础设施特征、技术特征、战略特征。

大体的框架如图所示,一些指标要根据实际情况进行调整:

以上的特征分析方法对应:

TTP 是 Tactics, Techniques, and Procedures。得到的特征矩阵,更多的是在能力和基础设施方面上的特征,Procedures 上面的体现很弱。为了弥补这一点,推出事件链图来表示攻击事件的上下文,体现战术特征。

0x03-02 事件链图

在说事件链图时,先补充几个概念。

KILL CHAIN

入侵的本质:攻击者开发有效的载荷突破防御,在可信赖的环境中实现驻留,以便接下来的行动。这种行动可能是横向移动、窃密、破坏完整性或可用性等。

洛克希德马丁公司,在 2011 年发布的一篇论文《Intelligence-Driven Computer Network Defense Informed byAnalysis of Adversary Campaigns and Intrusion Kill Chains 》中描述了一种名为 Kill Chain 的入侵分析模型。通过对入侵的理解,杀伤链将攻击定义为7个阶段:

前面的六个阶段都是为最后采取行动做铺垫。当入侵成功实现驻留之后,恶意软件将会通过 C2 命令执行一些横向移动、窃密、破坏、勒索等一些恶意行为。介绍 Kill Chain 的文章已经很多,不再赘述。

攻击总是线性的

攻击者不可能隔空,也不可能不借助外有资源和能力达成攻击目的。

举一个简单的例子:

攻击者投递含有 cve-2017-11882 的钓鱼邮件,受害者打开了钓鱼文件,漏洞利用成功,文档从远程拉取执行了后门。

将描述的实体抽离出来,就是这个样子:

outlook ->
Explorer ->
office ->
EQNEDT32 ->
[NET] ->
Explorer ->
Payload

简单梳理一下, 此描述的攻击动作,其中将使用到的行为主体有 outlook,资源管理器,office,公式编辑器,网络和最终的 payload。每一个步骤都是首尾相连,且没有中断的。

攻击在观测空间内的动作一定是呈线性关系的。操作的对象、攻击的动作一定是有明确的目的和明显的前后关系。

APT 分析单位

在此规定一下,事件为 APT 分析的最小单位,而不是样本。

样本分析 ∈ 事件分析

事件分析 ∈ 攻击战术分析

一次完整的分析要包含完整独立攻击上下文。当然,事件之间是关联的。比如,攻击者发送钓鱼邮件,其中包含钓鱼网站链接,受害者接收钓鱼邮件并且点开钓鱼链接下载并运行了恶意软件。这是三个独立事件:邮件钓鱼、钓鱼网站、恶意软件执行。

因为在杀伤链模型中,邮件钓鱼、钓鱼网站、恶意软件有各不相同入侵过程。虽然整个攻击是连贯的,还是要将各个步骤拆解出来,单独进行事件分析。

为了表述事件链图。指定以下场景:

APT 组织对某机构进行攻击:
攻击者通过 google hacking 搜寻到所属该单位的某雇员,通过社交平台找到其 163 邮箱。
对该员工发送钓鱼邮件,其中包含 163 邮箱钓鱼网站。
雇员查看钓鱼网站,泄漏了自己 163 邮箱密码。
攻击者登陆邮箱,查看往来信件,锁定高价值目标。
向高价值目标发送钓鱼邮件,其中包含有漏洞利用的文档。
文档被打开,主机被感染,窃取到机密文件。

以上整个攻击,用事件链图描绘出来:

入侵的上下文用实线连接,事件之间的上下文用虚线连接。就构成了基于杀伤链的事件链图。

但是 APT 攻击手法是多样的,设立的场景中,钓鱼邮件进行恶意文档投递,水坑攻击不行么?最终后门是通过利用文档漏洞进行恶意代码执行,使用浏览器漏洞是不是更高效?所以我们将链图再进一步抽象,就得到最后成品:

攻击的入口和方法很多,但是攻击事件的上下文基本上是类似的。

因为场景十分简单,实际的 APT 攻击,制作出来的链图要比这一个丰富的多。

0x04 TTPs 的使用及归因判断

首先是特征矩阵,特征矩阵着重对 APT 活动技术上面进行描述。

两个活动 A 和 B,将特征矩阵由 A 到 B 进行映射,相同颜色部分标识相同特征。区域的颜色标识特征的置信度。当置信度达到一定阈值后。我们就可以将两个活动关联起来,认为是同一攻击组织所为。
之前 IoC 层级中提到,不同的 IoC 他的更改难易程度不同,所以各种 IoC 的价值也不同。在这里也是适用的。

在特征矩阵映中,映射到的部分权重也而不相同。参照 Pyramid of Pain,制作一个 Pyramid of Features:

自下而上,一共七层。最底层是样本中硬编码的字符串和样本中携带的主机特征、这些是最容易改变且经常用来迷惑分析人员的指标。往上是 C2 上面的特征,这些也很容易改变,但是同批样本,同一活动的 C2 结构基本相同。在往上是样本中的一些攻击技术和对抗技术。处于顶层的时加密方式、密钥、使用的攻击,漏洞利用技术、C2 和独特的算法。

加密方式和密钥以上在关联分析中的置信度已经很高了,特别是非对称加密的密钥,但是生存时间短,经常用过几次后就被弃用。再一个是使用的工具和漏洞利用技术,在 Pyramid of Pain 也提到了,工具的开发需要大量的人力金钱成本,这些特征不容易改变。

APT 组织,有基础设施重用的情况,如果看到相同的 C2,基本就确定活动关联,但是要注意 C2 生命的连续性,如果域名 1 月份注册到期,过了保护期,6 月份时再次活跃,是不是同一攻击者还需思量。独特的算法包括加密算法、有特点的攻击技术、对抗技术。

金字塔上的特征有下到上,特征的改变难度越高、价值越高,使得在分析时,权重和置信度也越高。

如果特征上,置信度叠加不高,就可以在事件链图中进行匹配:

A 是所掌握的某组织的事件链图,B 是独立攻击的事件链图。

红色部分为匹配到的相同特征,如果特征置信度达不到一定阈值。可以观察 A 攻击的上下文,与所掌握 B 的信息是否相符。如果上下文重合度高。可以增加 B∈A 的可能性。

TTP 是有生命周期的。APT 攻击在对抗中升级,技术、战术特征会在一段时间后变的面目全非。

归因判断不仅仅可以通过特征矩阵进行特征匹配,还可以通过事件链图攻击上下文进行佐证。

0x05 TTPs 落地的思考

一个东西提出后,首先要思考的是它产生的背景,自身的价值,适用的范围,解决的问题,存在的不足以及可行的落地场景和具体方案。

TTP 的意义在于可以对一起攻击事件、一个攻击组织高度的总结。可以帮助我们对攻击进行及时的感知和阻断。此外,TTP 另一个用处就是归因判断。

0x05-01 实体抽取

不管用作防御的感知和阻断,还是在研究领域的归因判断。落地前需要解决的第一个问题就是人类语言向机器语言的转变,也就是行为实体抽取和可机读。

前文提出了一个观点:攻击是线性的,且不可能隔空进行操作。将操作对象视为原点,操作视为方向,其构成的向量即代表本次的攻击动作,向量的顶点即表示下一个操作对象。这些一个个的攻击动作首尾相连构成攻击行为,最终指向的便是攻击目的。

进行 TTP 提取的前提是,梳理出完整的攻击流程和操作对象。而图中所示的操作对象,便是需要抽取的实体。“操作对象” 具有以下特点:

还是那个例子:

攻击者投递含有 cve-2017-11882 的钓鱼邮件,受害者打开了钓鱼文件,漏洞利用成功,文档从远程拉取执行了后门。

outlook,资源管理器,office,公式编辑器,网络和最终的 payload 这些都都是操作对象。他们直接或间接的受控于攻击者。

0x05-02 关系描述

“事件链图” 是描述 TTP 的重要方法,它着重强调了攻击的上下文关系,以及操作对象之间的关联关系。在事件链图描述中,每一个方块实际就是操作对象。除此之外另外一个维度就是关联关系,也就是 “操作”,对应事件链图中连接方块的边。

操作可以理解为攻击动作。人类知识转变为机器语言是困难的,将攻击动作进行可机读的表述需要借助一个东西:ATT&CK。

ATT&CK 对 TTP 提取的帮助

ATT&CK 的价值在于统一了行为标记和描述的标准。它对攻击性操作进行细分和分类,有了这种完善的参照,极大减少了 “行为抽象” 的成本。

进行 TTP 描述,需要对攻击的动作进行一种标准化描述。我们所要描述的 “关系”,其实是表达 “攻击者借助何种基础设施,采用何种方法对受害者产生影响的过程”,这是一种带有明显方向性的特征。就像标量不能描述矢量一样,狭义的 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 的出现就像胶水一样,很好的将 ”部件“进行粘合。丰富且适用的字典可以帮助描述操作对象的上下文关系,进而帮助对 TTP 进行抽象描述。

ATT&CK 让攻击描述可以聚焦于更加抽象的过程总结,而不必纠结这个攻击的实际步骤。并且采用统一的描述方法,实现了可机读,以及可以更好的进行信息交换,降低数据转入转出成本,提高信息适用性和可拓展性。

使用 ATT&CK 进行关系映射

使用 ATT&CK 关系映射分为两种:人工映射以及自动化匹配。

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

人工映射十分准确,既然是人,肯定有自己擅长的领域以及知识盲区,“人” 对非擅长领域的信息是很难进行判断的;同时,人的精力是有限的,面对海量信息显得有些乏力。为了解决人工映射的弊端,业内有自动化映射的研究,不可否认,自动化映射更符合真实环境需求。受限于当前机器学习发展的瓶颈,很难有一个算法可以全自动地进行 ATT&CK 映射。

结合 “事件链图”,使用 ATT&CK 映射关联关系可以从四个角度入手:

自动化映射需要结合自身系统的设计和需求,因人制宜,不过多的讨论。

0x05-03 完整的描述模型

经过优化, 可以将 “事件链图” 描述为:

方块表示操作对象,边表示操作对象之间的操作,也就是 ATT&CK 所描述的那部分。每两个实体和边看作一个最小分析单位,如图中红框所示。其构成的最小元组表达为:

(Node1 {Labels:'xxx'})-[:Relationships {Labels:'xxx'}]->(Node2)

每一个操作对象、实体表达为(Node)。关联关系表达为[:Relationships]。实体和关联关系都具有属性信息。

Node 的属性信息,可以是资源路径,捕获时附带的信息,带有的命令行参数等等。一切和操作对象实体有关的信息都可以放在里面。Relationships 描述攻击过程和实体之间的关系,可以基于 ATT&CK 进行描述,属性信息包含攻击击过程的环境,实现,特征或者其他一切信息。总的说,关注的是4种内容:

基于此种描述模型,可以延伸出两种 TTP 描述方法:

特征矩阵中的信息,大多可以映射到实体属性上。关注实体的 TTP 描述方法更多的是在能力和基础设施方面的特征。关注关联的 TTP 描述方法,着重上下文关系,更能体现体现战术特征。当然也可以将两者进行融合,只不过我将其归为第二类。因为描述上下文时,也需要操作对象(实体)的属性信息。

那么如何设计数据结构呢?可以使用 json 嵌套,也可以使用 STIX ,当然也可以自己设计标准。此处留一点想象空间。😜

0x06 参考链接

鸣谢

主要内容成文于两年前,感谢当时 Redrain、cyg07 对我教导和帮助。