MulVAL攻击图的推理规则

 
 
MulVAL ( multihost, multistage, vulnerability analysis) 是由普林斯顿大学的 Ou 等开发的 Linux 平台开源攻击图生成工具,基于 Nessus 或 OVAL 等漏洞扫描器的漏洞扫描结果、网络节点的配置信息以及其他相关信息,使用 graphviz 图片生成器绘制攻击图。可以用 pdf 和 txt 格式的输出文件描述攻击图。由于是开源工具,且相对于其他工具有更好 的准确度和可扩展性,因此,很多理论研究成果都选择 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-20020392',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的推导系统

MulVAL 中的推理规则声明为 Datalog 子句。在 Datalog 格式中,变量是以大写字母开头的标识符,常数是以小写字母开头的。设为文字,MulVAL 中的句子表示为 Horn 子句,如

L0 :- L1,...,Ln

在语义上,它意味着如果 L1,...,Ln 是真的,那么 L0 也是真的。子句 :- 符号左边叫头,右边叫正文。带有空正文的子句称为事实。带有非空主体的子句称为规则。
 

推导规则

漏洞利用规则

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 作为策略语言。如果需要更丰富的策略规范,攻击模拟仍然可以有效地执行,生成的数据访问元组可以发送到策略解析器,后者可以有效地处理更丰富的策略规范。

posted on   Mario24678  阅读(1409)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示