高级威胁发现(1)基于溯源图的入侵检测

基于溯源图的入侵检测

  • 浙大:https://www.zhihu.com/people/li-zhen-yuan-20/posts
  • 武大:
  • 中科院:
image-20230320161317805

从早期的对恶意程序的动静态分析,到现在业界比较热门的对攻击链的检测,这个议题已经历很多很多。但很多现有的研究因为开销和误报问题并没有被真正的用于生产环境。而现有的安全产品大多基于静态分析和简单的动态分析,并不能很好的为攻击建模,已经越来越难适应复杂多变的攻击形式和攻击场景;

2019 CCS 议题 Cyber Threat 共有四篇文章,列举如下:

  1. Log2vec: A Heterogeneous Graph Embedding Based Approach for Detecting Cyber Threats within Enterprise, Fucheng Liu, Yu Wen, Dongxue Zhang, Xihe Jiang (Chinese Academy of Science),Xinyu Xing (The Pennsylvania State University),Dan Meng (Chinese Academy of Science)
  2. POIROT: Aligning Attack Behavior with Kernel Audit Records for Cyber Threat Hunting, Sadegh M. Milajerdi (UIC),Birhanu Eshete (University of Michigan-Dearborn),Rigel Gjomemo (UIC),V.N. Venkatakrishnan (UIC)
  3. Effective and Light-Weight Deobfuscation and Semantic-Aware Attack Detection for PowerShell Scripts, Zhenyuan LI (Zhejiang University),Qi Alfred Chen (University of California, Irvine),Chunlin Xiong (Zhejiang University),Yan Chen (Northwestern University),Tiantian Zhu (Zhejiang University of Technology),Hai Yang (MagicShield Inc)
  4. MalMax: Multi-Aspect Execution for Automated Dynamic Web Server Malware Analysis, Abbas Naderi-Afooshteh (University of Virginia),Yonghwi Kwon (University of Virginia),Jack Davidson (University of Virginia),Anh Nguyen-Tuong (University of Virginia),Ali Razmjoo-Qalaei,Mohammad-Reza Zamiri-Gourabi (ZDResearch)

其中,前两篇都用图表示攻击流程,然后分别采用机器学习的方法和图匹配的类规则方法进行检测。而后两篇则将关注点放在脚本类的恶意程序上。前者(也就是我们的工作)用主要是静态分析的方法解决混淆问题,而后者则用动态方法分析了恶意程序变体的问题。下面我们分两组讨论这四篇文章。

前言:

网络空间威胁检测面临的一些研究问题?

  • 缓慢又隐蔽的高级持续性威胁的检测难题:高级持续性威胁(Advanced Persistent Threat)往往采用隐蔽的攻击形式,在很长的一段时间内缓慢的渗透入目标系统并长期潜伏以达到攻击目的。因为其缓慢又隐蔽的特性,传统的防御手段往往很难对其实施有效的监控。正所谓“我设置阈值过高,就会错过攻击;我设置阈值过低,就没空管理系统(误报太多)”。
  • 用什么数据什么结构准确度表示一个威胁行为的问题:用什么方式表示一个威胁或攻击行为一直以来被研究者关注。不同的表示方式都有其优点与缺点,很难给出一个绝对的判断,应该根据不同场景做不同选择。举例来说,现在常用的威胁情报(IoC)使用非常简单的数据,包括恶意的IP、恶意文件的Hash,几乎没有任何鲁棒性可言,但却是现实中常用的安全工具,有效的保护了许多系统的安全。其他常见的方式还包括,系统调用的序列、API调用树、代码动态执行图等。一般而言,简单的结构意味着更高的效率,但表达能力更差,误报的概率更高。而复杂的结构,表达能力更好的同时检测效率却受到影响。
  • 如何设计检测算法权衡威胁检测的响应速度与检测精度矛盾:威胁检测的系统的响应速度很大程度的影响了该系统的应用场景和价值。响应速度越快,就能越早的定位并阻止进一步的攻击发生,从而尽可能的减小损失。但是鱼与熊掌往往不可得兼,效率高、响应速度快的速度在检测能力上往往不如响应速度慢、收集数据更加全面的系统。现有的系统都尝试在响应速度和检测精度之间找到一个行之有效的平衡点。
  • 如何设计存储系统以权衡存储空间与查询效率之间的矛盾:如前面所说,高级持续性威胁往往是“low and slow”的,攻击的周期可能长达几十天。此外,为了保护系统安全,日志系统往往需要保存很长一段时间内的日志以便事后的取证(Digital Forensic)分析。因此系统有很强的存储的日志的需求。对一个大公司来说,这可能以为着PB级的存储以及百万美元的开销。因此日志存储系统的设计和针对性的数据压缩算法也是必不可少的。

1、溯源图

溯源图(Provenance Graph)描述计算机中的事件并在图中进行威胁检测是最近几年学术界和工业界都很关注的一个课题。使用图的形式,相比于之前常用的序列有更加好的表达能力。但是图上计算的复杂性,也给研究人员带来了许多的挑战,很多研究组在近几年带来了许多的研究成果(我可能会在后面展开讲讲这方面工作,也是一个很有意思的题目)。值得一提的是本议题第二篇文章 POIROT(大侦探波罗)的“侦探”三部曲(SLEUTH,HOLMES,POIROT)都发表在四大会上,有兴趣的同学可以在这里找到更多。

溯源图是由计算机中的实体为节点(进程、文件、网络套接字)、将实体间的操作(进程文件、开启新的进程)视为节点之间的边,这样就构成了一个有向信息图。溯源图可以用来表示系统中的各种行为,包括各种攻击行为。

img

img

2、如何在溯源图中高效的定位威胁呢?

