手持苹果远程桌面的双刃剑:攻击者如何滥用、安全人员如何在应急响应中充分利用

41yf1sh 系统安全 2019年10月15日发布
Favorite收藏

导语:攻击者通常可以依靠企业环境中已经部署的操作系统和第三方应用程序来开展有针对性的攻击活动。

概述

攻击者通常可以依靠企业环境中已经部署的操作系统和第三方应用程序来开展有针对性的攻击活动。借助这些应用程序,攻击者可以轻松进入内部网络之中,无需额外开发或使用它们自己的恶意软件。这样的策略,通常被称为“Living Off the Land”。但对于苹果系统来说,安全性如何呢?

根据近期面向企业开展的macOS相关调查,FireEye Mandiant将Apple Remove Desktop应用程序确定为一个横向移动的向量,并将其作为有价值的取证来源。

Apple Remote Desktop(ARD,苹果远程桌面)在2002年首次发布,是Apple用于软件分发、资产管理和远程协助的桌面管理系统。ARD部署具体由管理员和客户端计算机组成。尽管必须从macOS的App Store下载管理员端应用程序,但客户端应用程序本身就是macOS的一部分。客户端系统必须手动添加到管理员系统上的客户端列表中,针对客户端与管理员系统在同一本地网段的情况则可以通过Bonjour发现客户端。在典型的企业环境部署方案中,经理将成为ARD管理员,并且可以借助ARD查看、管理和远程控制其下级人员的工作站。

横向移动

Mandiant观察到攻击者使用ARD屏幕共享功能在系统之间进行横向移动。如果未在目标系统上启用远程桌面,则攻击者可能会通过SSH连接到系统,并执行kickstart命令以启用远程桌面管理。这将允许远程桌面访问目标系统。下面是macOS Unified Log中展示的示例,其中显示了攻击者用于启动具有完整特权的所有用户的远程桌面访问所使用的kickstart命令:

1.png

在调查期间,我们可以使用一些不同的组件来跟踪此活动。上述kickstart命令的执行将会修改配置文件/Library/Application Support/Apple/Remote Desktop/RemoteManagement.launchd的内容,以包含字符串“enabled”。SSH登录活动可以在Apple系统日志或审核日志中找到。在Unified Log中可以看到kickstart命令的执行,如上图所示。

ARD管理员具有许多可用的功能,就像Windows环境中的管理员(Administrator)帐户一样。通过破坏有权访问ARD管理员系统的帐户,攻击者可以执行以下任何操作:

1. 远程控制启用VNC的计算机,包括“Curtain Mode”,可以在本地工作站的屏幕上隐藏远程操作;

2. 传输文件;

3. 远程关闭或重新启动多台计算机;

4. 修改计划任务;

5. 执行AppleScript和UNIX Shell脚本。

在Apple的ARD网页ARD帮助页面上,包含有关ARD功能的更多详细信息。

利用ARD报告增强调查取证能力

除了具有远程系统控制功能之外,Apple Remote Desktop的资产管理功能中还包括进行远程Spotlight搜索、文件搜索、生成软件版本信息报告等功能,最重要的是,其中包含生成应用程序使用情况和用户历史记录报告的功能。这一报告过程通常遵循以下步骤:

1. 客户端系统产生报告并在本地缓存数据,然后再将其传输到管理员系统(默认策略是本地时间每天凌晨00:00)。

2. 从客户端接收的数据被缓存在管理员系统中。或者,可以将安装ARD管理员版本的macOS系统设置为集中式收集选项的“任务服务器”。

3. 缓存的数据将写入到管理员系统上的SQLite数据库中。

缓存的数据存储在/private/var/db/RemoteManagement父目录下的各个子目录中。该目录具有如下结构:

2.png

这一目录结构会存储在所有系统上,但具体哪个文件存储在哪个目录中,还要取决于系统是ARD客户端系统还是管理员系统。

ARD客户端系统的组件

其中,有一个目录是研究客户端系统过程中的重点,即:/private/var/db/RemoteManagement/caches/。该目录中包含以下文件,作为定期向管理员系统报告的本地客户端数据缓存。但是,这些文件通常会被系统定期删除,因此在实际查找时可能会找不到某些文件。一旦在将这些文件传输到管理员系统后,它们就会被从客户端系统中删除。在传输后,所有数据都将存储在管理员系统中。

