文章目录
一、Mulval谓词
(一)谓词介绍
1.漏洞警告
vulExists(webServer,'CAN-2002-0392', httpd).
表示扫描器发现了机器 web 服务器上的编号为CVE- CAN-2002-0392 的漏洞。漏洞涉及的程序为httpd。
vulProperty('CAN-2002-0392', remoteExploit, privilegeEscalation).
该谓词表示攻击者可以通过远程访问的形式利用该漏洞,漏洞的影响为权限提升。
2.主机配置
networkService(webServer、httpd,TCP,80,apache).
表示程序httpd以用户apache的身份在webserver上运行,并且使用TCP协议在80端口监听。
3.网络配置
HACL(internet,webServer,TCP,80).
谓词表示访问控制列表,表示TCP数据从internet流向webserver的80端口。
4.主体(Principal)
hasAccount(user, projectPC, userAccount).
hasAccount(sysAdmin, webServer, root).
主体绑定将主体符号映射到其在网络主机上的用户帐户。主体绑定部分应该由管理员进行定义。
5.策略
allow(Everyone, read, webPages).
allow(systemAdmin,write, webPages).
在 MulVAL 中,该谓词用来描述哪些主体可以访问哪些数据。禁止任何未明确允许的行为。
6.漏洞利用规则
execCode(P, H, UserPriv).
netAccess(P, H, Protocol, Port).
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 程序所有者的权限。
危害传播规则:
accessFile(P, H, Access, Path) :-
execCode(P, H, Owner),
filePath(H, Owner, Path).
如果攻击者 P 可以使用 Owner 的权限访问计算机 H,那么他可以任意访问 Owner 拥有的文件。
多级网络接入规则:
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。这允许对多主机攻击进行推理,攻击者首先在网络中的一台计算机上获得访问权限,然后从该计算机发起攻击。
二、Mulval自定义规则
除了使用mulval默认的推理规则外,还支持自定义规则。mulval的默认规则可以在生成攻击图的文件夹中找到,默认规则文件为running_rule.p。自定义文件内可以自定义推理规则
根据自定义规则生成攻击图:
graph_gen.sh input.P -v -p -r 自定义规则文件
将自定义规则文件添加到mulval默认规则:
graph_gen.sh input.P -v -p -a 自定义规则文件
参考链接: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
打开pdf或eps文件,查看攻击图
版权归原作者 WHOAMI??? 所有, 如有侵权,请联系我们删除。