POIROT 签名匹配:

在 POIROT 中,作者们创新的提出了另一种和溯源图类似的图 -- 查询图。他们先人工的分析 APT 攻击白皮书,入侵报告等威胁情报并手工提取出其中涉及的实体和实体间的操作,构成查询图(Gq)。然后给出了一个专门设计的图匹配算法,从而实现了个高效的检测。这其实是一种类似签名匹配的检测算法,因此优点在于较高的效率和低的误报率。但是缺点也很明显,这种方法无法检测未知的攻击,对变体的抵抗能力也比较弱。而且提取特征的过程全是手工完成的,人力成本较高。

Log2vec 异常检测:

首先值得一提的是,这也是一片国内的文章,出自中科院信工所。他们将最近在机器学习领域很火的 Graph Embedding 方法迁移到了“溯源图”上(这里需要说明,他们说使用的图结构在溯源图的基础上加上了很多额外的联系,因此联系更紧密)。他们的主要贡献在于证明了 Graph Embedding 在可以用于加强版的溯源图,使得生成的向量有很好的表达能力,可以用于攻击的检测。

3、溯源图在检测上的优势?【待补充】

利用这些边和节点,溯源图可以表示出系统对象之间的数据流与控制流关系,从而将存在因果联系(Causality)的节点连接起来,无论两个节点之间相隔多少的其他节点,或者发生时间相差多少。以RQ1中的高级持续性威胁为例,无论攻击如何隐蔽与缓慢,我们都可以在溯源图中找到对应的节点与因果联系,从而对其进行有效的检测。

溯源图包含着丰富的系统行为语义,也有很强的关联分析能力,因此在检测未知威胁和告警关联、误报过滤方面有着很强能力、很好的效果。

4、基于溯源图做入侵检测、关联分析和告警消减中的常见问题和可能的风险

基于溯源图做入侵检测、关联分析和告警消减中的常见问题和可能的风险

基于溯源图的入侵检测和告警关联分析方案已经越来越多的被各大安全厂商采纳作为新的检测引擎核心。溯源图包含着丰富的系统行为语义,也有很强的关联分析能力,因此在检测未知威胁和告警关联、误报过滤方面有着很强能力、很好的效果。然而基于系统溯源图的检测系统本身也会引入新的问题,一些错误的使用可能会导致新的风险。本文整理归纳了利用系统溯源图做威胁检测过程中可能遇到的一些常见问题,和潜在的攻击方式,希望引起大家重视。

4.1 用溯源图进行检测过程中遇到的问题

利用溯源图进行检测的最大问题,或者说挑战,就是性能问题。主要表现在两个方面:

  • 数据量过大带来的数据收集开销:为了构建完整的系统溯源图,检测系统需要收集大量的数据,一般来说单台主机一天收集的数据量会在GB这一数量级。因此存储和处理数据会带来很大的开销。

  • 图结构处理带来的计算开销:因为溯源图原始的图结构,完整的处理其信息会引入大量的开销。

4.2 带有风险的缓解措施和针对性的绕过手段

对于安全系统,尤其是面向业界的安全系统而言,性能就是生命,直接决定了乙方会不会接受安全产品。所以,从业者采用了各种方式来缓解性能压力,这些方法从原理上来说可以分为两大类:“剪枝”“衰减”

“剪枝”就是将被认为无关的攻击路径整条排除,不予考虑;“衰减”则是认为局部的可疑行为只会与临近的行为关联,所以行为的影响力会随着图中距离的变远而逐步减小。(具体的实现比较复杂,不再赘述。)实际情况中,这两种方法往往可以一起使用使性能最优。

然而,需要注意的是这两种方案都有可能导致攻击漏报,而攻击者也完全可以利用这两个特性来针对性的构造攻击。事实上,了解原理后,有些攻击的构造会相当的容易。接下来我会由简单到复杂介绍几个具体的缓解方法和对应的攻击构造思路:

  • 利用包括数字签名在内的简单白名单策略进行剪枝利用白名单进行初步的数据过滤是一种很直接也很有效的方法,但是过于简单的白名单策略可能导致攻击者很容易的绕过。以数字签名为例,绕过数字签名的方式有很多:包括签名伪造、DLL Side loading以及最近很火的供应链攻击方案。
  • 基于局部异常行为剪枝:攻击行为往往会导致异常的系统行为(溯源图中的边),比如不应该出现的进程对文件访问等。部分工作针对这一特性认为“常见的系统行为就是相对安全的,因此可以忽略”。针对这一类的缓解方案,攻击者可以采用Live-off-the-Land的攻击思路,即尽可能的采用系统中原有的数据访问路径。 比如说经典的Gitpwn攻击,利用Git的代码提交流程完成源代码的窃取和上传。可以避免异常的文件访问和网络传输流程,从而完成攻击。
  • 衰减:利用衰减的思路,安全分析人员通过控制检测点的传播轮数(保留时间),可以有效控制每次需要处理的图的规模,从而大幅度的降低的算法的复杂度。然而攻击者可以通过加长攻击链(增加攻击间隔)来避免被检测。需要注意的是加长攻击需要使得溯源图中节点的距离变大,如下图所示,常规的有核心控制节点的攻击图并不能真正拉长攻击链。这里可以使用的攻击技术报告DLL side loading、注册表自启动等等。值得一提的是,基于衰减的压缩方案往往和剪枝的方案共同使用,也意味着双倍的风险。

上面几点仅仅是抛砖引玉,除此之外,其他的安全风险还包括:1)不完整的因果关系数据;2)受限的攻击案例分析等。可以看到,引入溯源图在解决部分问题的同时也引入了新的安全问题,构建真正安全系统的路还很长。希望大家也可以提出自己的看法,多多交流。