欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

CVE-2019-3969:Comodo沙箱逃逸提权漏洞分析

来源:本站整理 作者:佚名 时间:2019-07-26 TAG: 我要投稿

AV(反病毒软件)一直以来都是漏洞挖掘的绝佳目标,这是因为其中涉及到巨大的攻击面、复杂的解析过程以及以高权限运行的各种组件。几个月之前,我决定分析最新版的Comodo Antivirus v12.0.0.6810,最终我找到了一些有趣的信息,但这里我想跟大家分享其中一个沙箱逃逸问题,可以将权限提升至SYSTEM级别。在本文中,我们会滥用各种COM对象,绕过二进制签名检查,劫持关键服务。下面开始进入主题。

 
0x01 Comodo沙箱机制
首先我想介绍一下Comodo的沙箱技术,Comodo称之为“Containment”,在本文中我将交替使用“Containment”以及“沙箱”这两个词。这种沙箱技术可以限制不可信应用(RTATC)在类沙箱环境中运行,同时OS中还能运行其他进程。这种技术涉及到用户模式hook以及内核模式驱动,可以阻止对主机上文件或注册表的任何修改操作。该环境中可以读取文件及注册表,但一旦执行写操作,文件I/O就会被转移到沙箱文件系统,后续读取操作将与沙箱文件系统交互,使调用方误认为自己在与正常的文件系统交互。
Comodo通过过滤器驱动Cmdguard.sys来实现该功能。该驱动会使用FltRegisterFilter API注册一个_FLT_REGISTRATION结构,该结构包含与来自用户模式应用的各种IRP(比如文件访问、文件写入等)对应的回调例程,并且可以执行对应的拦截/处理操作。此外,ALPC(用于各种OS组件的一种Microsoft IPC)也会被沙箱化处理,Comodo会将ALPC连接转移到“沙箱化”的svchost.exe实例,避免通过RPC/ALPC实现沙箱逃逸。这种containment技术工作原理如下图所示:

图1. Comodo Containment技术逆向分析图
Cmdguard.sys不仅可以过滤文件/注册表I/O,也会使用PsSetCreateProcessNotifyRoutine注册CREATE_PROCESS_NOTIFY_ROUTINE,跟踪正在运行的进程。当进程运行时,Comodo会将containment状态、信任等级以及其他相关属性跟踪并保存到存储在内核中的一个进程列表。Cmdguard.sys会对外提供“filter ports”,以便用户模式下的Comodo组件通信。Comodo会向cmdAuthPort filterport发送特定消息来设置containment状态,随后内核模式驱动会在该消息指定的目标进程上设置“containment”标志。
在创建沙箱化进程后,Guard64.dll(几乎每个运行的进程中都会注入该dll)负责从用户模式中发送这些containment消息。例如,Guard64.dll会hook Explorer.exe的CreateProcessInternalW API,这样当用户执行不可信进程时,就会向Cmdguard.sys过滤器端口发送一个“containment”消息。现在当不可信进程启动时,驱动程序会将打上“contained”标记,阻止文件、注册表I/O操作。此外,Cmdguard.sys会将Guard64.dll注入沙箱化进程中,执行用户模式下的hook操作。

图2. Cmdguard.sys dll注入流程
Guard64.dll在用户模式下设置的hook如下图所示:

图4. Guard64.dll用户模式hook
这些hook有个相同的功能,就是避免沙箱化的进程连接非沙箱化进程创建的安全对象。为了完成该任务,Comodo会将一个!comodo_6标记附加到沙箱化进程创建或打开的每个对象名,避免对象名与系统上已有的安全对象发生名字冲突(或者关联)。
实际上,这也是RPC/ALPC沙箱隔离的工作原理。RPC/ALPC流量会被转移到沙箱化的Svchost.exe实例(参考上图),这是因为!comodo_6会附加到沙箱化进程尝试连接的端口名,而沙箱化的Svchost.exe实例也会创建附加!comodo_6的端口名。如下图所示,我们可以看到沙箱化的MSI安装程序尝试运行,发起RPC调用后最终会创建沙箱化的MSIexec.exe服务组件(父进程为cmdvirth.exe)。

图5. 沙箱化的ALPC生成沙箱化的MSIExec实例
绕过这些用户模式hook并不难,但想通过这种方式实现沙箱逃逸并不容易。如果想简单patch与ALPC相关的hook,通过WMI实现逃逸显然不可能,因为这些位置同样会被CmdAgent.exe监控并阻止。了解关于Comodo沙箱环境的基本知识后,下面我们来研究下如何实现沙箱逃逸及权限提升。
 
0x02 创建Comodo COM客户端
Comodo在各种AV组件之间使用了许多IPC机制,包括:过滤端口、共享内存、LPC以及COM。这里我们将重点关注COM。如果大家想了解COM,可以参考这篇文章。简而言之,COM的全称为“Component Object Model”,是微软提供的一种技术,允许不同模块创建由COM服务端定义的各种对象并与之交互。COM服务端可以本地部署(在当前进程中加载的一个COM服务端dll)或者远程部署,可以通过ALPC进行交互。在利用形式上,远程部署可能是更为有趣的应用场景。
我们发现Comodo可以从低权限进程(如explorer.exe,通过Context Shell Handler(当用户右键点击时出现的菜单)或者Cis.exe(Comodo客户端GUI))发起扫描任务。这些扫描任务可以通过调用CAVWP.exe中的例程来发起,而该程序以SYSTEM权限执行。
如果我们能澄清如何按照Comodo的方式连接到这个服务,那么可能我们会找到一种新的攻击面,发现除“扫描”之外更多有趣的函数。我们需要通过COM实现与CAVWP.exe的远程交互,因为从注册表中可知,CAVWP.exe是一个进程外的COM服务端:

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载