新闻公告使用手机扫一扫查看
< 返回

从破解软件下载到系统失陷一次 macOS攻击链深度复盘

2026-08-03 18:26 作者:数掘云算 阅读量:8

摘要

随着终端安全防护能力不断提升,攻击者逐渐减少对浏览器漏洞利用的依赖,转而通过社会工程方式诱导用户主动执行恶意指令。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,并执行页面提供的一段命令。

一旦用户完成复制和执行,攻击流程便从浏览器环境进入操作系统环境。此时,攻击者可以利用系统自带工具完成后续操作,例如:

  • Shell 解释器执行远程脚本;
  • AppleScript 控制系统交互;
  • osascript 调用系统自动化能力;
  • LaunchAgent 建立用户级持久化;
  • 系统目录访问实现数据收集。

在 macOS 平台中,攻击者尤其偏好利用系统原生组件完成攻击,因为这些工具本身属于正常系统功能,能够降低异常行为暴露概率。

本文研究的样本即采用类似方式,将恶意逻辑隐藏于破解软件下载流程中。攻击者通过伪造软件下载步骤,使用户认为打开 Terminal、执行命令以及输入密码属于安装流程的一部分,从而降低用户安全意识。

需要说明的是,本文并不将 ClickFix 定义为一种完全新的攻击技术,而是针对一个具体 macOS 样本展开取证分析。研究重点在于:

  1. 如何从多个证据来源还原完整攻击流程;
  2. 如何判断哪些行为已经发生;
  3. 如何区分样本能力与实际执行结果;
  4. 如何建立针对 ClickFix 类攻击的检测模型。

本文主要围绕以下证据展开分析:

  • 第一阶段 Shell 加载脚本 loader.sh;
  • 第二阶段 AppleScript 载荷 payload.applescript;
  • Terminal 执行记录;
  • macOS Unified Log;
  • Clash TUN 网络日志;
  • LaunchAgent 持久化文件;
  • 上传前 ZIP 归档样本。

通过对上述证据进行关联,可以较完整地还原该攻击链从入口诱导到持久化运行的全过程。


1 案例背景:破解软件下载场景中的 ClickFix 攻击

本次分析案例发生于破解软件下载环境。

与常见的 Fake CAPTCHA 类型 ClickFix 攻击不同,该样本并未采用“完成验证码验证”的话术,而是将恶意操作包装为软件下载过程中的必要步骤,例如:

  • 下载前系统更新;
  • 软件兼容性修复;
  • 安装环境初始化;
  • macOS 设置调整。

这种场景具有较强迷惑性。

对于正在寻找破解软件的用户而言,其本身已经处于非官方软件获取环境,对“额外执行安装命令”“关闭安全限制”“输入账户密码”等行为的接受程度更高。因此,攻击者能够借助用户已有心理预期,将高风险操作包装成正常安装流程。


1.1 macOS 定向攻击特点与威胁模型

从样本代码和页面内容来看,该攻击链具有明显 macOS 定向特征。

诱导页面包含:

Open Terminal on your Mac

等提示,引导用户打开 macOS 终端环境。

后续脚本进一步调用:

  • osascript;
  • AppleScript;
  • LaunchAgent;
  • Keychain;
  • Safari;
  • Notes;
  • 钱包应用路径。

这些行为均围绕 macOS 用户环境设计。

本文建立如下威胁模型:

攻击者:

  • 控制诱导页面;
  • 控制样本下载地址;
  • 控制二阶段载荷;
  • 接收状态信息和回连数据。

受害环境:

  • 使用普通 macOS 用户账户;
  • 用户主动复制网页命令;
  • 用户根据提示输入本机登录密码;
  • 样本获得用户会话权限。

在该模型下,攻击者无需突破系统权限边界,而是通过用户授权获得执行条件。

后续章节将围绕攻击链不同阶段展开分析,包括:

  • 初始访问与社工诱导;
  • Shell 加载过程;
  • AppleScript 行为分析;
  • 凭据获取流程;
  • 数据收集与归档;
  • LaunchAgent 持久化;
  • 网络回连行为。

2 研究设计与多源证据关联方法

2.1 实验环境与证据材料

本次分析工作基于隔离虚拟环境完成,实验平台采用 Parallels Desktop 运行 macOS 26.4.1 虚拟机。为模拟真实用户环境,同时保证网络行为可观察,实验环境配置 Clash TUN 模式作为统一流量出口。

通过 TUN 虚拟网卡,浏览器访问、curl 请求、osascript 执行过程以及后续心跳通信均经过同一网络路径,从而能够在网络日志中形成较完整的时间记录。

该方式主要用于两个目的:

第一,对样本执行过程中访问的域名、连接时间以及通信周期进行记录,为攻击链时间线建立基础。

