macOS.Macma后门的分析
2021-11-26
来源:维他命安全
执行摘要
上周,谷歌的威胁分析小组分享了“使用macOS漏洞分析水坑攻击”报告,该活动疑似APT活动。谷歌的报告集中在两个漏洞的使用上:一个0 day和一个N day(有补丁的已知漏洞)。
事实上,在谷歌发布报告时,这两个漏洞已经被修复了几个月。而利用这些漏洞投放的恶意软件却没有受到太多关注:一个后门,该后门即使在最新的macOS Monterey的补丁系统上也能正常运行。
谷歌将该后门命名为 “Macma”,我们也将使用这个名字。在谷歌发布后不久,ObjectiveSee上很快发布了对后门的相关分析(名为“OSX.CDDS”)。在本文中,我们深入研究了macOS.Macma,分享了更多的IOC来帮助防御者和分析人员,并推测了macOS.Macma的一些(迄今未被提及)有趣的工件。
持久性
基于谷歌 TAG 团队的工作,我们成功获取了威胁者植入的后门的两个版本,我们将其标记为UserAgent 2019和UserAgent 2021。两者都非常有趣,但可以说早期的 2019 版本寿命更长,因为交付机制似乎在 macOS Monterey 上运行良好。
2019年版的macOS.Macma在macOS Monterey上可以正常运行
UserAgent 2019是一个由名为 “SafariFlashActivity.app ”的应用程序投放的Mach-O二进制文件,其本身包含在一个。DMG文件中(谷歌发现的磁盘镜像样本的名称为 “install_flash_player_osx.dmg”)。UserAgent 2021是一个独立的Mach-O二进制文件,包含与2019年版本基本相同的功能以及一些新增的AV捕获功能。这个版本的macOS.Macma是在威胁者利用谷歌文章中描述的漏洞时,由一个单独的Mach-O二进制文件投放安装的。
两个版本都在当前用户的~/Library/LaunchAgents文件夹中安装相同的持久性代理com.UserAgent.va.plist。
Macma的持久性代理com.UserAgent.va.plist
如上图所示,属性列表包含一些有趣的功能。首先,除了可执行文件的路径外,我们可以看到持久性代理在运行前向恶意软件传递两个参数:-runMode和ifneeded。
该代理还将当前的工作目录切换到一个自定义文件夹,在该文件夹中,将存放来自单独的键盘记录器模块的数据等。
我们发现一个有趣的现象,开发者选择将LimitLoadToSessionType键的值设为 “Aqua”。Aqua “值确保LaunchAgent仅在有一个登录的GUI用户时运行(而不是作为后台任务运行或在用户通过SSH登录时运行)。这可能是确保其他功能正常运行所必需的,例如请求用户授予对麦克风和辅助功能的访问权限。
提示受害者允许macOS.Macma 访问麦克风
然而,由于在完全没有指定键的情况下,launchd默认为 ”Aqua“,因此这种包含是相当多余的。我们可以推测,这里包含的键表明开发者熟悉在其他背景下开发其他LaunchAgents,而某些背景下键可能是必要的。
”混乱的“开发过程
由于我们正在讨论属性列表,SafariFlashActivity.app 的 Info.plist 中就有一些有趣的工件,这反过来又使我们注意到捆绑可执行文件中的一些其他奇怪之处。
查找包含Info.plist的捆绑包中的恶意软件的一个好处是,它提供了一些关于恶意软件何时、在什么机器上构建的有趣细节。
macOS.Macma是在ElCapitan上构建的
在这种情况下,我们看到该恶意软件是在运行Build 15C43的El Capitan机器上构建的。这很奇怪,因为Build 15C43从来都不是一个公开发布的版本:它是El Capitan 11.2的beta 版(测试版),在2015年10月至11月左右短暂地提供给开发人员和AppleSeed(Apple beta 测试人员)。2015 年 12 月 8 日,El Capitan 11.2 发布了内部版本号 15C50,取代之前的 11.1 公开版本,从 10 月 21日开始内部版本为 15B42。
在这个时候,我们注意到,该恶意软件是用临时签名进行签名的,这意味着它不需要Apple开发人员账户或ID来满足代码签名要求。
这里面有一个异常之处:该捆绑包是在不需要开发人员账户的情况下签名的,但似乎用来创建这个版本的macOS.Macma的macOS版本确实来自于一个开发人员账户。这样的账户可能属于作者,可能是偷来的,也可能是用假身份证获得的。但是,后两种情况似乎与临时签名存在矛盾,如果开发者有一个假的或偷来的Apple ID,为什么不用它来编码,以增加可信度呢?
当我们在猜测开发者或开发者的身份时,软件包中的另外两个工件值得一提。/MacOS中的主要可执行文件名为”SafariFlashActivity“,显然是在2019年9月16日编译的。在/Resources文件夹中,我们看到了9天前(9月7日)构建的可执行文件”SafariFlashActivity1“的早期版本。
虽然这两个可执行文件共享大量的代码和功能,但它们之间也有一些区别。有趣的是,它们似乎是由两个完全不同的用户创建的,有意或无意为之。
同一macOS.Macma捆绑包中两个二进制文件的用户字符串
用户账户 ”lifei“(推测为李飞,一个常见的中文名字)似乎已经取代了用户账户 ”lxk“。当然,这可能是同一个人操作不同的用户账户,或者是两个完全不同的人从一个共同的项目中分别构建。事实上,在如此短的时间内,代码之间存在着足够大的差异,因此有理由认为两个开发人员在同一个项目上独立工作,并且一个开发人员被选为嵌入/MacOs文件夹中的最终可执行程序。
请注意,在 ”lifei “构建中,我们看到第一次使用”Mac_Ma “和 ”preexcel“--在最终代码签名中用作团队标识。这些都没有出现在 ”lxk “构建中,”SafariFlashActivity“似乎是项目名称。这种分歧甚至扩展到包中使用的标识符和代码签名中使用的标识符之间的异常不一致,其中一个是xxxx.SafariFlashActivity,另一个是xxx.preexcl-project。
macOS.Macma的捆绑和代码签名中使用的标识符不一致
无论如何,在2019年版本的macOS.Macma的其他几个二进制文件中发现了 ”lifei “这个字符串,而 ”lxk “却没有再出现。在2021年的版本中,”lifei “和 ”lxk “以及所有其他开发人员工件都从安装程序和UserAgent二进制文件中完全消失了,这表明开发过程已经被故意清理。
用户lifei的 ”Macma “似乎已经赢得了 ”开发者之战“
最后,如果我们回到在软件包中发现的各种(公认的,可伪造的)编译日期,还有一个奇怪的现象:我们注意到,该恶意软件似乎是在2015年的macOS开发者版本上编译的,然而Info.plist的版权日期是2018年,而根据(完全可操作的)时间戳,这个软件包中的可执行文件是在三年多后的2019年9月构建的。
我们能从这些纠缠不清的线索中得出什么结论?无可否认,没有什么具体的结论。但似乎有两种合理的说法,即使是相互竞争的说法:也许威胁者花了非常大的力气,而且很可能是不必要的力气来混淆这些二进制文件中的工件。或者,威胁者存在些许混乱的开发过程,有不止一个开发人员和不断变化的需求。毫无疑问,事实要复杂得多,但鉴于上述工件的性质,我们怀疑后者很可能至少是故事的一部分。
对于防御者来说,这些提供了大量可收集的工件,也许可以帮助我们在未来的事件中识别这个恶意软件或追踪这个威胁者。
链接到 Android 和 Linux 恶意软件
当我们查看可执行代码本身中的工件时,事情开始变得更加有趣了。正如我们在介绍中指出的,关于这个恶意软件之前的报告将其称为 ”OSX.CDDS“。我们可以看到命名的原因,因为代码中充斥着以CDDS为前缀的方法。
在2021年UserAgent可执行文件中发现的一些CDDS方法
但是,该代码是DDS(数据分发服务)框架的一个实现。我们试图找到与macOS.Macma中使用的功能相匹配的DDS的特定实现,虽然我们的搜索结果为空白,但我们确实发现了其他使用相同框架的恶意软件。
Android恶意软件投放了一个包含相同CDDS框架的ELF bin
指向已知Android 恶意软件投放器的链接
这些 ELF bin 和两个版本的 macOS.Macma 的 UserAgent 还有一个共同点,即字符串”Octstr2Dec“和 ”Dec2Octstr“。
macOS.Macma和恶意ELF共享对象文件之间的共同点
后面的这些字符串,似乎是包含八进制和小数的字符串的转换,可能只是巧合或代码重用的问题。我们发现的代码相似性也有指向臭名昭著的Shedun Android恶意软件的安装程序的链接。
谷歌的TAG在其报告中指出,macOS.Macma与一个他们未能完全修复的iOS漏洞链有关。我们的分析表明,macOS.Macma背后的威胁者至少是在重用ELF/Android开发人员的代码,并且可能也将恶意软件瞄准了Android手机。但这些需要进一步分析,以了解这些连接的延伸程度。
Macma的键盘记录和 AV 捕获功能
虽然该恶意软件之前的报告已经涵盖了macOS.Macma功能的基本情况,但我们希望扩展之前的报告以揭示更多的 IoC。
如前所述,macOS.Macma将在~/Library/LaunchAgents/com.UserAgent.va.plist处投放一个持久性代理,在~/Library/Preferences/lib/UserAgent处投放一个可执行程序。
正如我们在上面指出的,LaunchAgent 将确保在正常运行之前,可执行文件的当前工作目录将更改为上述的”lib “文件夹。该文件夹被用作由键盘记录器 ”kAgent “收集的数据的存储库,该记录器本身与 ”at “和 ”arch “Mach-O二进制文件一起被放置在~/Library/Preferences/Tools/。
由macOS.Macma投放的二进制文件
kAgent键盘记录器从任何文本输入字段(包括 Spotlight、Finder、Safari、Mail、Messages 和其他具有密码等文本字段的应用程序)创建捕获的键盘记录文本文件。创建的文本文件的名称带有Unix的时间戳,并收集在名为 ”data“的目录中。
文件1636804188包含由键盘记录器捕获的数据
我们还注意到,这个恶意软件会访问remote.php文件,以返回用户的IP地址。相同的 URL 有着悠久的使用历史。
HTTP://cgi1.apnic.net/cgi-bin/my-ip.php
图片
Android和macOS的恶意软件都会ping这个URL
最后,我们注意到,在。/MacOS/SafariFlashActivity ”lifei “二进制文件中,还有一个IoC从未出现在其他地方,而且我们在任何测试运行中也没有看到投放,那就是:
/Users/%s/Library/Safari/Safari.app/Contents/MacOS/UpdateHelper
恶意软件试图在Safari文件夹中投放一个文件
这值得一提,因为目标文件夹,即用户的Library/Safari文件夹,自Mojave以来一直受到TCC保护。由于这个原因,任何试图在那里安装的行为都会违反目前的TCC保护(虽然存在绕过的情况)。因此,它看起来像是El Capitan时代早期代码开发的遗留物,而且我们确实在后来的版本中没有看到这个字符串。但是,它的独特性足以让防御者提防:在任何版本的macOS上都没有任何合法的理由让这个路径的可执行文件存在。
结论
捕获针对macOS用户的APT是一个罕见的事件,在这个示例中,我们很幸运地发现了被投放的恶意软件,而且非常明显。不管用来投放恶意软件的载体是什么,Payload本身是完全有效的,能够窃取数据并监视macOS用户。这只是警醒我们,仅仅依靠mac设备本身并不能完全保证安全性。这可能是一个APT开发的Payload,但代码很简单,任何感兴趣的相关人员都可以复制。
IoC
SHA1
000830573ff24345d88ef7916f9745aff5ee813d;UserAgent 2021 payload, Mach-O
07f8549d2a8cc76023acee374c18bbe31bb19d91;UserAgent 2019, Mach-0
0e7b90ec564cb3b6ea080be2829b1a593fff009f;(Related) ELF DYN Shared object file
2303a9c0092f9b0ccac8536419ee48626a253f94;UserAgent 2021 installer, Mach-0
31f0642fe76b2bdf694710a0741e9a153e04b485;SafariFlashActivity1, Mach-0
734070ae052939c946d096a13bc4a78d0265a3a2;(Related) ELF DYN Shared object file
77a86a6b26a6d0f15f0cb40df62c88249ba80773;at, Mach-0
941e8f52f49aa387a315a0238cff8e043e2a7222;install_flash_player_osx.dmg, DMG
b2f0dae9f5b4f9d62b73d24f1f52dcb6d66d2f52;client, Mach-0
b6a11933b95ad1f8c2ad97afedd49a188e0587d2;SafariFlashActivity, Mach-0
c4511ad16564eabb2c179d2e36f3f1e59a3f1346;arch, Mach-0
f7549ff73f9ce9f83f8181255de7c3f24ffb2237;SafariFlashActivityInstall, shell script
文件路径
~/Library/Preferences/Tools/at
~/Library/Preferences/Tools/arch
~/Library/Preferences/Tools/kAgent
~/Library/LaunchAgents/com.UserAgent.va.plist
~/Library/Preferences/UserAgent/lib/Data/
~/Library/Preferences/UserAgent/lib/UserAgent
~/Library/Safari/Safari.app/Contents/MacOS/UpdateHelper
标识符
xxxxx.SafariFlashActivity
xxxxxx.preexcl.project