ARD缓存文件的文件名及描述:

1. AppUsage.plist – 包含应用程序使用情况数据的plist文件;

2. AppUsage.tmp – 包含应用程序使用情况数据的二进制plist文件,通常与AppUsage.plist相同,或包含与之相比更少的内容;

3. asp.cache – 系统信息的二进制plist;

4. filesystem.cache – 包含整个文件系统索引的数据库,包括用户和组;

5. sysinfo.cache – 包含系统信息的二进制plist,asp.cache中也包含其中的一些信息;

6. UserAcct.tmp – 包含用户登录活动的二进制plist。

根据我们的经验,这些文件中最有用的信息是应用程序使用情况和用户活动。

应用程序使用情况(Application Usage)

RemoteManagement/caches/AppUsage.plist文件针对每个应用程序都保存一个键,其中的值是应用程序的完整路径,例如file:///Applications/Calculator.app/。

每个应用程序键中都包含一个字典,该字典中包含一个“runData”数组和一个“Name”字符串,后者是程序的友好名称,例如“Calculator”,如下图所示。

AppUsage.plist结构:

3.png

在每个“runData”数组中,均包含至少一个由以下键和值组成的字典:

1. wasQuit(布尔型):指示在上次报告时间之前是否退出应用程序,如果该值不为“true”,则这个字段可能不存在;

2. Frontmost(数值,以秒为单位):应用程序在屏幕最前的总持续时间;

3. Launched(macOS绝对时间戳):启动应用程序的时间;

4. runLength(数值,以秒为单位):应用程序运行的持续时间;

5. username(字符串):启动应用程序的用户。

RemoteManagement/caches/AppUsage.plist通常包含与RemoteManagement/caches/AppUsage.tmp相比相同或更多的内容。

用户活动(User Activity)

RemoteManagement/caches/UserAcct.tmp文件是一个二进制plist,其中包含可以与macOS系统上其他组件(例如:Apple系统日志或审计日志)相关联的用户活动。在该文件中,包含每个登录用户简短名称的键。

每个键都包含一个字典,该字典包含带有用户UID的“uid”字符串和登录类型数组(console、tty或SSH)。每个登录类型的数组至少包含一个由以下键和值组成的字典:

1. inTime(macOS绝对时间戳):用户登录的时间;

2. outTime(macOS绝对时间戳):用户注销的时间;

3. host(字符串):远程登录的原始主机,已经观察到该字段不一致。

ARD管理员系统的组件

客户端的数据会在每天报告给管理员系统,然后管理员端会将这些文件存储在RemoteManagement/ClientCaches/目录中。其中,每个文件都重命名为报告系统地MAC地址,并放置在对应的子目录中。/private/var/db/RemoteManagement/ClientCaches/的子目录及所包含文件如下:

1. ApplicationUsage/:包含AppUsage.plist文件;

2. SoftwareInfo/:包含Filesystem.cache文件;

3. SystemInfo/:包含Sysinfo.cache文件;

4. UserAccounting/:包含UserAcct.tmp文件。

除上述之外,还有一个plist文件,名称为RemoteManagement/ClientCaches/cacheAccess.plist,其中包含MAC地址的键和更多MAC地址的值。该文件的目的和上下文尚未确定。

发现ARD中蕴藏的金矿

除filesystem.cache之外,上述所有数据都会被添加到主SQLite数据库中,位于RemoteManagement/RMDB/rmdb.sqlite3(简称为“RMDB”)。RMDB存在于所有ARD系统上,但仅在管理员端上才会使用。该数据库中存储关于ARD网络中系统的大量信息,并且这些信息保存的时间跨度较长。Mandiant观察到,在该数据库中能找到一年之前的应用程序的使用时间戳数据。

RMDB文件包含五个表,分别是:ApplicationName、ApplicationUsage、PropertyNameMap、SystemInformation和UserUsage。下面详细介绍数据库中的每个表。

ApplicationName

该表是每个系统上应用程序的索引,其中为每个应用程序分配了每个系统的项目序列号(“ItemSeq”)。该数据用于ApplicationUsage表中的关联。

ApplicationName表包含的各列及描述如下:

1. ComputerID(字符串):客户端MAC地址,无分隔符;

2. AppName(字符串):友好显示的应用程序名称;

3. AppURL(字符串):应用程序URL路径(例如:file:///Applications/Calculator.app);

4. ItemSeq(整数):针对每个ComputerID,给出的每个应用程序的ID编号,在AppName表中使用;

5. LastUpdated(macOS绝对时间戳):客户端上次报告的时间。

ApplicationUsage

AppName表是唯一的,因为它交换了表中的“Frontmost”和“LaunchTime”值。在撰写本文时,已经在macOS 10.14(Mojave)上得到验证。

ApplicationUsage表包含的各列及描述如下:

1. ComputerID(字符串):客户端MAC地址,无分隔符;

2. FrontMost(macOS绝对时间戳):应用程序启动时间;

3. LaunchTime(秒数,精确到小数点后6位):应用程序在屏幕上最前运行的总时间;

4. RunLength(秒数,精确到小数点后6位):应用程序运行的总时间;

5. ItemSeq(整数):从ApplicationName表中引用的各个ComputerID的ItemSeq编号;

6. LastUpdated(macOS绝对时间戳):客户端上次报告的时间;

7. UserName(字符串):启动应用程序的用户;

8. Runstate(整数):在上一次报告时的运行状态,“1”表示“运行”,“0”表示“已终止”。

PropertyNameMap

该表用作SystemInformation表的引用。

PropertyNameMap表包含的各列及描述如下:

1. ObjectName(字符串):macOS系统的各种元素,例如Mac_HardDriveElement、Mac_USBDeviceElement、Mac_SystemInfoElement;

2. PropertyName(字符串):每个元素的属性名称,例如Mac_USBDeviceElement的ProductName、ProductID、VendorID和VendorName;

3. PropertyMapID(整数):每个元素中每个属性的ID。

SystemInformation

该表中收集了大量的系统信息。可以利用这个表提取所有客户端系统的USB设备信息、IP地址、主机名等。

SystemInformation表包含的各列及描述如下:

1. ComputerID(字符串):客户端MAC地址,无分隔符;

2. ObjectName(字符串):PropertyNameMap表中描述的macOS系统元素;

3. PropertyName(字符串):PropertyNameMap表中描述的每个元素的属性;

4. ItemSeq(整数):每个元素的ID,即:如果有4个Mac_USBDeviceElement数据集,那么每个数据集都有一个ItemSeq编号0-3,以将属性组合在一起;

5. Value(字符串):各个属性的数据;

6. LastUpdated(格式为yyyy-mm-ddThh:mm:ssZ):24小时制式的本地时间,表示客户端上次报告的时间,例如2019-08-07T02:11:34Z。

UserUsage

该表中包含所有报告的客户端系统的用户登录活动。

UserUsage表包含的各列及描述如下:

1. ComputerID(字符串):客户端MAC地址,无分隔符;

2. LastUpdated(macOS绝对时间戳):客户端上次报告时间;

3. UserName(字符串):用户的简短名称;

4. LoginType(字符串):Console、tty或ssh;

5. inTime(macOS绝对时间戳):用户登录的时间;

6. outTime(macOS绝对时间戳):用户注销的时间;

7. Host(字符串):远程登录的原始主机,已经观察到该字段不一致。

Filesystem缓存

RemoteManagement/ClientCaches/filesystem.cache文件是一个数据库,用于索引在macOS计算机文件系统上找到的文件和目录。ARD并没有像RMDB那样使用SQLite,而是使用了自定义的数据库实现来跟踪此信息。幸运的是,数据库的文件格式非常简单,由文件头、6个表以及指向字符串值的条目组成。通过解释文件系统缓存文件中的信息,研究人员可以重新创建启用ARD的系统的目录结构。Mandiant使用这一技术来识别和演示攻击者创建的文件。

由魔术值“hdix”标识的数据库头部包含有关数据库的元数据,例如:索引文件夹、文件和符号链接的总数。该头部的指针指向六个表:“main”、“names”(文件名)、“kinds”(文件扩展名)、“versions”(macOS应用程序捆绑软件版本信息)、“users”和“groups”。其中“main”表中的条目包含对其他表中条目的引用。通过遍历这些引用,取证人员可以恢复完整的文件系统路径和元数据。

实际上,filesystem.cache文件的大小可能达到数十兆字节,可以跟踪数十个或数十万个文件系统条目。下图展示了已解析的文件系统缓存文件中截取的内容,这些条目展示了本文所讨论的组件。

4.png

在macOS系统上,程序“ build_hd_index”遍历文件系统,并将文件和目录索引到filesystem.cache中。下图展示了该工具的部分文档。其默认输出目录为[/private]/var/db/RemoteManagement/caches/。

5.png

具有讽刺意味的是,我们在网上发现了最早发布于2007年的帖子,称该工具对于性能有影响。一篇匿名帖子表示,“build_hd_index”用于支持OS X Panther(2003年)上的文件索引。而在16年后的今天,我们可以在应急响应期间利用这些组件。

工具:ARDvark

显然,如果在调查取证过程中发现主机上存在这一组件,那么就可以利用其具有的大量数据来识别攻击者的活动。但是,在某些情况下,研究人员可能难以从ARD管理员系统上获取生成的报告。在这种情况下,调查人员必须手动从ARD管理员系统的RMDB文件中获取并提取信息。为解决这一问题,可以使用ARDvark工具,该工具可以提取记录在RMDB中的所有用户活动和应用程序使用情况,并以对分析人员友好的格式输出数据。

ARDvark还将处理ARD客户端系统/private/var/db/RemoteManagement/caches/路径下的AppUsage.plist和UserAcct.tmp文件。此外,ARDvark能够解析filesystem.cache文件以生成文件系统列表以及系统上现有的所有用户和组。有关更多信息,请参考FireEye的GitHub

检测和预防ARD滥用

要检测可疑的ARD使用,组织可以监控/Library/Application Support/Apple/Remote Desktop/RemoteManagement.launchd文件的异常修改,以识别未使用ARD的远程桌面访问是否启用。在威胁排查期间,可以在Unified Logs中查找可疑启动命令,同样能够发现可疑的ARD滥用情况。

要缓解ARD滥用,需要采用最小特权原则。我们建议尽量减少远程控制权限,仅对必要的帐户允许管理员权限。Apple在帮助页面和ARD用户指南中提供了有关权限设置和不使用ARD进行本地身份验证的指南。ARD管理员可以在ARD应用程序中生成报告,以确保不对管理特权设置进行任何更改。

提供大量证据支撑

与macOS应用程序使用情况相关的组件非常少,甚至与其他系统相比相差甚远。迄今为止,有一些与应用程序使用情况相关的组件,包括CoreAnalytics文件和Spotlight数据库,但这些组件都没有提供所有应用程序执行的确切时间。尽管并非在所有macOS系统上都存在ARD组件,但如果将ARD部署在企业环境中,可能会为调查人员提供一些有价值的数据,这些数据通常无法通过其他途径或组件获取。

用户登录活动通常存储在Apple系统日志和审核日志中,但日志的保留时间过短经常会成为一大问题。RMDB提供了应用程序使用情况,并保存时间超过一年的用户登录信息记录,远远超过了一般的日志保存时间。

在RMDB中,可用的系统信息包括IP地址、USB设备信息等,可能对调查人员有所帮助。此外,收集的文件系统缓存文件中包含多个macOS系统详细的文件列表,帮助研究人员可以识别其他系统上的文件或值得关注的用户,而不必直接从可疑系统中收集证据。

ARD是一个很好的例子,说明了远程管理工具如何为攻击者滥用提供攻击面,以及如何将大量数据进行整合以帮助安全人员排查恶意活动。如果需要在组织中使用ARD,我们建议考虑在以后的应急响应和调查取证中通过报告的方式来查看信息,否则可能会因为其结构过于复杂而造成阅读的不便。

本文翻译自:https://www.fireeye.com/blog/threat-research/2019/10/leveraging-apple-remote-desktop-for-good-and-evil.html如若转载,请注明原文地址: https://www.4hou.com/system/20863.html
点赞 0
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论