
最近,卡巴斯基安全团队公开了一份新报告:一个叫 MacSync 的 macOS 信息窃取木马升级了投毒手法——它把下一阶段的恶意命令,藏进了一个公开的 iCloud 日历里,让受害者的 Mac 自己把日历内容一行行"念"进终端,念到哪行哪行执行。
很多人看到这新闻的第一反应是:日历也能传病毒?还有一部分人的反应是:无所谓,Mac 又不会中毒。
这两句都不太对。这次事件最有价值的技术细节,恰恰在于攻击者没有黑进苹果的任何服务器,而是把苹果自家可信服务当成了免费的中转站。今天咱们就掰开揉碎讲清楚:这条感染链是怎么一环扣一环跑通的,为什么它让传统的杀毒软件很被动,以及开发者为什么是这波攻击的头号目标。
一、事件复盘
先交代背景。MacSync 是一个 macOS 平台的信息窃取木马家族,最早在 2025 年以暗网代号 Mac.c 的身份出现,血统上源自臭名昭著的 AMOS 窃密家族。它走的是恶意软件即服务模式:作者把木马当商品出租,每个买家自己挑诱饵、自己搞分发,所以市面上出现的样本五花八门。
卡巴斯基在 2026 年 9 月的野外样本中发现了一个改动非常大的新版本,并在 9 月下旬发布了完整分析。按其恶意软件分析师 Sergey Puzan 的说法,这次攻击者做了两个大手术:
- 从脚本换成了二进制。早期版本用 AppleScript 脚本做投放器,新版改成了用 Swift 和 Objective-C 编写的完整可执行文件,还做了反调试和虚拟机检测;
- 用上了苹果自己的基础设施。至少在一个样本里,下一阶段载荷的下载地址指向一个公开的 iCloud 日历。
整个攻击的入口是典型的钓鱼套路:一个名为 Toria 的假加密钱包应用,配了像模像样的官网,在 X 和 Telegram 上做推广。用户下载到的是一个 DMG 安装镜像,双击运行的那一刻,后面那条长长的感染链就开始转了。
木马到手之后偷什么?清单相当长:浏览器历史、Cookie、保存的登录密码、加密钱包插件和应用数据、Telegram 数据、钥匙串文件、登录密码,以及SSH、AWS、Kubernetes、Git 的配置文件和 shell 命令历史。它还会在系统里安一个伪装成 Finder 的后门,长期驻留。
需要说明的是:目前没有证据显示苹果的 iCloud 服务本身被入侵,攻击者利用的是一个任何人都可创建的公开日历来存放文本——被攻破的是用户的信任链,不是苹果的服务器。
二、技术核心拆解
1. 日历怎么变成攻击载体的?
这是本次事件最值得讲的技术细节,原理其实很朴素:日历文件就是一份纯文本,而 zsh 不挑食。
攻击链走到中段时,木马会解密出一个下载地址,指向那个公开 iCloud 日历。然后它开了个匿名管道,用 zsh -s(从标准输入读命令的 shell 模式)启动一个 shell,把整个日历文件一行一行喂进去:
- 日历开头的标题、时间、地点等内容,zsh 全都当成无效命令报错了事,不影响运行;
- 而在日历事件的 DESCRIPTION 字段之后,攻击者埋好的恶意命令被 shell 读到,直接执行;
- 这些命令再从 iCloud 上下载一个压缩包,里面装着真正的恶意程序。
相当于把一封"藏头诗"直接喂给终端:前面全是废话,念到关键那几句,事情就办了。
这个设计的狡猾之处在于通道选择。企业安全策略里最常见的做法是"按域名信誉封堵"——恶意软件总得连某个坏人的服务器拿指令,把那些域名和 IP 拉黑就行。可这次载荷挂在 iCloud 上,域名是苹果家的,绝大多数企业的网络策略默认放行苹果流量。要拦它,你就得去解析和审查 Apple 自家服务的流量,成本完全不是一个量级。
2. 为什么杀毒软件也很被动?
第二个技术亮点是脚本全程不落盘。
传统杀毒的工作方式是扫描磁盘上的文件特征。而这条链里,最关键的 shell 脚本从头到尾没有以文件形式存在过——它是被当作文本流,直接灌进 zsh 的标准输入的。磁盘上没有文件,特征扫描就没有扫描对象。
安全厂商的应对思路只能转向行为分析:盯着进程血缘看,比如"一个由管道供数的 zsh 进程是谁启动的""一个刚挂载的 DMG 里的程序为什么在调用 xattr"。这要求终端防护具备进程链追溯能力,而不是只认文件黑名单。
顺带说几个链上的精细操作,都是老手才有的手艺:
- 第一阶段的程序先检查自己有没有被 macOS 打上隔离标记(com.apple.quarantine),有就用 xattr 命令悄悄摘掉,绕过 Gatekeeper 的首次运行拦截;
- 解密下一阶段地址时用了自定义的异或算法,密钥藏在二进制文件自己的附加数据里;
- 每一级投放器把临时文件放在 /tmp,创建 .lock 文件防止重复运行,干完活就把临时文件和日志删干净。
3. 后门伪装成 Finder,还堵住了系统提醒
窃密模块负责偷,后门模块负责长期驻留。这个用 Objective-C 写的后门有几手值得注意:
- 伪装成 Finder:通过一个名为 com.apple.finder.agent 的 LaunchAgent 实现开机自启,普通用户在进程列表里看到它,很容易当成系统组件放过;
- 三重持久化:除了 LaunchAgent,还会往用户的 .zshrc 里塞启动命令,并且往全局 Git 钩子(pre-commit、post-checkout)里注入命令——这一招明显是冲着开发者来的,后面细说;
- 压制系统通知:它会主动结束 macOS 负责后台任务提醒的几个系统进程,让用户看不到"有新启动项"之类的告警;
- 接收远端下发的 AppleScript 执行,能力包括部署恶意浏览器扩展、把本地的 Ledger 硬件钱包配套应用替换成远端下发的版本、重新抓取数据等。
窃密模块里还有个技术细节:它在弹假的管理员密码框后,用的是 PAM 接口验证用户输的密码对不对——而不是 macOS 恶意软件常用的 dscl 工具。密码对了才继续演,演的内容是弹一个"应用已损坏,是否移到废纸篓"的假提示,让用户以为程序死了,实则一切照常进行。用 PAM 验证密码这个手法,今年 7 月才首次在野外出现,属于刚流行起来的新招。
4. 三层风险怎么看
- 功能风险:中了之后终端就不再是"你的"电脑——浏览器流量可能被中间人篡改,钱包应用可能被换成假版本,Git 钩子会在你每次提交代码时执行攻击者的命令;
- 安全风险:SSH 私钥、云平台凭据、Kubernetes 配置一次性打包带走,攻击者可以直接登录你的服务器和云账号,从个人设备失陷升级为企业内网渗透;
- 合规风险:对企业来说,开发机上客户数据、源代码、凭据被批量外传,可能触发数据泄露通报义务;用失陷开发者的合法凭据访问公司系统,事后审计时很难说清"是不是本人操作"。
三、常见技术误区
误区一:Mac 病毒少,不用装防护、不用小心
这是流传最广也最危险的一句老话。现实是 macOS 恶意软件早已产业链化——MacSync 本身就是明码标价对外出租的服务,买家挑好诱饵就能开工。macOS 的安全机制(公证、隔离标记、Gatekeeper)确实比早年强很多,但这次报告里它们一个接一个被绕过:隔离标记用 xattr 摘除,密码框用 PAM 验证以假乱真。平台安全机制抬高的是攻击成本,不是免疫凭证。正确姿势是把 Mac 当作和 Windows 一样需要基本防护的联网设备。
误区二:iCloud 是苹果的服务,从 iCloud 来的东西可信
这次事件恰恰是在打"信任大厂基础设施"这张脸。攻击者用的只是 iCloud 的公开日历功能——任何人都能建一个公开日历往里写内容,苹果既不知道也没义务审查日历描述字段里写的是不是恶意命令。"域名可信"和"内容可信"是两码事:域名属于苹果,内容属于任何人。推而广之,凡是"利用大厂服务做中转"的攻击(比如用对象存储托管载荷、用正规网盘分发样本),都不能靠封域名解决,得靠内容和行为层面的检测。
误区三:我不炒币、不用钱包,这木马跟我没关系
看清楚那份窃密清单:SSH 配置和私钥、AWS 凭据、Kubernetes 配置、Git 配置、shell 历史——这些几乎每个开发者机器上都有,而且值钱程度不亚于钱包,因为它们是通往公司服务器和云资源的钥匙。更阴的是那手全局 Git 钩子持久化:后门不靠开机自启这一条腿走路,你在任何仓库里执行一次提交或切换分支,钩子里的命令就跟着跑一次,清掉启动项也杀不干净。开发者机器失陷的杀伤半径,从来不止一台电脑。
四、实操指引
普通 Mac 用户可以做的:
- 只从官方渠道装应用:App Store 或开发者的官方网站。对社交平台上"新出的免费钱包""破解版付费软件"保持本能警惕——这次那个假钱包应用连官网都做了,光看页面像样不解决问题;
- 双击运行 DMG 后,如果系统弹窗要求输入管理员密码,先想清楚这个应用凭什么需要管理员权限;输完密码又弹"应用已损坏"的提示,基本可以确定中招,立刻断网排查;
- 不要把网上复制的命令直接粘贴进终端执行,尤其是"一键安装脚本"。粘贴前先看一遍内容,很多攻击的入口就是用户自己替攻击者按下了回车。
开发者可以做的:
- 自查三处高危位置:.zshrc 文件末尾有没有不明命令;执行 git config --global core.hooksPath 看全局钩子路径有没有被改;~/.ssh、~/.aws、kubeconfig 这些目录的文件最近修改时间是否正常;
- SSH 私钥和云平台凭据定期轮换,给云账号开硬件密钥或 TOTP 两步验证,别让"偷走配置文件等于拿到钥匙"这件事成立;
- 有条件的话在终端装一个具备进程链分析的防护工具,重点盯"带标准输入管道的 zsh 进程"和"摘除隔离标记的 xattr 调用"这两类行为。
企业管理员可以做的:
- 终端侧监控这几类信号:/tmp 目录下的 .lock 文件、名为 com.apple.finder.agent 的 LaunchAgent、进程对 BTMNotificationAgent 等系统提醒进程的终止操作;
- 网络侧留意出站 HTTP 流量里带自定义头的请求(本次后门用 X-Upload-Token 这类非标准头与控制端通信),并对开发网段的 Apple 域名大流量异常保持警觉;
- 把"开发机凭据泄露"纳入应急演练场景:一旦某台开发机失陷,SSH 密钥、云凭据、Git 仓库访问权限的作废和轮换流程要能在小时内跑完,而不是等安全团队开会。
五、结尾
这次 MacSync 事件里没有惊天漏洞,攻击者用的每一个零件——公开日历、管道喂脚本、xattr 摘隔离、假密码框——单拎出来都不新鲜。可怕的是把它们组装成了一条让文件扫描和域名封堵双双失效的流水线,而且整体打包出租,几百美元就能买来对开发者下钩。
它给所有 Mac 用户、尤其是开发者提了个醒:安全性从来不取决于平台的口碑,而取决于你信任了什么。这次被滥用的是苹果的日历,下次可能是任何一家大厂的任何一项"天然可信"的服务。对个人来说,守住"来源不明的应用不装、来路不明的命令不执行"这两条底线,比装什么安全软件都管用。
如果这篇文章帮你看清了"日历藏毒"这套操作的原理,欢迎转发给身边用 Mac 写代码的朋友。关于"大厂基础设施被攻击者当中转站"这个趋势,你怎么看?评论区聊聊。