随着终端安全防护能力不断提升,攻击者逐渐减少对浏览器漏洞利用的依赖,转而通过社会工程方式诱导用户主动执行恶意指令。ClickFix 作为近年来较为活跃的一类攻击方式,并不直接突破浏览器安全机制,而是利用用户对下载、验证、系统修复等场景的信任,将恶意操作伪装成正常流程,引导用户将网页中的命令复制至本地终端执行。
在 macOS 环境中,Terminal、zsh、AppleScript、osascript 以及 LaunchAgent 等系统原生组件为用户提供了丰富的自动化能力,同时也可能成为攻击者构建攻击链的重要工具。本案例围绕一组面向 macOS 用户的 ClickFix 样本展开分析,该样本伪装在破解软件下载流程中,通过伪下载页面诱导用户执行终端命令,随后加载 AppleScript 载荷,实现凭据获取、本地信息收集、数据归档、上传流程触发以及用户级持久化。
本文基于隔离虚拟环境中的样本复现结果,结合终端执行记录、macOS 统一日志、网络时间线、LaunchAgent 状态信息以及上传前 ZIP 归档等多类证据,对完整攻击链进行重构。同时,文章重点区分样本具备的攻击能力、本次实验环境中已经发生的行为以及基于证据进行的高可信推断,避免将脚本逻辑与实际执行结果混淆。
通过分析发现,该样本形成了一条较完整的攻击路径:
网页诱导 → 用户复制执行命令 → Shell 加载脚本 → AppleScript 执行 → 凭据诱导 → 敏感数据收集 → ZIP 打包 → 上传流程 → LaunchAgent 持久化 → 周期性回连
研究结果表明,针对 ClickFix 类攻击,仅依靠传统 IOC 检测难以覆盖完整攻击过程,需要结合浏览器行为、终端执行链、脚本解释器调用、敏感目录访问以及持久化行为进行跨阶段关联分析。
ClickFix;macOS 安全;AppleScript;osascript;LaunchAgent;数字取证;社会工程攻击;凭据窃取
近年来,随着浏览器安全机制、下载保护机制以及权限控制策略不断完善,传统依靠浏览器漏洞直接执行恶意代码的攻击方式成本持续增加。攻击者开始更多利用用户行为作为突破口,通过伪造可信场景、制造操作压力以及隐藏真实执行意图,引导受害者主动完成攻击链中的关键步骤。
ClickFix 正是在这一背景下出现的一类典型社会工程攻击模式。
与传统恶意软件直接利用漏洞不同,ClickFix 的核心并非突破浏览器安全边界,而是利用用户对网页提示的信任,将本应停留在浏览器中的操作迁移至本地命令环境。例如,攻击页面可能伪装成验证码验证、软件下载、系统更新或兼容性修复页面,要求用户打开 Terminal,并执行页面提供的一段命令。
一旦用户完成复制和执行,攻击流程便从浏览器环境进入操作系统环境。此时,攻击者可以利用系统自带工具完成后续操作,例如:
在 macOS 平台中,攻击者尤其偏好利用系统原生组件完成攻击,因为这些工具本身属于正常系统功能,能够降低异常行为暴露概率。
本文研究的样本即采用类似方式,将恶意逻辑隐藏于破解软件下载流程中。攻击者通过伪造软件下载步骤,使用户认为打开 Terminal、执行命令以及输入密码属于安装流程的一部分,从而降低用户安全意识。
需要说明的是,本文并不将 ClickFix 定义为一种完全新的攻击技术,而是针对一个具体 macOS 样本展开取证分析。研究重点在于:
本文主要围绕以下证据展开分析:
通过对上述证据进行关联,可以较完整地还原该攻击链从入口诱导到持久化运行的全过程。
本次分析案例发生于破解软件下载环境。
与常见的 Fake CAPTCHA 类型 ClickFix 攻击不同,该样本并未采用“完成验证码验证”的话术,而是将恶意操作包装为软件下载过程中的必要步骤,例如:
这种场景具有较强迷惑性。
对于正在寻找破解软件的用户而言,其本身已经处于非官方软件获取环境,对“额外执行安装命令”“关闭安全限制”“输入账户密码”等行为的接受程度更高。因此,攻击者能够借助用户已有心理预期,将高风险操作包装成正常安装流程。
从样本代码和页面内容来看,该攻击链具有明显 macOS 定向特征。
诱导页面包含:
Open Terminal on your Mac
等提示,引导用户打开 macOS 终端环境。
后续脚本进一步调用:
这些行为均围绕 macOS 用户环境设计。
本文建立如下威胁模型:
攻击者:
受害环境:
在该模型下,攻击者无需突破系统权限边界,而是通过用户授权获得执行条件。
后续章节将围绕攻击链不同阶段展开分析,包括:
本次分析工作基于隔离虚拟环境完成,实验平台采用 Parallels Desktop 运行 macOS 26.4.1 虚拟机。为模拟真实用户环境,同时保证网络行为可观察,实验环境配置 Clash TUN 模式作为统一流量出口。
通过 TUN 虚拟网卡,浏览器访问、curl 请求、osascript 执行过程以及后续心跳通信均经过同一网络路径,从而能够在网络日志中形成较完整的时间记录。
该方式主要用于两个目的:
第一,对样本执行过程中访问的域名、连接时间以及通信周期进行记录,为攻击链时间线建立基础。
第二,将网络层行为与本地执行行为进行关联,例如:
为了方便后续分析,本文对实验环境中的敏感信息进行了统一脱敏处理:
~;<uid> 表示;本次分析涉及的主要证据包括:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其中:
loader.sh
用于分析攻击者第一阶段加载逻辑;
payload.applescript
用于分析后续凭据获取、数据收集和持久化行为;
日志文件用于确认样本是否真实执行;
ZIP 归档用于验证样本在当前环境中实际收集到的数据范围。
为了避免直接执行未知代码带来的风险,本文首先采用静态分析方式对样本进行处理。
分析流程如下:
诱导页面命令提取
↓
Base64 数据解码
↓
远程地址解析
↓
下载第一阶段脚本
↓
静态分析 loader.sh
↓
获取第二阶段 AppleScript
↓
分析功能逻辑
↓
受控环境执行验证
首先,从诱导页面提供的终端命令中提取隐藏数据。
该命令并非直接暴露真实下载地址,而是通过编码方式隐藏远程资源位置。
经过离线解码后,可以发现其真实作用包括:
随后,对获取到的 loader.sh 进行静态分析。
该文件并未直接保存完整逻辑,而是采用:
这种方式能够降低人工分析效率,同时避免简单字符串扫描直接发现关键内容。
完成第一阶段解析后,进一步提取第二阶段:
payload.applescript
并对 AppleScript 内容进行逐段分析。
重点关注:
本文采用的原则是:
先理解样本能力,再进行受控执行。
避免在未知样本结构情况下直接运行,导致证据污染或无法准确判断攻击行为。
完成静态分析后,本文在隔离环境中执行完整攻击链,并同步启动多维度监控。
监控范围包括:
通过终端录制方式保存:
该证据用于证明:
网页诱导命令是否真实执行。
macOS 系统日志用于观察:
该日志可以补充终端记录无法覆盖的信息。
重点关注:
等位置。
用于确认:
通过 Clash TUN 日志记录:
用于关联:
入口页面访问;
样本下载;
状态上报;
心跳回连。
除原始执行链外,本文还进行了受控重跑实验。
目的不是重新模拟攻击,而是在阻断后续上传的情况下,保存样本生成的本地 ZIP 文件。
流程如下:
清理历史 LaunchAgent
↓
加载分析版 AppleScript
↓
等待 ZIP 生成
↓
复制 /tmp/shub_log.zip
↓
终止后续上传流程
↓
离线分析归档内容
通过该方式,可以直接观察:
需要明确的是:
受控重跑并不是新的恶意样本。
其基础仍然来源于同一个:
payload.applescript
区别在于:
原始运行:
受控重跑:
两者目的不同:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
因此:
受控重跑得到的 ZIP 可以证明:
该样本在当前实验环境下具备生成该类归档的能力,并且相关数据确实进入归档阶段。
但不能直接等同:
历史真实运行上传到服务器的 ZIP 内容。
本文采用时间线关联方式重构攻击链。
核心思路不是单独分析某一个日志,而是将多个来源中的事件进行对应。
例如:
终端日志:
01:01:38
用户执行诱导命令
↓
网络日志:
01:01:38
访问样本服务器
↓
系统日志:
01:01:41
osascript启动
↓
文件日志:
01:02:01
LaunchAgent创建
↓
launchctl:
runs持续增加
通过这种方式,可以形成:
网页诱导
↓
终端执行
↓
脚本加载
↓
数据收集
↓
持久化
↓
周期回连
完整行为链。
为了避免过度推断,本文将证据划分为四类:
包括:
用于证明:
样本具备哪些功能。
包括:
用于证明:
哪些行为已经发生。
包括:
用于证明:
样本与外部基础设施存在通信行为。
包括:
用于证明:
哪些数据实际进入上传前阶段。
同时,需要明确以下限制:
网络日志只能证明:
某时间访问某域名。
无法证明:
因此:
本文不会将脚本中的状态字段直接作为服务器端结果证明。
所有结论均按照:
已确认事实 > 高可信推断 > 未确认事项
进行划分。
本案例攻击流程可以概括为:
搜索入口
↓
破解软件下载页面
↓
伪下载页面诱导执行命令
↓
Terminal 执行 Shell 指令
↓
下载 loader.sh
↓
加载 AppleScript 载荷
↓
诱导输入账户密码
↓
收集敏感数据
↓
生成 ZIP 归档
↓
上传流程触发
↓
LaunchAgent 持久化
↓
周期性心跳通信
图1 本案例 macOS ClickFix 攻击链流程。
与传统恶意软件直接投递可执行文件不同,该样本首先利用用户行为完成初始突破。攻击者并未尝试绕过 macOS 安全机制,而是通过伪造可信操作场景,使用户主动执行攻击命令。
本案例入口并非典型验证码页面,而是围绕破解软件下载构造的诱导流程。
攻击路径如下:
这种方式利用了用户对于“破解软件安装复杂”“需要额外步骤”的心理预期。
攻击者并没有告诉用户:
执行远程脚本。
而是包装为:
因此,用户更容易忽略命令本身存在的风险。
页面中包含类似:
Open Terminal on your Mac
的提示。
随后要求用户:
这种流程符合 ClickFix 的核心特点:
攻击者不直接执行代码,而是诱导用户完成关键执行动作。
对于普通用户而言:
在软件下载场景下并不一定明显异常。
这正是攻击者利用的心理基础。
本案例网络证据主要来自 Clash TUN 日志。
该日志记录了攻击过程中关键域名访问时间,可用于关联: