导语:又一款冲着 macOS 用户来的狠货——AmnesiaStealer。Jamf Threat Labs 在野外捕获到它,发现这玩意儿不光是传统的”拷钥匙串、偷浏览器数据”,还藏了一个叫 stream_module 的第三阶段模块。攻击者直接在被控主机上起一个无头 Chromium(无界面 Chrome),把受害者的浏览器配置文件整个搬过去,然后通过 Chrome DevTools Protocol(Chrome 远程调试协议,简称 CDP)实时操控已经登录的会话——等于把受害者当成浏览器肉鸡。
一、传播链:伪装 GitHub + 一行 Terminal 命令
AmnesiaStealer 用的是老套但有效的 ClickFix(点击诱饵)套路。攻击者注册了一个模仿 GitHub 的钓鱼域名 github.aoitour[.]com,把页面做成深色主题、Octocat 吉祥物、还带个 “Verified Publisher” 绿章,标题赫然写着 “Download for macOS”。但下面不是下载按钮,而是一个叫 “Terminal installation” 的命令框——号称”给高级用户的便捷安装”,一步步引导你打开 Spotlight、启动终端、粘贴、敲回车、在第三步”输入你的设备密码确认安装”。

点 Copy 按钮拷出来的是一段 base64 编码的命令,解码后是一个 shell 脚本 loader。它会从 /d/command 路径拉取一个小脚本,下载一个密码保护的 ZIP 包(解压密码是 dulin,专门用来绕过自动化查杀),里面装着 AmnesiaStealer 的 Mach-O(macOS 原生可执行格式)载荷。解压出来的二进制被改名为 /tmp/.com.apple.dt.——看着像 Apple 的开发工具文件名,纯混淆用。
执行前还有三步标准操作:chmod +x 赋予可执行权限、codesign --force --deep --sign - 加个临时自签名、xattr -cr 把隔离属性抹掉。这一套流程玩得很溜。
Jamf 特别指出:这个钓鱼页面模板不是 AmnesiaStealer 原创的,Atomic (AMOS)、MacSync 这些 macOS 信息窃取器家族早就用过同一套东西。换句话说,这套”假 GitHub 终端安装”模板已经在黑产圈子里被多个家族共享复用。
二、三阶段攻击链:Rust 写的、连开发者名字都露了
整个恶意软件分成三个阶段:
Stage 0——上面的 shell loader,已经讲过。
Stage 1——基于 Rust 写的 FAT Mach-O 通用二进制,SHA-256 哈希 de5748aac4a4d4cb48cf050652679e6bc49eda33d9ffaa0d280b578122fab55a。Jamf 抓到的样本里残留了开发者痕迹——Rust 的 .cargo 路径暴露了开发者的 home 目录 /Users/admin/.cargo/、项目相对路径 target/release、以及一些调试函数名(dump_mail、run_controller、/tmp/mail_accounts_smoke)。更狠的是,作者居然在 release 版本里保留了一套完整的调试日志框架,所有日志都带 [HYBRID_DEBUG] 前缀——直接把整个决策树给研究团队看了。
配置文件藏在二进制内部,是个 4064 字节的加密 blob(加密数据块),用 15 字节的 XOR 循环密钥 4mn3s1a_2o26!xK 解密。Jamf 直接拿这把钥匙解开了全部配置,C2(命令控制服务器)端点、构建参数、BUILD_ID、token 全都在里面。攻击者有 builder 工具链,每个 build 写一套参数——典型的”恶意软件即服务”(MaaS)运营模式。
Stage 2——就是今天的主角 stream_module。这东西不内置在主程序里,要等主程序收到 remote_stream 命令才会从 C2 拉下来。一旦加载,它会给攻击者提供”远程控制受害者的浏览器”的超能力。
三、stream_module:把受害者当浏览器肉鸡
传统信息窃取器干到 Stage 1 就完了——把 cookie、密码、keychain(macOS 钥匙串,存储各种账号密码)、钱包数据打包回传,攻击者事后自己登录去用。但 AmnesiaStealer 的 Stage 2 直接换了个思路:不偷数据,让受害者的浏览器继续开着,攻击者直接远程操控。
具体操作:
stream_module 会把受害者的 Chromium 配置文件整个复制一份——Google Chrome、Microsoft Edge、Vivaldi、Arc、Opera、Brave、Chromium 这七个浏览器由于共享同一个 DevTools Protocol、启动参数和 cookie 加密方案,都能被克隆。它会在后台启动合法的浏览器可执行文件,加一堆命令参数把浏览器防御拉低,然后把这个克隆出来的 profile 加载进去。
接着,stream_module 建立两条 WebSocket(双向通信协议)通道:
第一条连回攻击者的中继服务器,注册的时候把浏览器名和 build 版本用 JSON 发过去。攻击者通过这条通道下发键盘、鼠标、滚动、导航、标签管理命令,模块把屏幕画面以约 3fps 的速度用二进制 WebSocket 消息回传——相当于是个低帧率的远程桌面。
第二条连到本地那个无头 Chromium 实例的 webSocketDebuggerUrl,这是 Chrome DevTools Protocol 提供的接口。CDP 允许你以编程方式控制浏览器:导航、点击、输入、导入导出 cookie、调用任何 DevTools API——完全访问受害者已经登录的所有网站后台。
Jamf 在实验室里复现了一下,整个画面是这样的:”攻击者能拿到约 3fps 的实时屏幕串流,通过完整的输入集操作:键盘、鼠标、滚动、导航、标签管理。remote_stream 命令直接把被感染主机变成一个活的、由攻击者驱动的浏览器,跑着受害者的认证会话——这种访问层级跟单纯偷文件不是一个级别的。”
这意味着什么?受害者已经登录了网银、邮箱、社交媒体后台、企业 SaaS 系统——攻击者不需要破解密码、不需要绕过 2FA,直接在受害者本人的浏览器环境里操作。任何基于”设备指纹+cookie+IP”的反欺诈逻辑在这种攻击下都形同虚设,因为攻击就是从受害者本人的浏览器、受害者本人的网络环境发出的。

