CVE-2019-8790:Check Point Endpoint Security初始客户端提权漏洞分析

阅读量    85634 |   稿费 100

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

 

0x01 介绍

SafeBreach Labs在Windows的Check Point Endpoint Security客户端软件中发现了一个新漏洞。

本文将演示如何利用此漏洞,将任意未签名的DLL加载到以NT AUTHORITYSYSTEM身份运行的服务中,实现系统提权及权限维持

 

0x02 Check Point Endpoint Security

Check Point Endpoint Security软件涵盖了数据安全、网络安全、高级威胁防御、取证和远程访问VPN解决方案等功能。

该软件的某些部分作为Windows服务以“NT AUTHORITYSYSTEM”的身份运行,为其提供了很高的权限。

在这篇文章描述了我们在Windows的Check Point Endpoint Security初始客户端软件中发现的漏洞。

后文将演示如何利用此漏洞实现权限提升,获得NT AUTHORITYSYSTEM级别的访问权限。

 

0x03 漏洞发现

在对软件的初步探索中,主要针对以下Check Point服务进行了研究:

1.“Check Point Endpoint Agent”(CPDA.exe)
“2.Check Point Device Auxiliary Framework”(IDAFServerHostService.exe)

选择以上服务,主要出于以下原因:

1.以NT AUTHORITYSYSTEM身份运行 – 具有最高权限的用户帐户。这种服务可能具有由用户权限到系统权限的提权漏洞,这对攻击者来说是非常有用的。
2.该服务的可执行文件由Check Point签名,如果黑客找到了在此进程中执行代码的方法,则可将其用于规避安全产品检测的应用程序白名单绕过。
3.计算机启动后,此服务会自动启动,这意味着攻击者可能会将其用作权限维持。

在研究中发现,一旦启动Check Point Device Auxiliary Framework Service务(IDAFServerHostService.exe),IDAFServerHostService.exe签名进程就以NT AUTHORITYSYSTEM身份运行。

一旦执行,服务尝试加载atl110.dll库(“ATL Module for Windows”),我们注意到一个有趣的行为:

该服务试图从PATH环境变量的不同目录中加载丢失的DLL文件。

我们将在下一部分中分析尝试加载丢失的DLL文件的原因。

 

0x04 PoC演示

在VM中安装Python 2.7。c:python27有一个ACL,允许所有经过身份验证的用户将文件写入ACL。这简化了提权操作,允许常规用户编写丢失了的DLL文件并以NT AUTHORITYSYSTEM身份执行代码。

值得注意的是,管理用户或进程必须(1)设置目录ACL以允许非管理员用户帐户访问,(2)修改系统的PATH变量,包含该目录。这可以通过不同的应用程序来完成。
为了测试此提权漏洞,我们主要做了以下工作:

1.编译除原始Microsoft atl110.dll之外的未签名的代理DLL(我们将在”原因分析”部分解释原因)
2.添加自定义功能:加载任意未签名的DLL,并在加载DLL后将以下内容写入txt文件的文件名:
加载它的进程名称
执行它的用户名
DLL文件的名称

我们能够以普通用户的身份加载任意DLL,并在由Check Point签名为NT AUTHORITYSYSTEM的进程中执行任意代码。

 

0x05 原因分析

启动“Check Point Device Auxiliary Framework”服务(IDAFServerHostService.exe)后,将加载iDAFServer.dll库。

iDAFServer.dll库使用CoCreateInstance初始化以下CLSID的logger COM对象:465DB11A-B20F-4C84-84B6-1EA5213D583A

OleViewDotNet简介(或注册表)介绍,这个logger COM类是在daf_logger.dll库中实现的,这意味着一旦初始化COM对象,就会加载这个库同时调用导出的DllGetClassObject函数:

一旦调用了daf_logger.dll库的DllGetClassObject函数,就会调用导入的AtlComModuleGetClassObject函数:

我们可以看到此函数是从atl110.dll导入的,这会使服务尝试加载此DLL。

atl110.dll库与Microsoft Visual Studio Redistributable 2012软件包一起部署,而未随Check Point软件一起安装,因此可能会丢失相应的DLL。
此漏洞有两个根本原因:

1.由于搜索路径不受控制,未能加载safe DLL – 在这种情况下,需要用SetDefaultDllDirectories函数将加载DLL的路径控制在可执行文件的范围内。
2.未对二进制文件进行数字证书验证。该程序没有检测正在加载的DLL是否已签名(例如使用WinVerifyTrust函数进行验证)。因此,可以加载任意未签名的DLL。

 

0x06 潜在的恶意用途和影响

下面将展示攻击者利用Check Point Device Auxiliary Framework Service漏洞的三种方式。

可执行文件签名和白名单绕过

该漏洞使攻击者能够利用签名服务加载和执行恶意负载。这一功能可能会被攻击者滥用,例如利用应用程序白名单绕执行恶意程序员或逃逸安全软件的检测。

权限维持

该漏洞使攻击者能够在每次加载服务时加载和执行恶意负载。这意味着即使攻击者在易受攻击的路径中删除了恶意DLL,该服务也会在每次重新启动时重新加载恶意代码。

权限提升

在攻击者获得对计算机的访问权限后,他可能具有有限的权限,这可能会限制对某些文件和数据的访问。该服务使其能够利用NT AUTHORITYSYSTEM的身份进行操作,这是Windows中最强大的用户,几乎可以访问计算机上用户的所有文件和进程。

 

0x07 受影响的版本

适用于Windows的Check Point Endpoint Security初始客户端 – 版本低于E81.30
用于分析漏洞原因的文件:

iDAFServerHostService.exe – 8.60.5.6825
iDAFServer.dll – 8.60.5.6825
daf_logger.dll – 8.60.5.6802

 

0x08 时间线

2019年8月1日 – 漏洞报告
2019年8月4日 – 得到Check Point的初步回应
2019年8月6日 – Check Point询问漏洞说明
2019年8月6日 – Check Point确认漏洞
2019年8月19日 – Check Point提供了修复计划
2019年8月27日 – Check Point发布修补版本(E81.30)[1],发布了一份公告及CVE-2019-8790。

 

0x09 参考

[1]Check Point Enterprise Endpoint Security E81.30

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多