MacSync窃密软件感染分析:从流量捕获到Swift恶意代码的技术解剖

本文深入分析了MacSync Stealer在macOS系统上的感染过程。通过对网络流量捕获文件(pcap)和恶意代码的技术剖析,揭示了该窃密软件从签名的Swift可执行文件到内存执行脚本的完整攻击链,并提供了详细的入侵指标(IoCs)。

2025-12-23 (星期二): MACSYNC窃密软件感染

关联文件

  • 2025-12-23-MacSync-Stealer-IoCs.txt.zip - 1.0 kB (1,030 字节)
  • 2025-12-23-MacSync-Stealer-traffic.pcap.zip - 83.4 kB (83,447 字节)
  • 2025-12-23-MacSync-Stealer-malware.zip - 31.5 MB (31,547,913 字节)

参考

来自Jamf威胁实验室的文章:《从ClickFix到代码签名:MacSync窃密软件的悄然转变》

说明

这篇文章提供了在macOS系统上运行MacSync窃密软件后观察到的感染流量数据包捕获文件(pcap)。
我修改了pcap文件,破坏了从C2(命令与控制)流量中外泄的zip压缩包,以避免泄露我的主机信息。
zkcall[.]net网站也提供了Windows恶意软件(DonutLoader)和Linux恶意软件的下载链接(Linux链接无效)。

关联的恶意软件

  • SHA256哈希值:b591bfbab57cc69ce985fbc426002ef00826605257de0547f20ebcfecc3724c2

  • 文件大小:31,476,506 字节

  • 文件名:zk-call-messenger-installer-3.9.2-lts.dmg

  • 获取来源:hxxps[:]//zkcall[.]net/api/download?fileId=350&versionId=5&os=MACOS_APPLE&section=/download

  • 文件类型:Macintosh磁盘映像,lzfse编码,lzvn压缩

  • 文件描述:下载的用于MacSync窃密软件的DMG映像文件

  • SHA256哈希值:173ff5ede7c28163ceaa9440de8a02cef26295f8be06b6b0f90b0a4284471bc2

  • 文件大小:308,576 字节

  • 文件名:devupdatesuite-helper

  • 文件类型:包含2种架构的Mach-O通用二进制文件:[x86_64:Mach-O 64位可执行文件 x86_64] [arm64:Mach-O 64位可执行文件 arm64]

  • 文件描述:从DMG文件中提取的installer.app内容中得到的MacSync窃密软件的Mach-O可执行文件

由Mach-O二进制文件产生的流量

  • 感染日期/时间:2025-12-23 03:52 UTC
  • obsidiangate[.]space - HTTPS流量 (TLSv1.3)
  • focusgroovy[.]com - GET请求 /dynamic?txd=985683bd660c0c47c6be513a2d1f0a554d52d241714bb17fb18ab0d0f8cc2dc6
  • focusgroovy[.]com - POST请求 /gate

参考链接


Jamf威胁实验室博客文章摘要

简介

Jamf威胁实验室在审查内部YARA规则的检测时,发现了一个已签名且经过公证的窃密软件,其执行链与以往所见不同。该样本与日益活跃的MacSync窃密软件的以往变种高度相似,但在设计上进行了革新。

与早期主要依赖“拖拽到终端”或“ClickFix”式技术的变种不同,此样本采用了更具欺骗性、无需手动干预的方法。它以名为zk-call-messenger-installer-3.9.2-lts.dmg的磁盘映像形式分发,其中包含一个经过代码签名和公证的Swift应用程序,通过https://zkcall.net/download分发。它无需任何直接的终端交互,而是通过一个Swift构建的辅助可执行文件从远程服务器获取并执行编码后的脚本。

初始检测

大多数与MacSync窃密软件相关的载荷主要在内存中运行,在磁盘上留下的痕迹很少。早期的变种通常依赖于“拖拽到终端”方法(用户将脚本文件拖入终端)或“ClickFix”式技术(诱骗用户粘贴base64编码的命令)。两种情况下,有效载荷都使用base64 -D解码,用gunzip解压缩,存储在变量中并使用eval执行,然后通过curl获取第二阶段的有效载荷。

然而,在此案例中,是一个用于监视执行混淆Bash脚本的威胁防护(YARA)规则发出了警报,突显了与之前行为微妙但重要的偏差。

Swift架构的Mach-O二进制文件简要分析

_main 函数

_main函数作为二进制文件的入口点。它设置应用程序状态和日志路径,执行基本的互联网连接检查,如果成功,则检索第二阶段的有效载荷。

  • 使用_NSHomeDirectory()解析用户的主目录。
  • ~/Library/Logs/UserSyncWorker.log创建日志文件。
  • ~/Library/Application Support/UserSyncWorker/创建目录,并维护last_upgate等文件以跟踪执行时间和更新状态。
  • 记录开始执行的消息,并定义大约3600秒的最小间隔,以防止可执行文件在短时间内多次运行。
  • 通过checkInternet()检查互联网连接,仅在确认连通后才继续执行runInstaller()

_runInstaller() 函数

runInstaller()函数实现了完整的第二阶段执行逻辑,充当下载器和执行例程。

  • 速率限制:读取~/Library/Application Support/UserSyncWorker/last_up中存储的时间戳。如果文件不存在或上次执行超过约3600秒,则继续执行。
  • 环境检查:再次调用checkInternet(),并删除/tmp/runner/tmp目录下先前丢弃的文件。
  • 网络请求:准备一个条件性HTTP请求到特定URL,并使用特定的用户代理UserSyncWorker/1.0 (macOS)。该请求通过NSTask使用/bin/zsh -lc构建,有效载荷被写入/tmp/runner,验证头信息写入/tmp/runner.headers
  • 执行前准备:通过removeQuarantine(at:)移除com.apple.quarantine属性,并使用_NSFilePosixPermissions将文件权限设置为750以确保可执行。
  • 验证:使用/usr/bin/file --mime-type -b检查有效载荷是否为脚本(text/x-shellscript)。同时运行/usr/bin/file -b验证输出是否包含预期的字符串。然后使用spctl -a -v执行Gatekeeper检查。
  • 清理与更新:执行完成后,从磁盘删除/tmp/runner有效载荷,并将当前时间戳写回~/Library/Application Support/UserSyncWorker/last_update以强制下次运行前的最小间隔。

结论

虽然MacSync窃密软件本身并非全新,但此案例突显了其作者如何持续改进其分发方法。我们之前未观察到这种特定的投放器,它以基于Swift、经过代码签名和公证的应用程序形式出现,悄无声息地检索并执行第二阶段的有效载荷。

这种分发方式的转变反映了整个macOS恶意软件领域更广泛的趋势,攻击者越来越多地尝试将恶意软件隐藏在已签名和公证的可执行文件中,使其看起来更像合法的应用程序。通过利用这些技术,对手减少了被早期检测到的机会。


图像说明

  1. 上图显示:下载初始文件(一个DMG映像文件)。
  2. 上图显示:从DMG映像文件到恶意Mach-O文件。
  3. 上图显示:由MacSync窃密软件产生的流量。
  4. 上图显示:通过MacSync窃密软件样本产生的网络流量外泄数据的示例。

点击此处返回主页

版权 © 2025 | Malware-Traffic-Analysis.net

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计