做红队这几年,我最大的感受是:Windows 上的套路已经卷到天花板,反而是 macOS 靶标经常被人忽略。可现实里,企业里用 Mac 的开发、产品、高管的占比越来越高,BYOD 一普及,macOS 就是一条躲不开的真实攻击面。这篇文章想聊的,是我在实际授权项目里反复打磨的一套组合——用 DarwinOps 来构建包含 Mythic C2 agent 的 macOS 武器化载荷。不是什么理论推演,全是实操里踩出来的经验。
Mythic 是目前开源 C2 里我非常推荐的一个框架,它把 agent、C2 profile 和任务管理全容器化,界面友好,跨平台支持也不错。而 DarwinOps 则负责 macOS 侧的脏活累活:把 agent 打包成可执行的 app bundle、处理签名、做基本的持久化。两者搭配之后,我可以在 15 分钟内从一个全新的服务器环境,跑起来一条可控的 macOS 回连链路。
这篇文章适合三类人看:一类是正在搭 macOS 红队流程的同伴,一类是想了解 C2 载荷落地的安全研究员,还有一类是负责防守的蓝队工程师——了解攻击怎么做,才知道检测该从哪下手。这看着像“攻击教程”,但我默认的前提始终是:所有操作都在授权测试或自建实验环境里进行。这不是免责声明,是红队的基本素养。
1. 整体设计与思路拆解
1.1 为什么 macOS 是红队场景里绕不开的目标
很多红队团队在分配任务时,习惯性把 macOS 归到“非主流”那一类,觉得只要有 Windows 权限就能横向一切。但现实是,过去三四年里企业环境中的 macOS 数量增长得非常快。研发、设计、市场、高管,几乎每个团队都有 Mac 用户。有些公司甚至全员配发 MacBook,Windows 反而成了少数派。
这意味着什么?意味着如果攻击者的初始入口是一封钓鱼邮件,而目标是 Mac 用户,那么载荷必须是 macOS 能跑的格式,C2 通信也要适配 macOS 的网络栈和权限模型。Windows 下的 exe、dll、计划任务,一套全搬不过来。
macOS 和 Windows 在红队视角里最大的差异,我总结为三个层面:
- 签名与公证体系:macOS 的 Gatekeeper 会检查应用是否被 Apple 公证过,未签名或签名异常的应用会被直接拦下。Windows 虽然有 SmartScreen,但很多时候企业环境里并没有强制启用。
- 沙盒与 TCC 权限:macOS 的沙盒和 TCC(透明、同意与控制)权限模型会让载荷在访问摄像头、麦克风、桌面文件、通讯录时弹窗或静默失败。处理不当,载荷会“看起来活着,但实际上什么都干不了”。
- 文件系统与持久化机制:LaunchAgent、LaunchDaemon、登录项、SMAppService,这些机制和 Windows 的注册表、服务完全不同,误用会导致载荷无法随开机启动。
这些问题叠加在一起,就把 macOS 红队变成了一块既麻烦又少人深入研究的领域。麻烦意味着门槛,少人研究意味着机会。对红队来说,这是值得重点投入的方向。
1.2 DarwinOps 与 Mythic C2 的组合逻辑
DarwinOps 这个名字你可能没听过。它不是那种大众视野里的“黑客工具”,更准确地说,它是一套面向 macOS 载荷构建的操作链路。我在团队实践里把它封装成命令行工具,输入是我们的 agent 二进制,输出是一个可以直接分发到目标机器上的 app bundle,中间自动处理包结构、Info.plist 生成、代码签名、属性清理这些杂事。
为什么要单独做这么一层?因为 Mythic 虽然能跨平台生成很多 agent,但 agent 生成完只是裸的 Mach-O 文件,离“能在 Mac 上双击运行”还有很长的路。Mythic 管的是 C2 的控制面,而载荷在 macOS 上能不能活下来,取决于签名、打包、权限这些细节。这两块逻辑如果混在一起,会非常难维护。
所以我把流程拆成两层:Mythic 负责 agent 的生成和通信调度,DarwinOps 负责 macOS 侧的“最后一公里”。这样做的最大好处是解耦,我可以随时换一种 agent 生成方式,或者升级 Mythic 版本,DarwinOps 不需要跟着大改;反过来,如果 Apple 升级了签名策略,我也只需要在 DarwinOps 这一层做适配,而不需要动 C2 架构。
从项目结构上看,DarwinOps 通常分成三条支线:Mach-O 载荷生成、app bundle 打包、签名与公证辅助。每条支线对应一个独立的子命令,方便在自动化流水线里调用。
1.3 为什么选用 Mythic 而不是其他 C2
不是没试过其他方案。Metasploit 的 Meterpreter 在 macOS 上能用,但特征太老,现在很多 EDR 都能精确识别它的内存特征。Cobalt Strike 在红队圈子里是事实标准,但它是商业软件,License 成本高,而且它的跨平台 agent 其实主要还是 Windows 生态,macOS 下可用的功能有限。Sliver 是 Go 写的,跨平台不错,但它的生态和插件机制没有 Mythic 那么丰富。
Mythic 相对它们的优势,我用一个表格直接展示:
| 对比维度 | Mythic | Sliver | Cobalt Strike |
|---|---|---|---|
| 开源免费 | 是 | 是 | 否,商业授权 |
| 跨平台 agent | 好,官方支持 macOS/Linux/Windows | 好 | 偏 Windows |
