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。







