Symanctec Management Agent(Altiris)权限提升漏洞(CVE-2018-5240)

一、前言

在最近一次红队练习中,我们发现最新版的Symantec Management Agent(Altiris)中存在一个漏洞,可以用来提升权限。

当Altiris本地代理执行资产情况扫描时(比如扫描软件资产情况),扫描结束后这个SYSTEM权限的服务会重新分配NSI以及Outbox文件夹的权限:

C:Program FilesAltirisInventoryOutbox
C:Program FilesAltirisInventoryNSI

结果就是Everyone组可以获得这两个目录的完全控制权,这样任何用户都可以创建指向其他目录的链接(junction)。因此,目标目录就会被分配Everyone权限,并且目录下的每个文件或者文件夹都会被强制集成该权限。

如果主机上安装了Symantec Management Agent v7.6、v8.0或者v8.1 RU7产品,那么低权限用户就可以利用该漏洞来提升权限。

 

二、漏洞发现及分析过程

在执行红队任务时,我们通常会在某台主机上看到已安装的各种类型的第三方端点软件。这类软件通常值得仔细研究,因为它们有可能成为当前主机甚至是整个环境的突破口。

在端点管理软件方面,我们经常能看到由Symantec发布的Altiris的身影。这款软件是一个端点管理框架,使用方可以利用该框架来集中管理单位资产,确保所有系统已应用最新补丁,也可以用来安装其他软件、根据用户的角色或组来更改配置,也支持整个单位的资产注册。

我们测试的版本为7.6版,如下图所示。根据Symantec在2018年6月12日的描述,安装修复补丁之前的所有版本都存在这个问题。

我们注意到Altiris文件结构中目录的权限为Everyone – Full Control。这些文件夹似乎包含一些无害的内容,比如扫描配置文件以及XML文件,我们认为这些文件来与资产扫描或者最近任务的输出结果有关。我们使用了一行非常简单的PowerShell命令找到了这些目录及文件的权限,这些PowerShell语句都可以帮助我们使用Windows目标主机上的工具来审核目标系统的ACL情况。典型的命令如下所示(参考Github上代码):

Get-ChildItem C: -Recurse -ErrorAction SilentlyContinue | ForEach-Object {try {Get-Acl -Path $_.FullName | Select-Object pschildname,pspath,accesstostring} catch{}}|Export-Csv C:tempacl.csv -NoTypeInformation

查看这些目录的时间戳信息后,我们发现这些文件夹每天有一次活动记录。根据使用方的配置情况以及资产管理的需求,这些文件夹每天的活跃次数可能会更多。

从现在开始事情变得有趣起来。具备Everyone – Full Control权限的文件夹的确非常有趣,但有时候我们颇费周折,最后可能会一无所获。尽管如此,我们还是需要迈出第一步。

值得一提的是,发现这个情况后,我们第一时间翻阅了Cylance之前披露的一个漏洞(感谢Ryan Hanson的精彩分析),想确定之前的攻击方法能否适用于这种情况。

我们发现NSI目录的权限情况如下图所示,这些权限与Outbox目录的权限一致:

随后我们尝试使用James Forshaw的symboliclink-testing-tools工具将该目录重定向到另一个位置,创建另一个目录的挂载点,判断这些文件是否会成功写入,事实证明的确如此。这里我们也可以选择使用systernals中的junction工具。junction工具的唯一问题在于它要求指定的源目录不存在,而这里源目录已经存在并且具备Everyone权限。源目录已存在的操作过程如下图所示:

如果我们删掉了这个目录,就难以复现我们攻击所需的这些权限。James Forshaw的工具集可以帮助我们利用已存在的目录,如下图所示:

另一款工具也能用于这种攻击场景:Windows自带的mklink.exe工具,但我们需要高权限才能使用该工具,并不满足当前场景(现在我们的目的就是提升权限)。

为了彻底澄清哪个进程会覆盖这些权限,我们上传了sysinternals的Process Monitor工具,观察后台的具体工作流程。从结果中我们可以看到,AxXNSAgent.exe会给所有文件及目录设置DACL策略。

 

三、武器化

那么现在我们如何将该漏洞武器化?为了利用这个漏洞,我们可以选择使用多种方法,但最简单的一种方法就是尝试去覆盖Altiris的根目录(C:\Program Files\Altiris\Alritis Agent\)权限,这样我们就能修改该服务对应的程序文件:AeNXSAgent.exe,该程序正常情况下会以SYSTEM账户权限运行。

在修改挂载点覆盖权限之前,Altiris Agent目录以及AeNXSAgent.exe文件的权限如下图所示:

接下来我们需要创造一个挂载点,将其指向Altiris Agent目录。需要注意的是,源目录必须为空才能进行重定向,由于我们拥有每个文件的全部权限,因此这对我们来说非常简单。我们可以使用James Forshaw开发的symboliclink-testing-tools工具来创建挂载点并验证是否创建成功。

然后我们需要等待下次扫描。第二天早上起来扫描已结束,结果如下图所示。正如我们所预期的,现在根目录以及所有子项都已具备Everyone – Full Control权限,其中就包括AeNXSAgent.exe

一旦我们完全控制了AeXNSAgent.exe,我们就可以替换这个文件,重启主机以获取SYSTEM权限。我们要注意到一点,利用符号链接来实现权限提升是一种非常普遍的现象,James Forshaw已经发现了20多个案例,大家可访问此处获取具体列表。

 

四、总结

该漏洞影响所有版本的Altiris Management Agent(包括v7.6、8.0以及8.1 RU7在内)。我们强烈推荐用户立即安装官方补丁。

如果大家对此类漏洞的利用(不管在运行时或者其他状态)有更好意见或者建议,欢迎与社区共享。

 

五、时间线

  • 与厂商接触 – 2018年5月31日
  • 厂商分配事务跟踪ID – 2018年5月31日
  • 厂商确认60天的披露周期 – 2018年5月31日
  • 厂商确认v7.6、8.0以及8.1 RU7存在该漏洞 – 2018年6月12日
  • 厂商确认会为所有4个版本发布修复补丁 – 2018年7月16日
  • 参与方CNA分配CVE编号 – 2018年7月23日
  • 厂商发布安全公告 – 2018年7月25日
  • Nettitude公布更多细节 – 2018年9月12日
(完)