四、macOS 26 的陷阱:故意把密码清零
AmnesiaStealer 还针对 macOS 26 做了特殊处理。Jamf 发现,当它运行在最新系统上、且无法恢复现有 Chrome Safe Storage key(Chrome 用来加密本地 cookie 的密钥)时,会用攻击者提供的新 key 替代它。
这个设计很阴险:受害者原有的 cookie 和密码用旧 key 加密的,现在旧 key 没了,新 key 在攻击者手里——受害者本机上的 cookie 永久无法解密,但攻击者可以用新 key 在远程解密这些数据。
五、检测与防御
AmnesiaStealer 的 SHA-256、相关域名、URL path 已经被 Jamf 公布。Apple 平台用户应当:
- 永远不要在终端里粘贴不理解来源的命令——这是 ClickFix 类攻击的核心前提
- 启用 macOS 的 XProtect(macOS 自带恶意软件防护)和 Gatekeeper(应用来源验证),不要随便用
xattr -cr抹隔离属性 - 监控
/tmp/.com.apple.dt.*这种 Apple 伪装文件名——正常 Apple 进程不会放在/tmp下 - 留意网络流量里异常的 WebSocket 长连接到非业务域名
- 企业环境部署 Jamf 等 MDM(移动设备管理)系统,集中管控应用安装源
- 对高度敏感账户启用硬件安全密钥做二次认证,避开浏览器 cookie 这一层
- 定期更换重要账户密码,不依赖浏览器保存的密码管理器
Jamf 这篇报告是 8 月 13 日发的,AmnesiaStealer 已经在野外活跃了一段时间。Rust 写恶意软件这事不新鲜,但把 stream_module 这种”浏览器远程控制”做成可分发模块的,AmnesiaStealer 是第一个被记录的 macOS 家族。Chaos 勒索软件用过 CDP 隐藏 C2 流量,Chaes 恶意软件用过 CDP 暴露浏览器函数——但把这套技术与”克隆 profile + 实时远程操控”组合起来用于信息窃取的,AmnesiaStealer 是头一个。














暂无评论内容