攻击图是一种基于模型的网络安全评估技术。它从攻击者的角度出发,在综合分析多种网络配置和脆弱性信息的基础上,找出所有可能的攻击路径,并提供了一种表示攻击过程场景的可视化方法,从而帮助网络安全管理人员直观地理解目标网络内各个脆弱性之间的关系、脆弱性与网络安全配置之间的关系以及由此产生的潜在威胁。基于攻击图模型的网络安全评估技术是在攻击图的基础上进行深入的安全评估建模和分析,给出安全评估的建议。
在攻击者对网络进行渗透的过程中,特定的连续攻击行为可称为一条由攻击者节点到目标节点的攻击路径,而攻击图以图形化的方式展示了网络中所有可被防御方发现的攻击路径。 对目标网络构建攻击图,一方面可以分析从边界节点到需要进行重点保护节点可能的攻击路径,对路径上的高危节点进行重点防御,达到保护重要节点的目的;另一方面可以在攻击发生时实时分析攻击者的攻击能力和推断攻击者的后续攻击目标,以便采取应对和反制措施。
攻击图模型是 Swiler 等人于 1998 1998 1998 年提出的,其目的是为了在网络安全分析中把网络拓扑信息也考虑在内。攻击图的代表性科研成果有 TVA ,NetSPA v2,MulVAL 等原型系统。
攻击图的基本构成:20 世纪 90 年代,Philips 和 Swiler首次提出了攻击图的概念,将其应用于网络脆弱性分析。攻击图是一种有向图,展示了攻击者可能发动的攻击顺序和攻击效果,由顶点和有向边两部分构成。根据攻击图类型的不同,顶点可以表示主机、服务、 漏洞、权限等网络安全相关要素,也可以表示账户被攻击者破解、权限被攻击者获取等网络安全 状态,边用于表示攻击者攻击行为的先后顺序。 在理论上攻击图可以构建完整的网络安全模型,反映网络中各个节点的脆弱性并刻画出攻击者攻陷重要节点的所有途径,弥补了以往技术只能根据漏洞数量和威胁等级评估节点和全网的安全性,而不能根据节点在网络中的位置和功能进行评估的缺陷,因此,攻击图技术很快得到了专家学者的广泛认可。
攻击图的核心—规则与推导:规则和推导是攻击图理论的核心。攻击图规则系统与推导引擎的好坏决定了攻击图生成的好坏。攻击图的生成过程和解决数学推导证明题的过程一样:有初始条件(即输入信息),有公理与定理(即攻击图的规则系统),有要证目标(即攻击目标)。所谓攻击路径就是从“初始条件”到“要证目标”的推导过程,将这个推导过程可视化便成了攻击树;由于推导过程可能有多种可能,正如证明一道数学题可能有多种证明方法,就有多条攻击树,形成了攻击图。攻击图的规则系统就是由许许多多的规则组成,而攻击图的推导引擎依据规则系统自动完成攻击路径的推导。此外,攻击图规则系统决定了该攻击图工具能适用于哪种网络。如使用企业网络的规则系统,则可以适用于企业网络;若使用车联网的规则系统,则可适用于车联网。这也是攻击图理论能适应绝大多数网络形式的原因所在。
状态攻击图由 Sheyner 首先提出 (也有学者认为 Swiler 提出的攻击图概念就是最早的状态攻击图),图中顶点表示主机名、提供的服等网络状态信息,有向边表示状态之间的迁移。下图为状 态攻击图示例,其中,虚线顶点表示网络的初始状态。状态攻击图可以表示为 A G = ( E , V ) AG=(E,V) AG=(E,V),其中, E E E 为边集合,即原子攻击集合,任意边 e ∈ E e\in E e∈E 都表示 全局状态的迁移; V V V 表示状态顶点集合,对于任意 顶点 v ∈ V v\in V v∈V,可以用四元组 < h , s r v , v u l , x >
**解释:**该状态攻击图中,节点表示网络状态,有向边表示状态的迁移。最上方的虚线节点表示网络初始状态,该状态可能迁移到 sshd_bof(0,1)
状态或 Ftp_rhosts(0,2)
状态,即“攻击者通过主机 1
上的 sshd
漏洞从主机 0
上利用远程缓冲区溢出攻击获得主机 1
上的 user
权限”和“攻击者通过主机 2
上的 ftp_rhosts
漏洞建立从主机 0
到主机 2
上的远程登陆可信关系”(以下不再分析具体状态节点值含义,可参考下面的原子攻击对照表);若网络迁移到了 sshd_bof(0,1)
状态,则可能从 sshd_bof(0,1)
状态继续迁移到 Ftp_rhosts(1,2)
、Ftp_rhosts(0,2)
或 Ftp_rhosts(1,1)
三个状态;若网络迁移到了 Ftp_rhosts(0,2)
状态,则可能继续迁移到 rsh(1,2)
、Ftp_rhosts(1,1)
或 Ftp_rhosts(0,1)
状态;若网络迁移到了 rsh(1,2)
状态,则可能继续迁移到 Ftp_rhosts(2,1)
或 Ftp_rhosts(0,1)
状态;若网络迁移到了 Ftp_rhosts(0,1)
状态,则可能继续迁移到最终的 Local_buf(2)
状态。这张状态攻击图包含了目标网络可能处于的所有脆弱性状态和所有可能的状态转移,但由于缺少具体的状态转移条件和攻击路径,所以不够直观。
以下两表为属性对照表和原子攻击对照表,此处的状态攻击图示例及之后的属性攻击图示例均适用。
属性攻击图是为解决状态攻击图的属性爆炸问题而提出,将网络中的安全要素作为独立的属性 顶点,同一主机上的同一漏洞仅对应图中的一个属性顶点,因此,属性攻击图相对于状态攻击图生成 速度快,结构简单,对大规模网络有更好的适应性。
属性攻击图通常包含 2 2 2 类顶点和 2 2 2 类边。 2 2 2 类 顶点分别表示漏洞和条件,条件顶点表明攻击者当 前所具有的权限;漏洞顶点表示存在漏洞的服务和 通过利用该漏洞攻击者可以获取的权限。边分为 2 2 2 种,由条件指向漏洞的边表示漏洞的前置条件,由漏洞指向条件的边表示漏洞的后置条件。对于属性攻击图,原子攻击节点即漏洞顶点。对于攻击图中任意一个漏洞顶点,当满足全部前置条件时该漏洞 才可能被成功利用;而对于任意一个条件顶点,只要将其作为后置条件的任意一个漏洞可以被成功利用,都认为该条件可被满足。因此属性攻击图通 常可表示为 A G = ( C , V , E ) AG=(C,V,E) AG=(C,V,E),其中, C C C 表示条件集合 (包括所有初始条件、前置条件和后置条件), V V V 表 示漏洞集合, E E E 表示边集合。 A G AG AG 满足以下条件: 对于 ∨ q ∈ V \vee q\in V ∨q∈V, P r e ( q ) Pre(q) Pre(q) 为前置条件集合, P o s t ( q ) Post(q) Post(q) 为后置条件集合,则有 ( ∧ P r e ( q ) ) → ( ∧ P o s t ( q ) ) (\wedge Pre(q))\to (\wedge Post(q)) (∧Pre(q))→(∧Post(q)),表明满足 所有前置条件时可完成漏洞利用,从而满足该漏洞的所有后置条件。下图为属性攻击图示例,其中,椭圆顶点为条件顶点,矩形顶点为漏洞顶点。
目前,属性攻击图在风险评估、告警关联、 动态评估等方面已经有了广泛的应用。
**解释:**该属性攻击图中椭圆节点为条件节点,矩形节点是漏洞(利用)节点。其中默认属性 user(0)
:“攻击者在主机 0
上有 user
权限”未显式表示。以下将从最左侧的攻击路径对该属性攻击图进行详细解释。攻击者初始时拥有 user(0)
、Ftp(0,1)
、sshd(0,1)
和Ftp(0,2)
四个属性(或称条件),即“攻击者在主机 0
上有 user
权限”、“从主机 0
上可以访问到主机 1
上的 ftpd
服务”、“从主机 0
上可以访问到主机 1
上的 sshd
服务”和“从主机 0
上可以访问到主机 2
上的 ftpd
服务”四个条件(以下不再分析具体属性节点值含义,可参考上面的属性对照表)。同时利用条件 user(0)
、Ftp(0,1)
可完成 Ftp_rhosts(0,1)
漏洞利用,即“攻击者通过主机 1
上的 ftp_rhosts
漏洞建立从主机 0
到主机 1
上的远程登陆可信关系”(以下不再分析具体漏洞节点值含义,可参考上面的原子攻击对照表),攻击完成后可获得 trust(0,1)
属性。利用刚刚获得的条件 trust(0,1)
可完成 rsh(0,1)
漏洞利用,从而获得 user(1)
属性。另外,也可以通过同时利用条件 user(0)
、sshd(0,1)
完成 sshd_bof(0,1)
漏洞利用得到 user(1)
属性。之后,同时利用条件 Ftp(1,2)
、user(1)
可完成 Ftp_rhosts(1,2)
漏洞利用从而获得 trust(2,1)
属性。利用刚才获得的条件 trust(2,1)
可完成 rsh(1,2)
漏洞利用,从而获得 user(2)
属性,从图上可以看出该属性还可以通过另一条攻击路径得到,这里不加赘述。利用刚才获得的条件 user(2)
可完成 local_buf(2)
漏洞利用,从而获得最终的 root(2)
属性,这也是攻击者的攻击目标。该属性攻击图直观展示了目标网络中所有可能的攻击路径,以及攻击路径中的攻击条件和具体的原子攻击,所以非常直观易懂,易于使用。
攻击图反映了网络内可能的攻击路径,而判断图中哪些路径更有可能被攻击者使用是攻击图的一个重要功能。贝叶斯网络是一种非常有效的概率推理模型,由 Pearl 在 1988 年首先提出。在贝叶斯网络中,初始节点被赋予概率值,有向边表示了节点之间的因果关系,根据初始节点的概率值和节点间的因果关系可推导出后续所有节点的条件概率,因此,目前对攻击路径发生概率和节点被攻陷概率的计算研究大多基于贝叶斯网络进行。通常将基于贝叶斯网络的攻击图称为贝叶斯攻击图。
目前计算漏洞被利用概率一般用通用漏洞评分系统 ( CVSS, common vulnerability scoring system ) 评分计算得到。CVSS,全称 Common Vulnerability Scoring System,即“通用漏洞评分系统”,是一个 “行业公开标准,其被设计用来评测漏洞的严重程度,并帮助确定所需反应的紧急度和重要度” 。CVSS 是安全内容自动化协议(SCAP)的一部分,通常 CVSS 同 CVE 一同由美国国家漏洞库(NVD)发布并保持数据的更新。
CVSS 中基本评分 ( BM,base metrics) 部分描述的是脆弱点的基本属性,其中包含 6 6 6 个指标,前 3 3 3 个指标 是 AV ( access vector ) 、AC ( access complexity ) 、AU ( authentication ) ,用于描述脆弱点的可用性。 3 3 3 个 CVSS 指标的度量值根据可利用性分为 3 3 3 个等级: Low、Mid、High。分值越高,该脆弱点越容易被利用。由低到高,AV 值依次为 0. 359、0. 646、1. 0; AC 值依次为 0. 35、0. 61、0. 71; AU 值依次为 0. 45、0. 56、 0. 704。
在 CVSS 中,脆弱点的可用性指标定义为 E = 20 V C U ( 0 ≤ E ≤ 10 ) E=20VCU(0\le E\le 10) E=20VCU(0≤E≤10)。 E x Ex Ex 的值越小,表示原子攻击的难度越大。由于可用性与攻击难度成反比关系,因此根据这 3 3 3 个指标计算原子攻击的难度,用 D D D 表示相应原子攻击的难度,其值越大攻击难度越大,计算公式为
D = 1 V C U , D ≥ 1 D=\frac{1}{VCU},D\ge 1 D=VCU1,D≥1
相对于已公开漏洞,0day漏洞和社会工程学漏 洞具有极强的不可预知性,即在攻击者利用这 2 种 漏洞进行攻击之前防御方很难预知到这 2 种漏洞的 存在并加以针对性防范。而在现在的网络攻击,特 别是有组织、有针对性的 APT 攻击中,攻击者往往 大量使用 0day 漏洞和社会工程学漏洞对目标网络 实施渗透、窃密和破坏等行为。
以往的攻击图技术主要关注已知的技术漏洞,0day 漏洞和社会工程学漏洞由于其不可预知性,以及社会工程学漏洞受非技术因素影响太大的原因,很难结合到攻击图中。而国内外大量的 APT 攻击实例证明,利用这 2 种漏洞是攻击者攻克目标网络的 最有效手段。
为解决以往的攻击图技术没有考虑 0day 漏洞的问题,有学者提出了结合 0day 漏洞的攻击图方案,假定网络内所有的远程服务都 可能存在 0day 漏洞,根据攻击者攻陷目标节点所 需要利用的最小 0day 漏洞数量评估网络安全性, 并陆续在此基础上提出了评估设备和服务的多样 性以及已知漏洞和非必要服务对网络安全性的影 响的方法。
为将社会工程学漏洞作为基于攻击图的网络风险评估的参考要素,有学者提出一种基于攻击图的社会工程学威胁分析方法,通过总结已知的社会工程攻击知识、对社会工程攻击方法进行聚类和模式识别、分析相关权限,将社会工程漏洞作 为漏洞顶点加入到属性攻击图中,在分析时将其与技术漏洞同等对待。
MulVAL ( multihost, multistage, vulnerability analysis) 是由普林斯顿大学的 Ou 等开发的 Linux 平台开源攻击图生成工具,基于 Nessus 或 OVAL 等漏洞扫描器的漏洞扫描结果、网络节点的配置信息以及其他相关信息,使用 graphviz 图片生成器绘制攻击图。可以用 pdf 和 txt 格式的输出文件 描述攻击图。对于具有 n n n 个节点的网络其复杂度为 O ( n 2 ) O(n^2) O(n2)。由于是开源工具,且相对于其他工具有更好 的准确度和可扩展性,因此,很多理论研究成果都选择 MulVAL 进行可行性验证和性能测试。
MulVAL 使用 Datalog
语言作为模型语言(包括漏洞描述,规则描述,配置描述,权限系统等)。其将 Nessus/OVAL
扫描器报告、防火墙管理工具提供的网络拓扑信息、网络管理员提供的网络管理策略等转化为 Datalog
语言的事实作为输入,交由内部的推导引擎进行攻击过程推导。推导引擎由 Datalog
规则组成,这些规则捕获操作系统行为和网络中各个组件的交互。最后由可视化工具将推导引擎得到的攻击树可视化形成攻击图。
MulVAL 分析的输入是,漏洞警告:报告了哪些漏洞,它们在目标网络机器上存在吗?主机配置:目标网络的主机上运行的是什么软件和服务,它们是如何配置的?网络配置:目标网络的网络路由器和防火墙是怎么配置的?主体:目标网络的用户有谁?交互:所有这些组件如何交互的模型是什么?策略:目标网络允许哪些访问?
漏洞警告:开放式脆弱性评估语言_(OVAL)_规范了如何识别计算机系统上存在的漏洞。OVAL 扫描器接受这种形式化的漏洞定义,并测试机器的易受攻击软件。我们将测试结果转换为Datalog 子句:vulExists(webServer, 'CAN-2002-0392', httpd).
。 也就是说,扫描器发现了机器 web
服务器上的 CVE ID
为 CAN-2002-0392
的漏洞。该漏洞涉及服务器程序 httpd
。该漏洞的影响,即它如何被利用以及后果是什么可以在 NVD
等漏洞数据库中得到,实例化为Datalog 子句:vulProperty('CAN-2002-0392', remoteExploit, privilegeEscalation).
。也就是说,此漏洞使远程攻击者能够使用程序的所有权限执行任意代码。
主机配置:OVAL 扫描器可以定向到主机上提取配置参数。例如,它可以输出服务程序的信息(端口号、特权等)。我们把输出转换成 Datalog 子句,如 networkService(webServer、httpd,TCP,80,apache).
。也就是说,程序 httpd
作为用户 apache
在机器 web
服务器上运行,并使用 TCP
协议在端口 80
上侦听。
**网络配置:**多模型网络(路由器和防火墙)配置为抽象主机访问控制列表_(HACL)_。此信息可由防火墙管理工具提供。下面是一个允许 TCP
流量从 internet
流向 Web
服务器上端口 80
的 HACL
条目示例:HACL(internet,webServer,TCP,80).
。
**主体:**主体绑定将主体符号映射到其在网络主机上的用户帐户。管理员应定义主体绑定,如:hasAccount(user, projectPC, userAccount).
hasAccount(sysAdmin, webServer, root).
。
**互动:**在多级攻击中,漏洞和操作系统的语义决定了对手在每个阶段的选择。我们将它们编码为 Horn子句(即Prolog),其中第一行是结论,其余行是启用条件。例如:
execCode(Attacker, Host, Priv) :-
vulExists(Host, VulID, Program),
vulProperty(VulID, remoteExploit, privEscalation),
networkService(Host, Program, Protocol, Port, Priv),
netAccess(Attacker, Host, Protocol, Port),
malicious(Attacker).
也就是说,如果在主机 Host
上运行的程序包含(vulExists
)一个可远程利用(remoteExploit
)的漏洞(VulID
),该漏洞的影响是权限提升(privEscalation
),则错误程序 Program
在权限 Priv
下运行并监听 Protocol
和 Port
,攻击者(Attacker
)可以通过网络访问服务(netAccess
),则攻击者可以在权限 Priv
下的机器 Host
上执行任意代码(execCode(Attacker, Host, Priv)
)。此规则可应用于任何与模式匹配的漏洞。
**策略:**在 MulVAL 中,一种策略描述哪些主体可以访问哪些数据。禁止任何未明确允许的行为。如:allow(Everyone, read, webPages).
allow(systemAdmin, write, webPages).
。
**分析框架:**由于 Datalog 是 Prolog 的一个子集,因此编码形成的 Datalog 信息可以直接加载到 Prolog 环境中并执行。MulVAL 使用 XSB 环境,因为它支持 Prolog 程序的表格式执行。Tabling 是一种动态编程的形式,可以避免重新计算先前计算的事实。此外,tabling 还提供了完整的声明式逻辑编程,因为规则的顺序不会影响执行的结果。框架如图所示。OVAL 扫描器在每台计算机上运行,并输出漏洞报告和相关配置参数。扫描器中的元组、网络配置(表示为 HACL)、演绎规则和管理员定义的安全策略被加载到XSB环境中。然后可以进行 Prolog 查询来搜索违反策略的情况。MulVAL可以生成一个详细的攻击树。
MulVAL 中的推理规则声明为 Datalog 子句。在 Datalog 格式中,变量是以大写字母开头的标识符,常数是以小写字母开头的。设为文字,MulVAL 中的句子表示为 Horn 子句,如:
L0 :- L1,...,Ln
在语义上,它意味着如果 L1,...,Ln
是真的,那么 L0
也是真的。子句 :-
符号左边叫头,右边叫正文。带有空正文的子句称为事实。带有非空主体的子句称为规则。
MulVAL 推导规则规定了不同类型的漏洞利用、危害传播和多跳网络访问的语义。MulVAL 规则经过精心设计,以便将有关特定漏洞的信息分解到从 OVAL 和 ICAT 生成的数据中。交互规则描述了一般攻击方法,而不是特定的漏洞。因此,即使经常报告新的漏洞,也无需频繁更改规则。
execCode(P, H, UserPriv)
表示主体P可以在计算机 H
上以权限 userpriv
执行任意代码。netAccess(P, H, Protocol, Port)
表示主体 P
可以通过协议 Protocol
将数据包发送到计算机 H
上的端口 Port
。
漏洞的效果分类表明了如何利用它以及其后果。第一节已经看到了远程利用服务程序的规则。
execCode(Attacker, Host, Priv) :-
vulExists(Host, VulID, Program),
vulProperty(VulID, remoteExploit, privEscalation),
networkService(Host, Program, Protocol, Port, Priv),
netAccess(Attacker, Host, Protocol, Port),
malicious(Attacker).
也就是说,如果在主机Host上运行的程序包含(vulExists
)一个可远程利用(remoteExploit
)的漏洞(VulID
),该漏洞的影响是权限提升(privEscalation
),则错误程序 Program
在权限 Priv
下运行并监听 Protocol
和 Port
,攻击者(Attacker
)可以通过网络访问服务(netAccess
),则攻击者可以在权限 Priv
下的机器 Host
上执行任意代码(execCode(Attacker, Host, Priv)
)。此规则可应用于任何与模式匹配的漏洞。
下面是客户端程序的远程攻击的攻击规则。
execCode(Attacker, Host, Priv) :-
vulExists(Host, VulID, Program),
vulProperty(VulID, remoteExploit, privEscalation),
clientProgram(Host, Program, Priv),
malicious(Attacker).
规则正文指定:1)程序易受远程攻击;2)程序是具有权限Priv的客户端软件;3)攻击者是来自可能存在恶意用户的网络部分的某个主体。利用此漏洞的后果是攻击者可以使用权限 Priv
执行任意代码。
利用本地权限提升漏洞的规则如下:
execCode(Attacker, Host, Owner) :-
vulExists(Host, VulID, Prog),
vulProperty(VulID, localExploit, privEscalation),
setuidProgram(Host, Prog, Owner),
execCode(Attacker, Host, SomePriv),
malicious(Attacker).
对于此攻击,前提条件执行代码要求攻击者首先具有对计算机主机 Host
的某些访问权限。利用此漏洞的后果是,攻击者可以获得 setuid
程序所有者的权限。
MulVAL 的一个重要特性是能够对多级攻击进行推理。成功应用攻击后,推理引擎必须发现攻击者如何进一步危害系统。
例如,下面的规则说明,如果攻击者 P
可以使用 Owner
的权限访问计算机 H
,那么他可以任意访问 Owner
拥有的文件。
accessFile(P, H, Access, Path) :-
execCode(P, H, Owner),
filePath(H, Owner, Path).
另一方面,如果攻击者可以修改 Owner
目录下的文件,他可以获得 Owner
的权限。这是因为木马可以通过修改的执行二进制文件注入,然后所有者可以执行:
execCode(Attacker, H, Owner) :-
accessFile(Attacker, H, write, Path),
filePath(H, Owner, Path),
malicious(Attacker).
网络文件系统一些多级攻击也利用了正常的软件行为。例如,通过与系统管理员的交谈, NFS文件共享系统在许多组织中得到了广泛的应用,并导致了许多入侵。一种情况是,攻击者在可以与NFS服务器通信的计算机上获得根访问权限。根据文件服务器的配置,攻击者可能能够访问服务器上的任何文件。
accessFile(P, Server, Access, Path) :-
malicious(P),
execCode(P, Client, root),
nfsExportInfo(Server, Path, Access, Client),
hacl(Client, Server, rpc, 100003)).
hacl(Client, Server, rpc, 100003)
是主机访问控制列表(HALC
)中的一个条目,它指定计算机客户机可以通过 NFS(一种编号为100003的RPC(远程过程调用)协议)
与服务器通信。
netAccess(P, H2, Protocol, Port) :-
execCode(P, H1, Priv),
hacl(H1, H2, Protocol, Port).
如果主体 P
以某种权限 Priv
访问 H1
机器,并且网络允许 H1
通过协议 Protocol
和端口 Port
访问 H2
,那么主体 P
可以通过协议 Protocol
和端口 Port
访问主机 H2
。这允许对多主机攻击进行推理,攻击者首先在网络中的一台计算机上获得访问权限,然后从该计算机发起攻击。谓词 hacl
表示主机访问控制列表(HACL
)中的一个条目。
主机访问控制列表指定网络允许的主机之间的所有访问。它由以下形式的条目集合组成:
hacl(Source, Destination, Protocol, DestPort).
包流由防火墙、路由器、交换机和网络拓扑的其他方面控制。HACL
是对这些元素的配置效果的抽象。在涉及使用 DHCP
协议(特别是在无线网络中)的动态环境中,防火墙规则可能非常复杂,并且可能受到网络状态、用户向中央身份验证服务器进行身份验证的能力等的影响。在这种环境中,要求系统管理员手动提供所有 HACL
规则。我们设想,像智能防火墙这样的自动工具可以为我们的分析自动提供 HACL
列表。
安全策略指定哪个主体可以访问哪些数据。每个主体和数据都有一个符号名,通过第一节中讨论的绑定信息映射到一个具体的实体。每个安全策略声明的格式如下:
allow(Principal, Access, Data).
参数可以是常量或变量(变量以大写字母开头,可以与任何常量匹配)。以下是一个示例策略:
allow(Everyone, read, webPages).
allow(user, Access, projectPlan).
allow(sysAdmin, Access, Data).
策略规定任何人都可以读 webPages
,user
可以任意访问 projectPlan
。sysAdmin
可以任意访问任意 Data
。禁止任何未明确允许的行为。
主体绑定将主体符号映射到其在网络主机上的用户帐户。例如:
hasAccount(user, projectPC, userAccount).
hasAccount(sysAdmin, webServer, root).
数据绑定将数据符号映射到计算机上的路径。例如:
dataBind(projectPlan, workstation, '/home').
dataBind(webPages, webServer, '/www').
绑定信息是手动提供的。
分析算法分为两个阶段:攻击模拟和策略检查。在攻击模拟阶段,导出了多级多主机攻击可能导致的所有数据访问。这是通过以下 Datalog
程序实现的。
access(P, Access, Data) :-
dataBind(Data, H, Path),
accessFile(P, H, Access, Path).
也就是说,如果数据 Data
存储在机器 H
的 Path
路径下,并且主体 P
可以访问 Path
下的文件,那么 P
可以访问 Data
。攻击模拟发生在 accessFile
的派生过程中,它涉及到 Datalog 交互规则和 MulVAL 各个组件的数据元组输入。对于数据日志程序,最多可以导出多项式数量的事实子句。由于 XSB 的 tabling 机制保证每个事实只计算一次,所以攻击模拟阶段是多项式的。
在策略检查阶段,将攻击模拟阶段输出的数据访问元组与给定的安全策略进行比较。如果策略不允许访问,则检测到冲突。下面的 Prolog
程序执行策略检查。
policyViolation(P, Access, Data) :-
access(P, Access, Data),
not allow(P, Access, Data).
这不是一个纯 Datalog
程序,因为它使用了否定。但是在这个程序中使用否定有一个很好的语义基础。有充分理由否定的 Datalog
程序的复杂性是输入大小的多项式。实际上,策略检查算法在 XSB 中运行得非常高效。
MulVAL 算法中的两阶段分离允许我们使用比 Datalog 更丰富的策略语言,而不影响攻击模拟阶段的复杂性。MulVAL 推导系统支持通用 Prolog 作为策略语言。如果需要更丰富的策略规范,攻击模拟仍然可以有效地执行,生成的数据访问元组可以发送到策略解析器,后者可以有效地处理更丰富的策略规范。
示例网络结构:
输入文件:Datalog
的事实子句。
attackerLocated(internet).
attackGoal(execCode(workStation,_)).
hacl(internet, webServer, tcp, 80).
hacl(webServer, _, _, _).
hacl(fileServer, _, _, _).
hacl(workStation, _, _, _).
hacl(H,H,_,_).
/* configuration information of fileServer */
networkServiceInfo(fileServer, mountd, rpc, 10005, root).
nfsExportInfo(fileServer, '/export', _anyAccess, workStation).
nfsExportInfo(fileServer, '/export', _anyAccess, webServer).
vulExists(fileServer, vulID, mountd).
vulProperty(vulID, remoteExploit, privEscalation).
localFileProtection(fileServer, root, _, _).
/* configuration information of webServer */
vulExists(webServer, 'CVE-2002-0392', httpd).
vulProperty('CVE-2002-0392', remoteExploit, privEscalation).
networkServiceInfo(webServer , httpd, tcp , 80 , apache).
/* configuration information of workStation */
nfsMounted(workStation, '/usr/local/share', fileServer, '/export', read).
生成攻击图:Graphviz 工具生成的可视化属性攻击图。圆形节点是原子攻击节点,方形节点是初始条件节点,菱形节点是中间条件节点。
TVA (topological vulnerability analysis) 是一种具有多项式级时间复杂度的攻击图生成工具,可用于对网络渗透进行自动化分析,其输出结果为由攻击步骤和攻击条件构成的状态攻击图。该工具需要通过手工输入建立规则库。同时该工具未能解决状态攻击图固有的状态爆炸问题,在复杂网络中生成的攻击图极大,不利于分析。复杂度为 O ( n 2 ) O(n^2) O(n2)。
示例网络结构:
生成攻击图:状态攻击图
**NetSPA (network security planning architecture) **由 Lippmann 提出,是一种基于图论的攻击图生成工具。目前,该工具已得到美国政府支持,成为一款商业软件。该工具使用防火墙规则和漏洞扫描 结果构建网络模型,并依此计算网络可达性和攻击 路径。由于缺少攻击模式学习功能,其规则库的建立需要依赖于手工输入。生成的攻击图中包含环 路,不利于使用者理解。复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)。由于展示的攻击图不够直观,在 NetSPA 的基础上又推出了 NAVIGATOR 和 GARNET 两款增强图像显示效果的工具。
示例网络结构:
生成攻击图:属性攻击图
Happy!