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

MulVAL攻击图的推理规则的更多相关文章

  1. 攻击图生成工具mulval的安装和配置

    https://doc.mbalib.com/view/8620168b35e50fbe9b005fee33c192ad.html http://www.bingbig.com/227.html

  2. web常见攻击

    DoS和DDoS攻击 DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击.其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带 ...

  3. < APT 攻击>看起来是 .PPT 附件,竟是 .SCR !!

    趋势科技以前在2013年下半年度目标攻击综合报告里指出,发现了好几起APT攻击-高级持续性渗透攻击 (Advanced Persistent Threat, APT) /目标攻击相关的攻击活动. 趋势 ...

  4. Web常见几种攻击与预防方式

    DoS和DDoS攻击 DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击.其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带 ...

  5. Scyther攻击输出图的解释(之二)

    下面对 Needham-Schroeder 协议形式化分析 的攻击输出图 做一个解释: Needham-Schroeder使用ns3表示, ns3 协议形式化描述结果如下: /*  * Needham ...

  6. Scyther GUI 攻击输出图的解释

    1.在声明事件的安全属性的时候也就是整个过程要验证的 对象: Scythe 的安全属性  分为下面几种: Secrecy: 表示数据传输过程中是安全的,即使通过不信任的网络传也不能被攻击者获得 SKR ...

  7. 常见Web攻击及解决方案

    DoS和DDoS攻击 DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击.其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带 ...

  8. HTML5 App的代码注入攻击

    原文链接 摘要 基于HTML5的手机app(译者注:以下简称HTML5 app)越来越流行了, 在大多数情况下它比native应用更容易适配不同的移动操作系统.它开发起来很方便,可以使用标准的web技 ...

  9. Web安全

    随着Web2.0.网络社交等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中,越来越多的应用都架设在Web平台上.Web业务的迅速发展吸引了黑客们的强烈关注,接踵 ...

  10. 教你用笔记本破解无线路由器password

    近期非常多人问我怎么破解WiFipassword…看来大家都对免费的东西比較有兴趣.要么也可能是我太招摇了…囧… 好吧,我就写篇小小的教程,看完后,你应该可以破解大部分无线路由器password了,写 ...

随机推荐

  1. 96、nacos大量日志

    问题描述:access 日志大量打印,相关 Issue 点击这里.主要表现是: {nacos.home}/logs/access_log.2019-xx-xx.log类似格式文件名的日志大量打印,而且 ...

  2. R包本地安装方法

    问题 需要安装一个R的测试包 但是这个包没有在cran中 也没有在biomanager中 于是决定使用devtools-github安装 遇到问题 无法下载github上的R包 策略 使用local方 ...

  3. VS2022 17.1.6在windows10下打开winform设计器报timed out while connecting to named pipe错误

    .net 6.0的项目,vs2022 17.1.6在windows10下打开winform设计器报timed out while connecting to named pipe错误,同样的项目在wi ...

  4. Mac下MySQL下载及安装

    ​ 1在浏览器当中输入地址: https://downloads.mysql.com/archives/community/​ 1. 1.1,选择mysql版本,它会自动对应某个版本macOS,1.2 ...

  5. Win10安装离线.NET3.5流程

    二.安装步骤 1.将下载的安装包放到c盘windows目录下(根据需要放置) 2.用命令行安装 以管理员身份打开cmd,输入以下命令(c:\windows即文件放置目录,即上一步放置目录) dism. ...

  6. k8s暂停一个pod

    模拟k8s暂停一个服务:kubectl scale --replicas=0 deployment/[deployment]  -n [namespace](如要恢复设置参数--replicas=1即 ...

  7. ubuntu 查看已安装软件命令

    一.查看所有已安装软件包 dpkg -l 二.过滤安装包 yang@ubuntu:~/ansible$ dpkg -l | grep vim ii vim 2:8.1.2269-1ubuntu5.9 ...

  8. 浅谈Java线程池的概念、创建与执行

    转': 浅谈Java线程池的概念.创建与执行 如果使用 newCachedThreadPool   线程池的实例: ExecutorService executor = Executors.newCa ...

  9. NSAttributedString 多格式字符串

    NSString *aString = @"哈哈标题(必填)"; NSRange range = NSMakeRange(4, 4); //当然也可以查找NSRange range ...

  10. UML 组成 1

    常用关系: 关联关系使用一条直线表示,比如  A与B关联 用于描述不同类的对象之间的结构关系,将多个类的实例联系在一起 是一种静态关系,基本与程序的运行没有关系 比如,部门与员工的关系,就是关联关系 ...