当前位置:   article > 正文

Mulval推理规则介绍以及攻击图生成实例

mulval


一、Mulval谓词

(一)谓词介绍

1.漏洞警告

vulExists(webServer, 'CAN-2002-0392', httpd).
  • 1

表示扫描器发现了机器 web 服务器上的编号为CVE- CAN-2002-0392 的漏洞。漏洞涉及的程序为httpd。

vulProperty('CAN-2002-0392', remoteExploit, privilegeEscalation).
  • 1

该谓词表示攻击者可以通过远程访问的形式利用该漏洞,漏洞的影响为权限提升。

2.主机配置

networkService(webServer、httpd,TCP,80,apache).
  • 1

表示程序httpd以用户apache的身份在webserver上运行,并且使用TCP协议在80端口监听。

3.网络配置

HACL(internet,webServer,TCP,80).
  • 1

谓词表示访问控制列表,表示TCP数据从internet流向webserver的80端口。

4.主体(Principal)

hasAccount(user, projectPC, userAccount).
hasAccount(sysAdmin, webServer, root).
  • 1
  • 2

主体绑定将主体符号映射到其在网络主机上的用户帐户。主体绑定部分应该由管理员进行定义。

5.策略

allow(Everyone, read, webPages).
allow(systemAdmin, write, webPages).
  • 1
  • 2

在 MulVAL 中,该谓词用来描述哪些主体可以访问哪些数据。禁止任何未明确允许的行为。

6.漏洞利用规则

execCode(P, H, UserPriv).
netAccess(P, H, Protocol, Port).
  • 1
  • 2

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).
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果在主机 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
  • 3
  • 4
  • 5

规则正文指定: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).
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

对于此攻击,前提条件执行代码要求攻击者首先具有对计算机主机 Host 的某些访问权限。利用此漏洞的后果是,攻击者可以获得 setuid 程序所有者的权限。

危害传播规则:

accessFile(P, H, Access, Path) :- 
	execCode(P, H, Owner), 
	filePath(H, Owner, Path).
  • 1
  • 2
  • 3

如果攻击者 P 可以使用 Owner 的权限访问计算机 H,那么他可以任意访问 Owner 拥有的文件。

多级网络接入规则:

netAccess(P, H2, Protocol, Port) :- 
	execCode(P, H1, Priv), 
	hacl(H1, H2, Protocol, Port).
  • 1
  • 2
  • 3

如果主体 P 以某种权限 Priv 访问 H1 机器,并且网络允许 H1 通过协议 Protocol 和端口 Port 访问 H2,那么主体 P 可以通过协议 Protocol 和端口 Port 访问主机 H2。这允许对多主机攻击进行推理,攻击者首先在网络中的一台计算机上获得访问权限,然后从该计算机发起攻击。

二、Mulval自定义规则

除了使用mulval默认的推理规则外,还支持自定义规则。mulval的默认规则可以在生成攻击图的文件夹中找到,默认规则文件为running_rule.p。自定义文件内可以自定义推理规则

根据自定义规则生成攻击图:

graph_gen.sh input.P -v -p -r 自定义规则文件
  • 1

将自定义规则文件添加到mulval默认规则:

graph_gen.sh input.P -v -p -a 自定义规则文件
  • 1

参考链接:https://people.cs.ksu.edu/~xou/argus/software/mulval/readme.html

三、Mulval实战

Mulval的输入文件为input.p,而输入文件是根据系统的漏洞信息得到的。首先介绍一下Mulval的文法规则。
输入文件首先要定义攻击者的位置(attackerLocated)以及攻击者目标(attackGoal);接着要定义访问控制列表,也就是说在这个系统中,哪些设备能实现通信,这一部分是由谓词hacl()来实现的;最后要根据漏洞信息对设备和漏洞进行配置。这种配置的实现通过谓词networkServiceInfo(),vulExists(),vulProperty()实现。后面会结合例子讲解谓词的作用。(格式并不绝对,需要根据系统具体的情况判断使用哪种的谓词)。

漏洞信息表如下:
在这里插入图片描述

对应上面的漏洞信息表,攻击者所处位置为Compromised Computer,攻击目标为Historian,主机访问列表hacl()直接对照着设备访问关系填写就可以了,后面空着的是服务,端口。networkServiceInfo()表示设备上运行这哪些服务。vulExists()表示设备运行的服务中存在着那些漏洞。vulProperty()表示漏洞会产生哪些影响。在该例子中都按照权限提升(privEscalation)设置。漏洞产生的影响是有很多种的,但是最常见的就是权限提升和DOS,这一部分可以对照系统需求来修改。

输入文件input.P如下:
在这里插入图片描述

Mulval生成的攻击图:

得到输入文件input.P后,进入输入文件存放的文件夹内,执行如下指令,生成攻击图:

graph_gen.sh input.P -v -p
  • 1

打开pdf或eps文件,查看攻击图
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/203493
推荐阅读
相关标签
  

闽ICP备14008679号