概述
微软威胁情报团队在野外发现了XCSSET恶意软件的另一个变种,该变种在2025年3月博客文章描述的基础上引入了进一步更新和新模块。XCSSET恶意软件旨在感染通常由软件开发人员使用的Xcode项目,并在构建Xcode项目时运行。我们评估这种感染和传播模式依赖于在构建Apple或macOS相关应用程序的开发人员之间共享项目文件。
这个新的XCSSET变种带来了与浏览器目标、剪贴板劫持和持久化机制相关的关键变化。它采用复杂的加密和混淆技术,使用仅运行的编译AppleScript进行隐蔽执行,并将其数据泄露能力扩展到包括Firefox浏览器数据。它还通过LaunchDaemon条目添加了另一种持久化机制。
该变种具有一个设计用于监控剪贴板的子模块,并引用包含与各种数字钱包关联的地址正则表达式模式的下载配置文件。如果检测到模式匹配,XCSSET能够用其自己预定义的钱包地址集替换剪贴板内容。
技术分析
最新的XCSSET变种遵循四阶段感染链。前三个阶段与之前变种中观察到的阶段一致,如我们之前的博客所述。此分析从第四阶段开始,该阶段包括boot()函数及其相关的下载和运行子模块的调用。
第四阶段脚本的boot()函数
新变种引入了对引导函数的修改。这些包括对Firefox浏览器的额外检查和修改的Telegram存在检查逻辑。此阶段还具有多个它下载和执行的新模块。
旧变种:
|
|
新变种:
|
|
vexyeqj [旧变种:seizecj](信息窃取器)
与之前的变种相比,此脚本中的几个命令被注释掉。此外,它下载一个名为bnk的模块,该模块使用osascript执行,域作为参数提供。然后它等待三秒钟并删除下载的文件。
|
|
bnk文件是一个仅运行的编译AppleScript。直接反编译仅运行的编译AppleScript通常被认为具有挑战性或不可行;但是,Github上的AppleScript反汇编程序项目可用于反汇编代码进行分析。
该脚本定义了多个函数,用于数据验证、加密、解密、从命令和控制(C2)获取额外数据以及日志记录等目的。该脚本以域作为其参数执行。
|
|
上面是dec()函数的代码片段,用于解密从C2服务器接收的数据。解析上述内容得到命令:
在引用的代码中,加密数据存储在变量in中。该变量的前32个字符被提取用作初始化向量(IV)。然后剩余的数据进行Base64解码并提供给AES解密函数。在这种情况下,解密密钥是预定义的常量27860c1670a8d2f3de7bbc74cd754121,该常量在主函数内建立和计算。
解码的blob似乎是一个配置文件。下面是从C2服务器获得的解密响应的格式化和编辑示例:
|
|
以下部分检查下载的bnk有效负载的核心逻辑,解释先前的信息如何被解释和应用。
首先,它调用定义的函数从C2服务器获取配置数据;该数据被解密并存储在变量中。执行Shell命令以检索SerialNumber和当前用户。
检索剪贴板内容,这是通过检查AEVT(Apple事件代码)代码确定的。然后该过程识别最前面的应用程序,该应用程序根据C2响应中“bad”属性定义的阻止列表进行检查。仅当当前剪贴板数据与最后一个剪贴板条目和最后一个替换的剪贴板数据都不同,剪贴板数据的长度超过25个字符,并且oD()函数不返回true时,处理才继续进行。oD()函数在前四个字符是数字时返回true。经过上述检查后,它然后有多个门和条件。第一个条件检查剪贴板长度是否在50 < len(clipboard) < 300之间。然后检查剪贴板是否匹配响应中s记录定义的模式。如果匹配,剪贴板数据以记录类型字符串格式化并泄露到C2服务器。传输的数据也是AES加密的。
在第二个条件中,脚本验证剪贴板长度是否在25到65之间,是否使用单个参数执行,以及cD(clipboard_data)函数是否返回大于1的值,该值指传递参数中数据的数字计数。如果满足这些条件,脚本迭代C2响应中的子集合,其中包括各个钱包的单独条目。每个子集合条目包含:
- a:包含从中选择一个的地址列表;相应的剪贴板数据随后被替换。
- t:指钱包标识符。
- r:指定用于匹配与此钱包关联的地址的正则表达式模式。
- ir(可选):表示否定正则表达式模式;匹配此模式的地址应被排除。
- p:似乎用作计数器或记录索引。
对于每个记录,它匹配r和ir的模式。如果变量r为true且ir为false,则程序检查剪贴板内容是否匹配任何攻击者的地址。如果不匹配,它从列表中选择一个地址并相应地替换剪贴板的内容。系统随后将信息(包括原始剪贴板数据、替换的数据、钱包名称、最前面的应用程序和其他相关细节)发送到C2服务器。接下来,它将剪贴板数据的值分配给xcP变量,该变量跟踪最近替换的剪贴板条目。最后,它更新xP变量以反映当前剪贴板文本,等待两秒钟,并重复循环。
neq_cdyd_ilvcmwx(文件窃取器)
此模块从C2服务器检索额外的脚本,该脚本保存在/tmp/目录中。随后使用提供的域和moduleName作为参数执行该脚本。执行后,删除下载的文件。该模块作为编译的仅运行AppleScript运行。该脚本与之前被识别为针对浏览器的数字钱包数据窃取器的txzx_vostfdi模块相似。在分析期间,C2服务器未提供文件夹列表;但是,它能够将文件泄露回C2服务器。
|
|
xmyyeqjx(基于LaunchDaemon的持久化)
此子模块为在此模块中创建的~/.root文件设置LaunchDaemon持久化。以下是脚本的摘要:
该过程首先在用户的HOME目录中创建几个路径和一个~/.root文件,该文件将包含有效负载。有效负载执行以下操作:
- 将目录更改为/Users/Shared
- 检查网络连接
- 检索本地登录用户
- 睡眠30秒
- 在登录用户的上下文中执行~/.zshrc文件(.zshrc文件在之前的子模块中附加了恶意有效负载)
- 睡眠30秒
- 修改两个配置以执行系统命令,禁用macOS自动配置更新和快速安全响应机制。
这些命令修改macOS软件更新首选项以禁用各种关键的Apple更新,包括快速安全响应(RSR)、安全配置更新等。
然后它调用doMainFunc()函数。
|
|
此函数首先检查LaunchDaemon条目的存在,其内容中存在.root文件。如果未找到,它从C2服务器下载另一个脚本,该脚本又是一个仅运行的编译AppleScript。然后在/tmp目录中创建一个名为System Settings.app的虚假应用程序,该应用程序基本上使用两个参数执行此下载的AppleScript。这些参数似乎是Label/Plist名称和要持久化的文件(~/.root文件)。创建虚假应用程序后,它调用另一个函数,在该函数中它等待合法的系统设置应用程序启动,然后执行虚假应用程序。此行为旨在伪装自己为合法。
下载的脚本首先通过执行Shell命令获取设备的序列号和当前用户名。然后形成LaunchDaemon plist文件的路径并构建其内容。它使用echo命令将此构建的内容粘贴到LaunchDaemon文件。文件名是参数中传递的名称。下面是创建的plist文件的示例:
|
|
它在plist名称中使用前缀com.google.进行伪装,并使用bash执行~/.root文件。使用“do shell script …. with administrator privileges”运行echo命令,这可以由badm AEVT代码暗示。然后执行chown命令将所有者更改为root:wheel,并对plist文件设置644权限。最后,使用sudo执行launchctl load -w命令以启动守护进程。
jey(基于Git的持久化)
旧变种中的命令通过Shell直接执行加密有效负载与重复解密命令的直接连接。在新变种中,解密逻辑封装在Shell函数内,该函数内联定义,然后在传递给Shell执行之前用于解密加密字符串。此更改主要增强了恶意软件使用的混淆方法。
旧逻辑:
|
|
新逻辑:
|
|
iewmilh_cdyd(针对Firefox的信息窃取器)
此新变种添加了一个信息窃取模块以泄露Firefox存储的数据。首先调用runMe()函数从C2服务器下载一个Mach-O FAT二进制文件,该文件负责所有信息窃取操作。
|
|
此下载的二进制文件似乎是Github项目HackBrowserData的修改版本,该版本能够解密和导出浏览器存储的浏览器数据。密码、历史记录、信用卡信息和cookie是它可以从几乎所有流行浏览器提取的一些关键信息。
下载后,二进制文件被授予可执行文件权限,在受害者的机器上进行临时签名,并使用–b firefox -f json –dir ” & resDir & ” –zip作为参数执行:
- -b:浏览器名称
- -f:输出数据的格式
- –dir:存储输出的导出目录
- –zip:此标志将输出存储在压缩ZIP中
一旦所有数据被检索,它使用其旧的数据分块泄露方法将压缩的ZIP和日志文件上传到C2服务器。
缓解和保护指南
防御者可以采取以下缓解步骤来防御此威胁:
- 运行最新版本的操作系统和应用程序。一旦安全更新可用,立即部署。
- 始终检查并验证从存储库下载或克隆的Xcode项目,因为恶意软件通常通过受感染的项目传播。
- 在复制和粘贴剪贴板中的敏感数据时要小心。始终验证粘贴的内容是否与预期来源匹配,以避免成为剪贴板劫持或数据篡改攻击的受害者。
- 鼓励用户使用支持Microsoft Defender SmartScreen的Web浏览器,如Microsoft Edge(可在macOS和各种平台上使用),它识别并阻止恶意网站,包括网络钓鱼网站、诈骗网站以及包含漏洞和托管恶意软件的网站。
- 使用Mac上的Microsoft Defender for Endpoint,它检测、阻止和隔离此博客中讨论的恶意软件。
Microsoft Defender for Endpoint客户还可以应用以下缓解措施以减少环境攻击面并减轻此威胁及其有效负载的影响:
- 在Microsoft Defender防病毒上开启云提供的保护和自动样本提交。这些功能使用人工智能和机器学习快速识别和阻止新的未知威胁。
- 启用阻止模式中的潜在不需要应用程序(PUA)保护以自动隔离PUA,如广告软件。PUA阻止在下次签名更新或计算机重启后在端点客户端生效。
- 开启网络保护以阻止与恶意域和IP地址的连接。
Microsoft Defender XDR检测
Microsoft Defender XDR客户可以参考下面的适用检测列表。Microsoft Defender XDR协调端点、身份、电子邮件、应用程序的检测、预防、调查和响应,以提供针对如此博客中讨论的威胁的综合保护。
战术 | 观察到的活动 | Microsoft Defender覆盖 |
---|---|---|
初始访问 | – 恶意Xcode项目 | Microsoft Defender防病毒 – Trojan:MacOS/XCSSET.PB Microsoft Defender for Endpoint – Possible XCSSET activity |
执行 | – 恶意命令执行 – 恶意文件执行 – 恶意osascript执行 | Microsoft Defender防病毒 – Behaviour:MacOS/SuspOsascriptExec.B – Behaviour:MacOS/SuspOsascriptExec.C – Trojan:MacOS/XCSSET.AB – Trojan:MacOS/XCSSET.BA – Trojan:MacOS/XCSSET.SE – Behavior:MacOS/SuspXcssetBehavior.AT – Trojan:MacOS/XCSSET.ST – Trojan:MacOS/XCSSET.SB – Trojan:MacOS/XCSSET.SC Microsoft Defender for Endpoint – Suspicious file dropped and launched – Suspicious script launched – Network connection by osascript – Suspicious process launched from a world-writable directory |
持久化 | – 隐藏的LaunchDaemon持久化 | Microsoft Defender防病毒 – Behavior:MacOS/SuspHiddenPersistence.A1 Microsoft Defender for Endpoint – Suspicious Plist modifications – Suspicious launchctl tool activity |
防御规避 | – 可疑的混淆命令 | Microsoft Defender for Endpoint – Suspicious file or information obfuscation detected |
凭据访问 | – 使用修改的HackBrowserData项目 | Microsoft Defender防病毒 – Trojan:MacOS/HackBrowserData.A |
影响 | – Xcode项目感染 | Microsoft Defender防病毒 – Behavior:MacOS/XCSSET.A |
注意:有关与旧XCSSET变种相关的检测,请参阅我们2025年3月的博客文章。
威胁情报报告
Microsoft客户可以在Microsoft产品中使用以下报告,以获取有关此博客中讨论的威胁行为者、恶意活动和技术的最新信息。这些报告提供情报、保护信息以及建议的操作,以预防、缓解或响应在客户环境中发现的关联威胁。
- Microsoft Defender XDR威胁分析
- 工具配置文件:XCSSET
狩猎查询
Microsoft Defender XDR
Microsoft Defender XDR客户可以运行以下查询以在其网络中找到相关活动:
构建Xcode项目时的可疑命令 搜索构建Xcode项目时与此XCSSET相关的可疑命令。
|
|
XCSSET信息窃取模块执行的可疑命令 搜索与从C2接收的数据解密逻辑相关的可疑命令。
|
|
可疑应用程序创建 搜索此XCSSET在Temp文件夹中创建的可疑应用程序。
|
|
Microsoft Sentinel
Microsoft Sentinel客户可以使用TI映射分析(一系列以前缀“TI map”开头的分析)自动将此博客文章中提到的恶意域指示器与其工作区中的数据匹配。如果当前未部署TI Map分析,客户可以从Microsoft Sentinel内容中心安装威胁情报解决方案,以在其Sentinel工作区中部署分析规则。
以下是使用Sentinel高级安全信息模型(ASIM)函数跨Microsoft第一方和第三方数据源狩猎威胁的查询。ASIM还支持使用ARM模板或手动从GitHub将解析器部署到特定工作区。
使用ASIM检测网络IP和域妥协指示器 以下查询检查ASIM网络会话解析器支持的数据源中的IP地址和域IOC:
|
|
使用ASIM检测域和URL妥协指示器 以下查询检查ASIM Web会话解析器支持的数据源中的域和URL IOC。
|
|
妥协指示器(IOC)
指示器 | 类型 | 描述 |
---|---|---|
cdntor[.]ru | 域 | C2服务器 |
checkcdn[.]ru | 域 | C2服务器 |
cdcache[.]ru | 域 | C2服务器 |
applecdn[.]ru | 域 | C2服务器 |
flowcdn[.]ru | 域 | C2服务器 |
elasticdns[.]ru | 域 | C2服务器 |
rublenet[.]ru | 域 | C2服务器 |
figmastars[.]ru | 域 | C2服务器 |
bulksec[.]ru | 域 | C2服务器 |
dobetrix[.]ru | 域 | C2服务器 |
figmacat[.]ru | 域 | C2服务器 |
digichat[.]ru | 域 | C2服务器 |
diggimax[.]ru | 域 | C2服务器 |
cdnroute[.]ru | 域 | C2服务器 |
sigmanow[.]ru | 域 | C2服务器 |
fixmates[.]ru | 域 | C2服务器 |
mdscache[.]ru | 域 | C2服务器 |
trinitysol[.]ru | 域 | C2服务器 |
verifysign[.]ru | 域 | C2服务器 |
digitalcdn[.]ru | 域 | C2服务器 |
windsecure[.]ru | 域 | C2服务器 |
dobecdn[.]ru | 域 | C2服务器 |
12ea52c4089d100e679a2350f03e598b2f3feebfbbd2ed5631a2a7a20b07e826 | SHA-256 | /tmp/ancr(修改版本的HackBrowserData Github项目) |
5a212c5ce1e0f41e721ce0940afb381b694a2e32a6d19c1d2210f703636362df | SHA-256 | /tmp/b(第四阶段有效负载) |
0fbd0e1995472f308cf1ac8229a02c277035404426769fa50947a72c95ad7d31 | SHA-256 | jey(通过Git提交建立持久化) |
f3bc158619b2aad17def966f0ac8dddc2107e4911a7c488d358d906f27ac2a2b | SHA-256 | /tmp/xmyyeqjx(基于LaunchDaemon的持久化) |
参考
- https://www.microsoft.com/en-us/security/blog/2025/03/11/new-xcsset-malware-adds-new-obfuscation-persistence-techniques-to-infect-xcode-projects/
- https://github.com/Jinmo/applescript-disassembler
- https://www.trendmicro.com/en_us/research/20/h/xcsset-mac-malware–infects-xcode-projects–uses-0-days.html
- https://documents.trendmicro.com/assets/pdf/XCSSET_Technical_Brief.pdf
- https://www.intego.com/mac-security-blog/mac-malware-exposed-xcsset-an-advanced-new-threat/
- https://www.jamf.com/blog/osx-xcsset-subverts-developer-environments/
- https://www.sentinelone.com/blog/xcsset-malware-update-macos-threat-actors-prepare-for-life-without-python/