通过网络级对象依赖关系揭示0Day攻击路径
1. 研究动机
0Day攻击是攻击者和防御者之间信息不对称的结果。赛门铁克研究人员认为,典型的0Day攻击平均隐藏312天才会被觉察。
受到SKRM模型启发,Patrol系统以全局视野来调查在某一个路径上的0Day攻击行为。从攻击者到最终攻击目标的路径,也就是被攻击受控的主机上的一个漏洞攻击利用的序列。这个序列中包含至少一个0Day漏洞攻击利用时,就是一个0Day攻击路径。
一个0Day攻击路径通常包含对应于已知漏洞攻击利用的部分,而普通的IDS设备可以发现非0Day漏洞利用并告警,顺着攻击路径对被检测到的组成部分进行前向或者后向的追踪,则会发现0Day攻击。基于这种思路,识别0Day攻击路径比单独检测0Day攻击利用要切实有效的多。
由于0Day具有未知的特质,因此0Day攻击路径问题实际上是一个网空态势感知问题的实例,本质上是为了打破攻击者和防御者直接的“信息不对称”,即揭示出包含路径上0Day攻击利用上下文环境。
2.方法和模型
AG通过将已发现的漏洞攻击利用关联至通向特定目标对象的攻击序列以生成攻击路径。所得到的攻击路径本质上是相邻漏洞之间因果依赖关系的模型。但是AG无法描述未知漏洞,也就不包含0Day攻击路径。
0Day攻击路径问题的另一个候选方案是告警关联方法。将孤立的告警关联起来,形成潜在的攻击路径。是否能够暴漏0Day攻击路径,取决于是否能够发出告警以指出对0Day漏洞的攻击利用。这种分析方法在很大程度上依赖告警,会在基因上继续此类检测技术的高误报率。
Patrol采用不同的策略:首先尝试构建一个超集的图,识别出隐藏在其中的可疑入侵传播路劲作为候选的0Day攻击路径,然后再在这些路径中识别高度可疑的候选路径。而不是先收集漏洞或者告警信息,然后将它们关联到路径中。
这种思路基于4个关键认知:
(1)作为程序与OS的交互的唯一方式,系统调用被发现是难以避免且攻击中立的。
(2)从系统调用可疑生成网络级的超集图,这个图也是攻击中立的。
(3)超集图本质是一个路径的集合,必然包含0Day攻击利用路径。该集合与AG中的逻辑关联不同。通过合适的方法取出它的子集作为候选的0Day攻击路径。(关键在合适的方法!!!)
(4)候选的0Day攻击路径显露出这些路径上的未知漏洞攻击利用,为识别0Day漏洞攻击利用指明了方向。
Patrol提出从系统调用跟踪数据来构建超集图,即网络级SODG依赖关系图(System Object Dependency Graph,SODG)。
为了构建网络级SODG,首先为每个主机构建SODG,系统调用被解析以生成OS对象及其之间的依赖关系。
主机系统对象依赖关系图
如果第i个主机的系统调用跟踪数据用Σi表示,则该主机的每主机SODG为有向图G(Vi,Ei)。
其中,
Vi为节点的集合,初始化为空集Φ。
Ei为有向边的集合,初试为空集Φ。
如果一个系统调用syscall∈Σi,dep是根据依赖规则从syscall解析出来的依赖关系。
其中dep∈{(src->sink),(src<-sink),(src<->sink)},src和sink是OS对象(主要是一个进程、文件或socket),那么Vi=Vi∪{src,sink},Ei=Ei∪{dep}。dep的开始时间和结束时间继承制syscall的时间戳。
若(a->b)∈Ei且(b->c)∈Ei,那么c的传递依赖于a。
网络级系统对象依赖关系图
如果第i个主机的每个主机SODG表示为G(Vi,Ei),则网络级SODG可以表示为∪G(Vi,Ei)。
Patrol系统将网络级SODG中的可疑入侵传播路径(Suspecious Intrusion Propagation Path,SIPP)识别为候选的零日攻击路径。
虽然SIPP的规模较SODG小,但它描述了几乎所有的0Day攻击路径。0Day攻击路径脱离SIPP的唯一可能是攻击者只对路径上的0Day漏洞进行攻击利用,这是非常罕见的。所以,只要有SIPP存在,其中就会有一个0Day攻击路径。
SIPP是SODG的子图,该子图中所有的对象要么具有来自出发节点的有向边,要么具有指向触发节点的有向边,其中这些触发节点是由于涉及告警而被管理员发现的OS对象,而这些告警是有诸如Snort、tripWire等系统值守已部署的探针所产生的。
Patrol系统提出了一种名为阴影指示器检查的方法来识别SIPP中高度可疑的候选零日攻击路径。
3. 系统设计
Patrol采用模块化设计,第一个组件“系统调用审计和过滤”是动态工作,后续的3个组件(SODG图像生成、SIPP识别、阴影指示检查)均为离线,避免对个别主机造成影响。
3.1 系统调用审计和过滤
系统调用的审计应满足一下要求:
(1)审计的对象是所有存活进程,避免遗漏;
(2)为了识别跨主机的可疑路径,网络范围内的系统调用审计必不可少。在待审计的列表中包含所有主机,并且审计主机之间的socket通信。
(3)经根据进程ID或文件描述符来表示对象并不准确,这些信息可能被系统重用。应当保留所有OS相关的信息,以充分准确地标识操作对象。
(4)Patrol还关注被调用或返回的系统调用时间信息的记录。因为后续需要利用时间关系来确定系统调用是否涉及入侵传播。
然后,系统调用跟踪函数从各个主机被送至中心分析系统。在此之前,需要对系统调用进行过滤,以避免在数据传输和分析时产生任何额外的带宽和成本。通过应用一些过滤规则,削减高度冗余或可能是无恶意的系统调用。通过消减可以加快生成图的速度,降低所生成图的复杂度。
目前的过滤规则主要包括:
(1)动态链接库文件,比如libc.so.*和libm.so.*.
(2)虚拟对象,如stdin/stdout和/dev/null
(3)关于伪终端主从逻辑设备的对象(/dev/ptmx /dev/pts)
(4)与日志相关的对象,如syslod和 /var/log/*等
也允许用户指定更多的过滤规则,但也存在过滤掉恶意对象的更大风险。
此外,Patrol使用一个成为时间窗口的调优参数,对经过滤的系统调用日志发送到分析系统的频率进行调整。
3.2 SODG的生成和串接。
每个主机SODG被串接在一起就构成了网络级SODG。研究发现,作为黏合剂的边通常是基于Socket的通信。因此识别和消减系统调用中涉及的相应套接字对象,可以将两个分离的主机SODG串接在一起。
3.3 可疑入侵传播路径SIPP识别
为了识别SIPP,Patrol系统可能首先使用触发节点作为种子进行后向追踪,因为出发节点可能不是入侵的开始。在很多情况下,IDS存在检测延迟的问题,即告警是入侵起始点的延迟表现。
后向跟踪可以帮助找到起始点,然后就可以使用起始点作为种子进行前向跟踪。
具体说来,后向的依赖关系跟踪被用于识别所有具有直接或传递的有向边指向触发节点的SODG对象,而前向的依赖关系跟踪是找到所有具有来自触发节点的直接或传递的有向边的SODG对象。
Patrol将后向和前向的依赖关系跟踪都实现为广度优先搜索(BFS)算法。
3.4 阴影指示器检查
阴影指示器检查是基于漏洞阴影和阴影指示器的概念。这些概念是基于一个关键的观察:多个漏洞会拥有一些共同的特征。
CWE---列举了693个通用弱点。
CAPE---分类出了400个通用的攻击模式。
漏洞阴影与上述类,但不同之处在于商户共有通用特征的情况之外,还会发现:对一些漏洞的攻击利用往往在SODG图中有相似的特点。
-----------------------------
注1:CWE---常见缺陷列表(Common Weakness Enumeration)是MITRE公司(一个非盈利机构)继CVE(Common Vulnerabilities and Exposures)之后的又一个安全漏洞词典。
注2:CAPEC(Common Attack Pattern Enumeration and Classification)是一种用于攻击预防和检测的语言。
通过对攻击模式的分类与描述,它为安全从业人员提供了一种有用的方式来识别和理解网络威胁。CAPEC使用一种基于面向对象编程的方法来描述攻击方法和技术。该方法使用“攻击模式”的概念,类似于软件设计中的“设计模式”,将常见的安全漏洞分类并描述其技术实现和攻击流程。
CAPEC将攻击模式分为四个不同的级别:
- 攻击模式:用于描述单一攻击方法或技术的基本操作步骤。
- 攻击链:描述由多个攻击模式组成的攻击序列,形成完整的攻击流程。
- 攻击生态系统:描述针对同一目标的多个攻击链。
- 攻击预测:描述可能的未来攻击,以帮助安全团队做出准备。
-----------------------------
4. Patrol 的实现
4.1 在线的系统调用审计
通过一个可加载内核模块实现,监视所有运行中进程的39个系统调用。监视通过Hooking机制完成:模块对所关注的系统调用设置hook,如封装在系统调用socketcall中的套接字相关调用(sys_accept\ sys_sendto)。附加代码放置在挂钩中,用于记录系统调用的参数和返回值,或者保存在系统调用期间访问的操作系统内核数据结构的描述符信息中,如进程对象的任务机构和文件对象的文件结构。
可从描述符中获取OS相关信息,包括进程ID、进程名称、绝对文件路径和inode编号。这些被用于精确的OS对象标识,同时还记录每个系统调用的时间信息,如调用和返回时间。
4.2 离线数据分析
数据分析代码用gawk编写,能够产生dot,兼容格式的出书以用于表示图。在Patrol中图用邻接矩阵表示,需要快速查找判定两个节点之间是否存在边,只用O(1),否则可能需要O(|v|)或O(|e|)。其中v代表节点数,e代表边的数量。
5. 0Day攻击路径的概率识别
5.1 研究动机
Patrol的局限性:候选0Day攻击路径的激增数量和规模。考虑到从入侵告警汇总提取的入侵检测点数量较多,可能导致出现过多的后续0Day攻击路径。
5.2 方法概述
针对数量激增问题,提出一种基于0Day攻击路径识别的概率方法。基本思想是通过结合从各个信息源收集的入侵证据,减少候选0Day攻击路径的数量和大小。
方法分为两个步骤:
(1)建立一个系统层依赖关系图来描述入侵传播。该依赖关系图为系统对象实例依赖关系(SOIDG)。
(2)在SOIDG的基础上建立一个利用入侵证据的贝叶斯网络。基于SOIDG的BN能够计算出系统对象实例被感染的概率。通过依赖关系将高感染率的实例连接起来,可形成一条路径。
SOIDG的依赖关系意味着一种因果关系--- 一个对象的已感染实例可能导致另一个对象的正常实例被感染。BN能够使用概率图建立因果关系模型。因此,可以直接在SOIDG上构造一个BN来对感染因果关系进行建模。
5.3 基于SODG的BN构建问题
(1)如果移除SODG边上的时间标签,SODG就不能表现正确的信息流。
(2)SODG图有可能包含循环,而BN是一种非循环图。
(3)SODG中,一个节点的父节点数目是不受限制的。如果一个系统对象依赖于许多其余对象,那么这个对象将在SODG中得到大量父对象。使用BN时为具有大量父节点的节点指定CPT表是非常困难且不切实际的。
5.4 系统对象实例依赖关系图(SOIDG)
在SOIDG中,每个节点都是一个对象的实例。每个实例都是对象在特定时间点的“版本”。
SOIDG的生成规则:
给定一个依赖关系 src-> sink,其中src是源对象,sink是接收对象,且只有当src是SOIDG中不存在实例的新对象时,才会创建src对象的新实例。与src对象相比,每当出现依赖关系 src-> sink时,应该在SOIDG中添加sink对象的新实例。src与sink对象的处理方式不同,src的感染状态不受依赖关系src-> sink的影响,而可能会影响sink的感染状态,应该为sink创建一个新的实例来反映这种影响。
SOIDG规避了SODG存在的3个问题。
5.5 基于SOIDG的BN和0Day攻击路径识别
BN中直接继承SOIDG的图拓扑结构。必须为每个节点分配CPT表。
经过概率推理,每个节点都得到一个概率。这也就意味着BN能够定量计算每个对象实例被感染的概率。每当加入新的证据时,基于SOIDG的BN将生成一组新的推断概率。
当收集到的证据越多,推断结果就更接近真实情况。