第二,将网络层行为与本地执行行为进行关联,例如:

  • 页面访问时间;
  • Shell 命令执行时间;
  • 样本下载时间;
  • AppleScript 启动时间;
  • LaunchAgent 创建时间;
  • 后续周期回连时间。

为了方便后续分析,本文对实验环境中的敏感信息进行了统一脱敏处理:

  • 用户目录统一表示为 ~
  • 用户 UID 使用 <uid> 表示;
  • 本地文件名称采用分析编号形式。

本次分析涉及的主要证据包括:

类型
证据文件
第一阶段脚本
downloads/loader.sh
第二阶段载荷
downloads/payload.applescript
持久化文件
persistence/com.google.keystone.agent.plist
持久化执行文件
persistence/GoogleUpdate
终端执行记录
logs/terminal-typescript-run2.txt
macOS 系统日志
logs/unified-live-run2.log
LaunchAgent 状态
logs/launchctl_google_keystone_after.txt
网络访问记录
logs/clash_attack_excerpt.txt
服务日志
logs/service_2026-04-24_00-14-57.log
上传前归档
captured_zip/shub_log_2026-04-28_15-53-45.zip
页面截图
assets/*.jpg

其中:

loader.sh

用于分析攻击者第一阶段加载逻辑;

payload.applescript

用于分析后续凭据获取、数据收集和持久化行为;

日志文件用于确认样本是否真实执行;

ZIP 归档用于验证样本在当前环境中实际收集到的数据范围。


2.2 样本获取与解码分析

为了避免直接执行未知代码带来的风险,本文首先采用静态分析方式对样本进行处理。

分析流程如下:

诱导页面命令提取
        ↓
Base64 数据解码
        ↓
远程地址解析
        ↓
下载第一阶段脚本
        ↓
静态分析 loader.sh
        ↓
获取第二阶段 AppleScript
        ↓
分析功能逻辑
        ↓
受控环境执行验证

首先,从诱导页面提供的终端命令中提取隐藏数据。

该命令并非直接暴露真实下载地址,而是通过编码方式隐藏远程资源位置。

经过离线解码后,可以发现其真实作用包括:

  • 构造远程脚本地址;
  • 下载第一阶段加载器;
  • 调用 zsh 执行脚本。

随后,对获取到的 loader.sh 进行静态分析。

该文件并未直接保存完整逻辑,而是采用:

  • Base64 编码;
  • Gzip 压缩;
  • 运行时解码;
  • eval 执行。

这种方式能够降低人工分析效率,同时避免简单字符串扫描直接发现关键内容。

完成第一阶段解析后,进一步提取第二阶段:

payload.applescript

并对 AppleScript 内容进行逐段分析。

重点关注:

  • 用户交互行为;
  • 密码验证逻辑;
  • 文件收集范围;
  • 数据压缩方式;
  • 网络通信接口;
  • 持久化实现。

本文采用的原则是:

先理解样本能力,再进行受控执行。

避免在未知样本结构情况下直接运行,导致证据污染或无法准确判断攻击行为。


2.3 行为执行与多源监控

完成静态分析后,本文在隔离环境中执行完整攻击链,并同步启动多维度监控。

监控范围包括:

(1)终端行为记录

通过终端录制方式保存:

  • 用户执行命令;
  • Shell 输出;
  • 脚本调用过程;
  • 样本运行结果。

该证据用于证明:

网页诱导命令是否真实执行。


(2)macOS Unified Log

macOS 系统日志用于观察:

  • osascript 调用;
  • 系统权限交互;
  • 文件访问;
  • 应用行为;
  • 安全组件事件。

该日志可以补充终端记录无法覆盖的信息。


(3)文件系统变化

重点关注:

  • ~/Library/LaunchAgents/
  • Application Support/
  • /tmp/

等位置。

用于确认:

  • 样本是否落地;
  • 是否生成持久化文件;
  • 是否创建临时归档。

(4)网络行为监控

通过 Clash TUN 日志记录:

  • 请求目标;
  • 时间节点;
  • 通信周期。

用于关联:

入口页面访问;

样本下载;

状态上报;

心跳回连。


(5)归档证据保全

除原始执行链外,本文还进行了受控重跑实验。

目的不是重新模拟攻击,而是在阻断后续上传的情况下,保存样本生成的本地 ZIP 文件。

流程如下:

清理历史 LaunchAgent
        ↓
加载分析版 AppleScript
        ↓
等待 ZIP 生成
        ↓
复制 /tmp/shub_log.zip
        ↓
终止后续上传流程
        ↓
离线分析归档内容

通过该方式,可以直接观察:

  • 哪些文件进入归档;
  • 哪些数据复制成功;
  • 哪些访问受到 macOS 权限限制。

2.4 原始执行链与受控重跑的关系

需要明确的是:

受控重跑并不是新的恶意样本。

其基础仍然来源于同一个:

payload.applescript

区别在于:

原始运行:

  • 按完整攻击流程执行;
  • 允许进入上传和持久化阶段。

受控重跑:

  • 保留核心数据收集逻辑;
  • 阻断真实上传;
  • 保存上传前 ZIP 文件。

两者目的不同:

项目
历史真实运行
受控重跑
样本来源
原始样本
同一样本修改副本
数据收集
执行
执行
ZIP生成
执行
执行
上传
可能执行
阻断
持久化
执行
阻断
目的
观察真实行为
获取直接证据

因此:

受控重跑得到的 ZIP 可以证明:

该样本在当前实验环境下具备生成该类归档的能力,并且相关数据确实进入归档阶段。

但不能直接等同:

历史真实运行上传到服务器的 ZIP 内容。


2.5 跨证据源关联方法

本文采用时间线关联方式重构攻击链。

核心思路不是单独分析某一个日志,而是将多个来源中的事件进行对应。

例如:

终端日志:

01:01:38
用户执行诱导命令

网络日志:

01:01:38
访问样本服务器

系统日志:

01:01:41
osascript启动

文件日志:

01:02:01
LaunchAgent创建

launchctl:

runs持续增加

通过这种方式,可以形成:

网页诱导
    ↓
终端执行
    ↓
脚本加载
    ↓
数据收集
    ↓
持久化
    ↓
周期回连

完整行为链。


2.6 证据边界与分析原则

为了避免过度推断,本文将证据划分为四类:

第一类:脚本能力证据

包括:

  • loader.sh;
  • payload.applescript;
  • plist;
  • GoogleUpdate。

用于证明:

样本具备哪些功能。


第二类:本地执行证据

包括:

  • Terminal 记录;
  • Unified Log;
  • 文件时间;
  • launchctl。

用于证明:

哪些行为已经发生。


第三类:网络时间线证据

包括:

  • 域名访问;
  • 时间关系;
  • 回连周期。

用于证明:

样本与外部基础设施存在通信行为。


第四类:归档证据

包括:

  • ZIP 文件;
  • manifest;
  • 解压内容。

用于证明:

哪些数据实际进入上传前阶段。


同时,需要明确以下限制:

网络日志只能证明:

某时间访问某域名。

无法证明:

  • HTTPS 请求内容;
  • 服务端响应;
  • 攻击者是否成功接收数据。

因此:

本文不会将脚本中的状态字段直接作为服务器端结果证明。

所有结论均按照:

已确认事实 > 高可信推断 > 未确认事项

进行划分。

3 攻击链复现与行为分析

本案例攻击流程可以概括为:

搜索入口
    ↓
破解软件下载页面
    ↓
伪下载页面诱导执行命令
    ↓
Terminal 执行 Shell 指令
    ↓
下载 loader.sh
    ↓
加载 AppleScript 载荷
    ↓
诱导输入账户密码
    ↓
收集敏感数据
    ↓
生成 ZIP 归档
    ↓
上传流程触发
    ↓
LaunchAgent 持久化
    ↓
周期性心跳通信

图1 本案例 macOS ClickFix 攻击链流程。

与传统恶意软件直接投递可执行文件不同,该样本首先利用用户行为完成初始突破。攻击者并未尝试绕过 macOS 安全机制,而是通过伪造可信操作场景,使用户主动执行攻击命令。


3.1 初始投递与社会工程诱导

3.1.1 破解软件下载场景

本案例入口并非典型验证码页面,而是围绕破解软件下载构造的诱导流程。

攻击路径如下:

  1. 用户搜索破解软件相关关键词;
  2. 搜索结果跳转至第三方下载页面;
  3. 页面提供“Direct Download”等下载按钮;
  4. 点击后进入伪下载页面;
  5. 页面提示用户打开 Terminal;
  6. 用户复制网页提供命令并执行。

这种方式利用了用户对于“破解软件安装复杂”“需要额外步骤”的心理预期。

攻击者并没有告诉用户:

执行远程脚本。

而是包装为:

  • 下载助手;
  • 系统更新;
  • 兼容性修复;
  • 软件安装准备。

因此,用户更容易忽略命令本身存在的风险。


3.1.2 诱导页面行为分析

页面中包含类似:

Open Terminal on your Mac

的提示。

随后要求用户:

  1. 打开终端;
  2. 粘贴页面命令;
  3. 按 Enter 执行;
  4. 根据提示输入密码。

这种流程符合 ClickFix 的核心特点:

攻击者不直接执行代码,而是诱导用户完成关键执行动作。

对于普通用户而言:

  • 打开 Terminal;
  • 输入密码;
  • 执行安装命令;

在软件下载场景下并不一定明显异常。

这正是攻击者利用的心理基础。


3.2 网络时间线与第一阶段命令执行

本案例网络证据主要来自 Clash TUN 日志。

该日志记录了攻击过程中关键域名访问时间,可用于关联:

    &a
联系我们
返回顶部