导语:2026年3月,Jamf Threat Labs与JFrog Security Research联合揭露了一场针对macOS用户的恶意软件活动。GhostClaw/GhostLoader利用GitHub仓库和AI辅助开发工作流传播,专门针对开发者社区。本文完整翻译Jamf Threat Labs的技术分析报告,并从蓝队视角提供防御建议。

一、引言
2026年3月初,JFrog Security Research[2] 发布了一份关于代号为GhostClaw/GhostLoader的恶意软件活动的技术文档。
自该活动的最初文档发布以来,Jamf Threat Labs审查了与此活动相关的多个GitHub仓库,包括至少八个新识别的样本。在分析这些仓库的过程中,我们发现了额外的基础设施和之前未记录的感染媒介,证明这场活动的传播范围已经超出了早期研究中描述的基于npm的交付机制。
这种分发方式的转变扩大了感染对象的范围,从原本仅针对从npm安装包的开发人员,扩展到包括任何愿意执行来自在线说明的命令的用户或自动化工作流。
二、通过恶意GitHub仓库进行初始访问
虽然之前的报告主要关注恶意npm包作为主要交付机制,但与此同时,一种利用GitHub仓库的并行分发方法也在进行中。这些仓库冒充合法工具,包括交易机器人、SDK和开发人员实用程序,设计初衷就是让它们在第一眼看上去就可信。
在已识别的几个仓库中,已经积累了相当高的参与度,在一些情况下超过了数百颗星标,进一步强化了它们被感知的合法性。
在观察到的案例中,仓库最初填充的是良性或部分功能的代码,在一段时间内保持不变,然后才引入恶意组件。这种暂存可能有助于在交付恶意载荷之前建立信任并提高可见度。
2.1 通过README说明进行手动安装
在最直接的情况下,仓库包含一个README文件,其中有分步安装说明,鼓励用户执行shell命令,通常使用curl来检索和运行远程脚本。
这种技术严重依赖用户交互和信任。通过将命令作为标准安装工作流的一部分呈现,攻击者绕过了与包管理器相关的传统安全措施,直接在系统上执行代码。
2.2 通过AI辅助工作流进行安装(OpenClaw)
除了这些针对开发人员的诱饵之外,第二种变体是包含SKILL.md文件的仓库。这些仓库针对的是AI辅助开发工作流,在这种工作流中,编码代理会自动从GitHub发现并安装外部”技能”。
在这些情况下,SKILL.md文件本身看起来是良性的,定义了命令、依赖项和执行入口点等元数据。恶意行为并没有在清单本身中暴露。相反,执行发生在安装阶段。
为了使用该技能,开发人员和AI代理通常都遵循仓库提供的设置步骤,例如运行install.sh或安装依赖项。这些操作会触发与其他变体观察到的相同的执行链。
这一点值得注意,因为攻击者不再仅仅依赖用户交互,而是利用标准安装工作流和对开发工具隐含的信任来代表用户执行代码。这在诸如OpenClaw之类的AI辅助开发框架中尤为相关,在这些框架中,外部”技能”直接从仓库安装。
因此,相同的基础恶意软件可以通过传统的用户驱动工作流和自动化的代理驱动交互来交付。
三、执行链与多阶段载荷交付
无论初始访问方式如何,所有观察到的变体的执行都遵循一致的多阶段链,旨在建立执行、收集凭据和检索额外的载荷。
3.1 通过install.sh进行引导
当用户或自动化代理运行提供的安装命令时,执行开始。这会检索并执行install.sh,它作为初始引导程序。
乍一看,该脚本执行一系列合法的设置任务。它识别主机架构和macOS版本,检查Node.js是否已存在,并在需要时安装兼容的版本。值得注意的是,这个安装在用户控制的目录中进行,避免了提升权限的需要,并减少了执行过程中的怀疑。
在此过程中,脚本使用curl的-k(–insecure)标志检索Node.js:
这会在下载期间禁用TLS证书验证。虽然功能正常,但此行为在合法安装程序中并不常见,它通过允许无需证书验证的连接来降低传输安全性。
然后脚本调用感染链的下一阶段:
GHOST_PASSWORD_ONLY环境变量控制setup.js内的执行行为。当设置为0时,脚本呈现完整的交互式安装流程,包括进度指示器和用户提示。在分析的变体中,观察到了该值的差异。在大多数仓库中,变量设置为0,导致在凭据提示之前出现带有进度输出的品牌化安装体验。在至少一个变体中(例如,一个下载器主题的仓库),值设置为1,导致简化的执行路径,专注于凭据收集而无需额外的用户界面元素。
最后,脚本调用:
这将从基于shell的交付过渡到混淆的JavaScript载荷。
3.2 凭据窃取与载荷检索(setup.js)
setup.js JavaScript包含恶意软件的核心功能,并被严重混淆以阻碍分析。执行后,它执行一系列旨在欺骗用户和收集凭据的操作。
为了减少可见性,脚本会清除终端并显示虚假的进度指示器,模仿合法的SDK安装过程。随后是在终端中直接显示的凭据提示:Password:
尽管此提示与系统认证行为一致,但它是脚本本身生成的,而不是原生的macOS认证提示。然后使用以下命令验证提供的密码:
dscl . -authonly {username} {password}
这利用合法的macOS二进制文件来验证凭据,而无需调用标准的系统认证对话框或框架。类似的技术已在以凭据为重点的恶意软件中观察到,包括信息窃取器,用于捕获和验证用户密码。
除了终端提示之外,脚本还可以使用AppleScript显示原生外观的对话框:
这些对话框设计为类似于macOS安全提示,并指示用户授予访问权限或提供凭据。在分析期间观察到的变体冒充不同的应用程序,包括开发工具和交易平台,同时围绕访问”安全钱包和凭据存储”保持一致的消息。
如果尚未授予完全磁盘访问权限(FDA),脚本会显示一个额外的AppleScript对话框,引导用户启用它。此对话框包括分步说明和一个按钮,使用以下命令打开相关的系统设置窗格:
open x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles
这将引导用户到隐私与安全 -> 完全磁盘访问设置。如果授予访问权限,恶意软件将获得访问受FDA保护的数据的能力,包括用户应用程序数据和其他敏感的系统工件。
一旦获得有效的凭据,脚本就会联系远程命令与控制(C2)服务器以检索加密的二级载荷。载荷是从trackpipe[.]dev获取的,使用嵌入在请求路径中的唯一标识符。响应包含加密数据,该数据在本地解密并写入磁盘到临时位置,使用随机化的文件名模式:
/tmp/sys-opt-{random}.js
此载荷与GhostLoader一致,如JFrog Security Research所记录的。它作为分离进程执行,允许它独立于初始脚本继续运行,捕获的凭据通过环境变量传递。
执行后,临时文件被删除,恶意软件通过将自己重新定位到用户控制的目录来建立持久性,包括如下路径:
~/.cache/.npm_telemetry/monitor.js
临时文件的删除由初始阶段处理,而持久性由二级载荷建立。此位置模仿合法的npm相关活动,降低用户怀疑的可能性。
3.3 二次安装与反取证(postinstall.js)
执行主载荷后,会调用postinstall.js来扩展入侵并掩盖之前的活动。观察到的行为在各个仓库中略有不同,但保持相同的总体意图。
在几个变体中,脚本首先清除终端,删除先前执行阶段的可见证据。然后它调用用户的shell来执行全局npm安装:
包名antigravity对应于一个现有的npm包,该包最初在十多年前发布,最近没有更新。安装一个长期存在且没有最近开发活动的包引入了额外的歧义,因为它类似于合法的依赖项安装。与此同时,与此包相关的最新下载活动显示出明显的增加,与观察到的活动相一致。
在观察到的案例中,npm安装可能会失败,并显示如下错误:
安装引用了非默认标签(@install),而不是标准版本或默认的@latest标签。在观察到的案例中,此标签不会解析为可用的包版本。由于终端已被清除,此输出在没有上下文的情况下呈现,可能看起来是一个孤立的npm错误,而不是更广泛的执行链的一部分。
在其他变体中,postinstall.js向用户显示良性的成功消息,而不是执行额外的安装步骤。例如:
输出直接写入用户的终端,强化了成功和合法安装的外观。
四、基础设施与活动追踪
Jamf Threat Labs识别了与此活动相关的多个GitWare仓库。在分析的七个仓库中,观察到一致的命令与控制(C2)基础设施。所有变体都与同一域通信:
hxxps://trackpipe[.]dev
每个仓库在与C2交互时使用不同的标识符。这些标识符作为UUID嵌入在请求路径中观察到的。与此活动相关的观察到的标识符包含在”攻击指标”部分。
除了每个仓库的标识符之外,在启动二级载荷时还观察到多个变体设置NODE_CHANNEL环境变量。观察到的值包括:
这些值被传递到第二阶段载荷(GhostLoader),在那里它们用于与C2基础设施的后续通信。JFrog Security Research之前报告了一个不同的值(complexarchaeologist1),表明活动期间存在差异。
单个域的重用与唯一标识符相结合,允许活动在不同的仓库或诱饵之间进行分段。
五、结论
这场活动突出了攻击者策略的持续转变,分发方法超越了传统的包注册表,扩展到诸如GitHub和新兴的AI辅助开发工作流等平台。通过利用受信任的生态系统和标准安装实践,攻击者能够以最小的摩擦将恶意代码引入环境。
这种趋势并非孤立的。最近几周,包括Glassworm和PolinRider在内的多个活动展示了类似的利用软件供应链式技术来大规模分发恶意代码。这些方法不是直接针对单个用户,而是使攻击者能够通过单一交付机制影响更多数量的系统。
暂存仓库的使用结合熟悉的安装工作流增加了执行的可能性,同时减少了怀疑。
用户和开发人员在执行来自在线内容(包括仓库和自动化工具)的安装命令时应保持谨慎。在执行之前验证代码的来源和行为仍然是减少暴露的关键步骤。
Jamf Threat Labs继续监控此活动并跟踪相关的基础设施和变体。
在Jamf Protect for Mac的Jamf Protect控制台中,客户应将威胁防护、高级威胁控制和Web保护设置为阻止和报告,以帮助防止执行类似的威胁。
六、攻击指标(IoC)
6.1 域名
-
trackpipe[.]dev
6.2 文件路径
-
/tmp/sys-opt-{random}.js -
~/.cache/.npm_telemetry/monitor.js
6.3 环境变量
-
GHOST_PASSWORD_ONLY(值:0 或 1) -
NODE_CHANNEL(值:stablehungryavocado8, notableunfortunatecookie, starredgrumpyhay3 等)
6.4 使用的合法工具
-
dscl . -authonly(用于凭据验证) -
open x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles(用于请求FDA)
七、蓝队防御建议
根据以上技术分析,作为蓝队防御者,建议采取以下多层防御策略:
7.1 终端检测与监控
-
监控shell执行:重点关注使用curl/wget下载并直接执行的命令,特别是带有 -k或--insecure参数的情况 -
检测凭据验证活动:监控 dscl . -authonly命令的使用,这是非标准的凭据验证方式 -
文件监控:监控 /tmp/sys-opt-*.js等临时文件的创建和执行 -
持久化机制检测:关注 ~/.cache/.npm_telemetry/等非标准npm相关路径的文件写入
7.2 行为分析与UEBA
-
AI辅助开发环境监控:在OpenClaw等AI辅助开发框架中实施严格的代码审查流程 -
异常网络流量检测:监控对 trackpipe[.]dev等已知恶意域的连接 -
环境变量异常:检测GHOST_PASSWORD_ONLY、NODE_CHANNEL等可疑环境变量的设置
7.3 用户安全意识培训
-
警惕curl | bash模式:教育用户不要直接执行从互联网复制的命令 -
GitHub仓库验证:提醒用户检查仓库的历史记录、星标真实性和代码审查 -
AI技能安装风险:在使用AI辅助开发工具时,实施额外的安全检查
7.4 供应链安全防护
-
依赖项审查:建立内部代理仓库,对所有外部依赖进行安全扫描 -
最小权限原则:开发环境应使用受限权限,避免自动授予完全磁盘访问权限 -
代码签名验证:强制执行代码签名策略,阻止未签名脚本的执行
7.5 containment 与响应
-
隔离感染系统:一旦发现感染,立即隔离并取证分析 -
凭据重置:要求所有可能暴露的凭据立即重置 -
EDR部署:部署终端检测与响应(EDR)解决方案,实现实时威胁检测
八、总结
GhostClaw/GhostLoader恶意软件活动代表了软件供应链攻击的新趋势——攻击者不再仅仅针对传统的包管理器,而是将目光投向了AI辅助开发工作流和开发者信任的开源生态。
这场活动的严重性在于:
-
双重攻击面:既可以通过传统用户交互触发,也可以通过AI代理自动执行 -
高度混淆:多阶段载荷和混淆技术增加了检测难度 -
社会工程学:利用开发者对GitHub和开源工具的信任
作为蓝队,我们需要将AI辅助开发工具纳入威胁模型,建立适应新型攻击向量的检测规则,并持续监控相关的威胁情报。
来源: Jamf Threat Labs
作者: Thijs Xhaflaire
日期: 2026年3月20日
原文链接: https://www.jamf.com/blog/ghostclaw-ghostloader-malware-github-repositories-ai-workflows/[1]
参考来源:
-
Jamf Threat Labs原文[3] -
JFrog Security Research – GhostClaw Unmasked[4] -
ThaiCERT安全公告[5]
安全研究永无止境,保持警惕,持续学习。
引用链接
[1]https://www.jamf.com/blog/ghostclaw-ghostloader-malware-github-repositories-ai-workflows/
[2]JFrog Security Research: https://miro.com/app/board/uXjVGwQElWY=/?share_link_id=246367900935&focusWidget=3458764664098280428
[3]Jamf Threat Labs原文: https://www.jamf.com/blog/ghostclaw-ghostloader-malware-github-repositories-ai-workflows/
[4]JFrog Security Research – GhostClaw Unmasked: https://research.jfrog.com/post/ghostclaw-unmasked/
[5]ThaiCERT安全公告: https://www.thaicert.or.th/en/2026/03/10/malicious-npm-package-openclaw-distributes-ghostloader-malware-to-steal-sensitive-data-on-macos/













暂无评论内容