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

最新文章

  1. PHP 返回13位时间戳
  2. NTDLL未文档化函数RtlGetNtVersionNumbers获取操作系统版本
  3. SQL Server 2008 R2——T-SQL 存储过程 返回表
  4. Java_过滤字符串中非汉子的内容
  5. 自学 iOS – 三十天三十个 Swift 项目
  6. GitHub在Visual Studio 2015中获得TFS/VSO同等地位
  7. Oracle错误:ORA-01033
  8. (四)java程序基本组成
  9. Collaborative filtering
  10. core--线程状态
  11. C#常量字段
  12. 04_过滤器Filter_02_Filter解决中文乱码问题
  13. [Entity Framework]获取部分字段的查询
  14. SpringMVC源码
  15. lldb 命令
  16. 2015: [Usaco2010 Feb]Chocolate Giving
  17. 风趣的JavaScript面向对象入门课程一
  18. Linux下的C#连接Mysql数据库
  19. python bif
  20. ELK架构设计

热门文章

  1. Oracle 11g 单机服务器ASM部署
  2. spring boot 跨域
  3. mybatis:自定义映射关系resultMap
  4. Servlet简介和ServletContext
  5. 【剑指Offer】【字符串】字符串的排列
  6. class和struct区别
  7. Fast Report 分栏分页
  8. python日志logging配置
  9. ssr 学习总结
  10. Windows下安装和使用Masscan