现代信息系统中存在的众多漏洞一直是攻击者进行攻击的“关键”突破点,因此漏洞检测已经成为防守方的一门必修课。但常见的漏洞检测方法中,模糊测试覆盖率不足,基于符号执行程序的验证方法又对检测设备的性能有较高要求,此外漏洞发现后的补洞过程也极为耗时。
入侵检测与威胁分析系统的研发为对抗攻击提供了更直接、更快速的新方法, 能很大程度缓解上述问题。然而,现有的入侵检测系统大多依赖于提取自已有攻击的攻击特征,如入侵指标(Indicator of Compromise,IoC)等,其作为检测依据并未真正把握到攻击的要点,使得防御者总是落后一步。攻击者总是可以通过找到新的攻击面,构造多阶段多变的复杂攻击来绕此类检测。因此,安全研究人员和从业人员亟需重新考虑传统的入侵检测方案,设计出新一代更加通用和鲁棒的入侵检测机制来检测各种不断变化的入侵方式。
图1.痛苦金字塔(The Pyramid of Pain)模型
David Bianco很早便提出了入侵检测的 “痛苦金字塔模型”(如图1所示) ,研究指出相对于 “Hash 值”、“IP 地址”等底层入侵指标,“攻击工具” 和 “攻击策略、技术、流程(TTPs)” 等高层特征在入侵检测中有更大的价值,也更难以分析和改变。这是因为底层的入侵指标的出现更具偶然性,因此攻击者很容易改变这些指标来逃避检测。此外,无文件攻击和 “Live-off-the-Land” 攻击等攻击技术的出现,使得攻击行为涉及的底层特征与正常行为完全无法区分。而高层次特征中带有丰富的语义信息(包括攻击的方法、目标、利用的技术等),更具鲁棒性。对于攻击者而言,攻击策略、技术、流程(TTPs)与其最终的攻击目标直接相关,很难被真正的改变,因此对入侵检测更有意义。同时,语义信息可以很好的帮助安全分析人员理解攻击,包括入侵的途径、可能的损失等,从而针对性地做出对应的止损和弥补措施。
系统溯源图介绍
2015 年,美国国防部高级研究计划署(DARPA)启动的一项名为 “透明计算(Transparent Computing)” 的科研项目为上述问题的解决提供了可能性。该项目旨在通过将目前不透明的计算系统变得透明,辅助海量的系统日志建模,从而为后续的高层次程序行为分析和高效地入侵检测提供支持。具体来说,该项目将开发一套数据收集与建模系统来记录和建模所有系统和网络实体(包括进程、文件、网络端口等)及其之间的互动和因果关系(Causal Dependency)。这些实体和关系可以以图的形式表示,如图2所示,一般被称为 “溯源图(Provenance Graph)” 或者 “因果图(Causality Graph)”。
图2.Firefox漏洞入侵溯源例
上图是一个利用Firefox漏洞进行入侵的溯源图例子:攻击者从x.x.x.x:80发起攻击,利用Firefox的漏洞创建并启动了mozillanightly浏览器插件,该插件通过cmd执行环境信息获取命令获取敏感信息后回传到x.x.x.x:443,最后创建burnout.bat清除所有入侵痕迹。(箭头方向代表数据流或者控制流方向)
溯源图是一个带有时间信息的有向图,两个节点之间可能有多条不同属性(包括时间和具体操作等)的边。该图准确的记录了系统实体间的交互关系,包含丰富的信息。前文提到的攻击图可以看作溯源图中提取并抽象后的,与攻击直接相关的部分子图。但需要指出的是,溯源图记录的并不是细粒度的数据流和控制流,而是可能的因果控制关系,因此在进行多跳的分析时会引入错误的依赖,导致核心的依赖爆炸问题,这也是基于溯源图入侵检测的核心问题。
基于系统溯源图的入侵检测框架
图3.基于系统溯源图的入侵检测系统框架及关键技术
溯源图能很好地还原系统中的各种行为,使其成为了近年来入侵检测领域热门有潜力的研究方向。安全研究者在其基础上设计了多种模型来进行系统中恶意行为地检测与分析,包括 “数据采集、解析和压缩”,“数据存储与压缩”,和 “入侵检测和溯源分析” 在内的许多具体研究问题。我们整理了威胁分析与检测系统的整体框架,如图3所示。以下,我们将具体讨论框架的三个模块并对其中技术进行分析:
01数据收集模块
数据收集是所有检测和分析系统的基础。一般而言,基于溯源图的威胁检测系统会收集系统日志作为数据源,包括 Windows 的内置日志系统 Event Tracing for Windows(ETW)、Linux 的日志系统 Auditd等。基于依赖分析的方法的一个普遍的挑战是 “依赖爆炸问题”。错误的依赖会导致后续分析的开销与误报指数型增长,导致分析的失败,而细粒度的数据收集可以从根本上缓解这一问题。
02数据管理模块
系统日志为威胁分析提供了大量有价值的信息,然而其巨大的数据量给数据的存储和分析带来了很大的压力。因此在数据管理模块中,我们一方面需要提供合理的数据存储模型来存储海量的数据并提供高效的查询分析接口,另一方面要尝试通过压缩和剪枝去除冗余的数据。
数据存储模型 利用图结构存储溯源图是一种解决思路,但受溯源图规模限制,将图完全存储在内容内存中是不现实的,只能在小规模的实验中使用,无法大规模部署。因此,研究者们提出了将图中所有边视为数据流,每个边只处理一次,并利用节点上标签记录计算过程的方案。为了加以区分,我们将用图数据存储图的方案称为 “缓存图”,流式处理的方案为“流式图”。流式图方案存在优势的原因在于溯源图中边的数量远远大于节点数量,因此查询节点的属性效率比查询边的效率高得多。类似地,一些研究以节点作为键,边为值,将溯源图存储在查询效率更高的关系型数据库中,我们称之为 “节点数据库”。
图4.对边数据的压缩算法
图5.对节点数据的压缩算法
数据压缩算法 溯源图上的数据压缩算法可以大致分为两类:一类是通用的压缩算法,尽可能地保持了溯源图的信息;另一类与检测和分析算法耦合,使用有较大的局限性,而本文主要分析前者。
通用的压缩算法又可以分为对节点数据的压缩和对边数据的压缩两类,分别如图4和图5所示。基于的节点算法效果浮动较大,在程序初始化比较频繁的场景(如数据分析等)效果较好。为压缩边数据,研究者们先提出了语义保持的不同定义,包括 “因果保持”等与对应的压缩算法。整体而言,由于溯源图中边的基数更大,对边的压缩算法往往整体的压缩率更高。但是,这些通用的压缩方法不能从根本上解决依赖爆炸问题,在处理大规模的、实体间依赖关系复杂的溯源图时作用十分有限。
03威胁检测与分析模块
表1.现有基于系统溯源图的入侵检测系统的分类
溯源图提供了丰富的语义信息,支持多种检测分析方案,如表1所示。这些检测方案考虑了不同的攻击模型,针对不同攻击模型提出来不同的检测模型,大致可以分为几类:
第一类,也是最直观的一种方法是子图匹配,在溯源图中定位攻击行为抽象出的攻击图。准确的图匹配的开销过大,因此研究者提出了几种模糊匹配方法,包括:基于威胁情报的图对齐、基于图嵌入的机器学习匹配等。
第二类方法是用节点标签缓存计算结果,并用标签的传递代替复杂的图计算的 “标签传播(TagPropagation)算法”。这类算法一般使用流式图作为数据模型,避免了大量的数据读写操作,因此整体效率最高, 但也对检测和分析算法作出了更多的限制。
第三类是异常检测模型。已有的溯源图上的异常检测模型一般先寻找局部的异常点,并通过依赖分析关联异常点,从而作出全局的判断。