ZipLine钓鱼活动针对美国制造业 - Check Point研究报告
关键发现
Check Point Research一直在监控一个针对供应链关键制造企业的复杂社交工程活动,攻击者利用看似合法的商业交互悄悄投送自定义恶意软件植入程序。
攻击者通过目标公司的公开"联系我们"表单发起通信,使接触显得合法。典型的钓鱼流程被逆转,由受害者发起电子邮件通信。
攻击者在投送恶意ZIP载荷前与受害者保持可信的、以业务为导向的电子邮件对话数周。在最近的社交工程浪潮中,攻击者开始使用的商业主题之一是"AI转型"借口,伪装成内部AI影响评估。
在许多情况下,攻击者使用与美国注册公司名称匹配的域名,有些情况下可能先前属于合法企业。攻击者为所有这些公司维护相似的模板网站,暗示这是一个精心策划的大规模流线型活动。
载荷作为ZIP存档投送,其中包含嵌入在存档二进制数据中的PowerShell脚本,位于特定标记字符串之后。加载器PowerShell随后提取脚本并在内存中执行。
名为"MixShell"的自定义内存植入程序是一个隐秘的shellcode载荷,使用DNS TXT隧道与HTTP回退进行C2通信。MixShell支持文件操作、反向代理、命令执行和基于管道的交互会话。
介绍
Check Point Research(CPR)一直在密切监控一个高度持久且复杂的威胁行为者的活动,该行为者利用社交工程策略获取目标美国组织的信任。在分析攻击者使用的钓鱼诱饵时,我们反复注意到一个有趣的模式:在每种情况下,都是由受害者发起最终导致感染的电子邮件交流。这个不寻常的细节促使我们进行更深入的调查,揭示了一个精心策划且资源丰富的钓鱼活动。
我们将此活动命名为ZipLine,攻击者通过受害者的"联系我们"网页表单发起接触,与传统钓鱼方法不同。目标公司自然会通过电子邮件回复表单提交,使交互立即具有合法性。这种典型钓鱼路径的逆转之后是攻击者与不知情受害者之间精心策划的电子邮件对话,通常持续两周,攻击者伪装成潜在业务伙伴并要求签署保密协议(NDA)。
一旦建立信任,攻击者就会投送托管在可信平台上的ZIP存档。存档内嵌有恶意的.lnk文件,触发基于PowerShell的加载器,最终部署MixShell,这是一个具有基于DNS的命令控制(C2)和增强持久性机制的自定义内存植入程序。
在本报告中,我们检查了ZipLine活动的结构,探讨了使其特别具有欺骗性的策略,并深入技术分析MixShell。
通过联系表单初始访问
在我们分析的所有事件中,攻击者通过第三方渠道发起接触,很可能是目标公司网站上的"联系我们"表单。目标公司自然通过电子邮件回复此接触,逆转了通常的攻击者发起通信模式,降低怀疑并避免基于声誉的检测机制。
在某些情况下,攻击者与受害者交换电子邮件长达两周,讨论安排会议,最终发送恶意ZIP文件。这种延长的交互帮助攻击者绕过电子邮件保护机制并与受害组织建立额外信任。
感染链
ZIP文件
存档包含三个文件:用作诱饵的合法PDF和DOCX文件,以及负责启动执行链的恶意LNK文件。ZIP存档本身在其二进制内容中直接嵌入PowerShell脚本,随后由.lnk启动的载荷提取并在内存中执行。
有趣的是,并非此活动中观察到的所有ZIP文件都是恶意的。在几种情况下,存档仅包含无害文档,没有嵌入脚本或活动载荷。这表明恶意内容可能是从Herokuapp托管的投送域动态提供的,载荷根据接收者的IP地址、用户代理或其他上下文指标实时定制。
LNK分析
LNK文件执行执行几个协调操作的PowerShell命令:
- 在几个常见文件夹中定位原始ZIP文件
- 扫描文件查找硬编码标记字符串(xFIQCV)
- 提取并执行嵌入式PowerShell载荷
- 将ZIP存档复制到ProgramData文件夹并在那里提取
- 打开.docx文件以保持合法性外观
- 执行AMSI绕过
- 在执行下一阶段PowerShell载荷前移除所有"#“字符
ZIP PowerShell分析
嵌入式PowerShell脚本被提取并执行后,首先用实际脚本文件路径和.lnk快捷方式路径替换占位符值。
接下来,脚本使用TypeLib劫持技术建立持久性。修改存储COM对象及其关联CLSID元数据的TypeLib注册表 hive,以目标定位与Microsoft Web Browser组件相关的CLSID {EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}。脚本分配此CLSID指向名为Udate_Srv.sct的本地文件。
此.sct文件由PowerShell脚本创建并填充恶意XML脚本。原本Base64编码的脚本内容被解码并使用script:标记写入磁盘。此COM特定机制指示Windows在调用关联COM对象时解释并执行脚本内容。
因此,每当劫持的COM对象被访问时,恶意代码会自动执行,通过启动Internet Explorer,或通过嵌入IE组件的其他应用程序,甚至通过间接调用该COM功能的系统进程。值得注意的是,Windows资源管理器(explorer.exe)在正常操作期间触发此COM对象。这意味着载荷将在每次系统重启时执行,无需任何手动用户操作,帮助其保持长期持久性。
注入的脚本包含JScript代码,检查恶意软件的.lnk快捷方式(启动主要载荷)是否已在运行。它查询进程是否包含"cmd.exe"以及命令行是否包含”/K"开关。如果未找到,脚本假定载荷未激活。因此,它创建一个shell并运行命令cmd.exe /K set X=1&{cmd},其中{cmd}是.lnk文件。
每当劫持的COM对象被触发时,恶意软件的.lnk文件将自动重新执行,即使载荷已终止。这确保持久性和重新激活,无需任何用户操作。
建立持久性后,PowerShell脚本检查系统架构(32位或64位)并选择相应的shellcode。此shellcode在脚本中存储为Base64编码的blob,通过XOR与硬编码密钥加密。
然后脚本使用反射和System.Reflection.Emit API在运行时动态构建自定义.NET委托类型。这使其能够解析模块句柄,通过GetProcAddress定位函数指针,并将这些非托管函数直接绑定到委托。所有这些都在内存中进行,在磁盘上留下最少的取证痕迹。使用这种方法,脚本使用VirtualAlloc分配可执行内存,复制解密的shellcode并直接调用它,使其能够执行载荷而不向磁盘投放任何额外文件。
MixShell分析
MixShell开始执行时动态定位所需的Windows API函数并将其地址存储在shellcode的主要运行时结构中。它不使用嵌入的纯API名称,而是使用自定义ROR4哈希算法来识别它们。
所有必要的API地址解析后,MixShell解析其配置块,该块存储在shellcode代码部分之后。
每个配置值是:
- 十六进制编码
- 使用位于配置数据末尾的密钥进行XOR加密
早期变体以纯文本存储此配置,表明开发人员正在积极发展恶意软件以逃避检测。
解码的配置提供关键操作参数:
- DNS域名
- 通信XOR密钥
- 诱饵文件名
- Base64字符串
- 前置值
- 追加值
- 库
- 当前版本注册表字符串
- 产品ID字符串
- 安装日期字符串
- 卷
- 动词
- 载荷默认文件名
- 管道进程名
- 清理命令行
- 方案
- HTTP域
- 配置XOR密钥
这些值与解析的API指针一起集中在MixShell的运行时结构中。
为确保每个主机只有一个活动实例,MixShell创建一个互斥体,其名称也兼作其C2标识符,有效将每个感染指纹到特定机器。
DNS优先命令控制
MixShell更喜欢使用DNS TXT记录查询与其C2通信。DNS子域格式为:
<prepend><hex(comm_key[0] ^ base64_str[0])><append>.<id_hex>.<time_hex>.<domain>
每个出站请求都是DNS TXT查询。C2响应遵循反向过程:
- 移除前置/追加标记
- 将剩余数据从字符串转换为十六进制字节
- 使用用于出站消息的相同XOR密钥解密
如果六个连续的DNS请求失败,MixShell回退到HTTP,同时保持相同的加密和数据包装格式以确保一致性。
由于MixShell强制执行的60字符最大子域长度,发送到C2的数据被分块成较小的查询。消息的结束由子域中的追加值标记,允许C2确定传输何时完成。所有出站数据在编码和传输前都带有命令ID前缀。
支持的命令
植入程序支持广泛命令,从基本文件操作到交互式反向代理shell:
| 命令ID | 命令 | 参数 | 描述 |
|---|---|---|---|
| “0” | ack | - | 调整重试计数 |
| “1” | Abort | - | 终止并移除程序目录 |
| “2” | Send lure name | - | 加密诱饵文件名并发送到C2 |
| “3” | Create Pipe | - | 内部IPC通道设置 |
| “4” | Run Command | command | 通过管道执行命令 |
| “5” | Read From Pipe | - | 发送命令输出到C2 |
| “6” | Cleanup Pipes | - | 移除IPC管道 |
| “7” | Write Files | URL | 下载并保存文件到TEMP |
| “8” | Sockets method | port | 反向代理shell |
| “9” | Close Socket | - | 关闭活动连接 |
基础设施
威胁行为者用于发起电子邮件通信的域名似乎经过精心选择以确保可信度和合法性。许多这些域名与美国注册的LLC名称匹配,在某些情况下可能先前属于合法企业。
然而,对这些域名托管网站的仔细检查显示它们完全是伪造的。所有站点共享相同的内容、布局和结构,强烈表明它们是从单个模板克隆的。值得注意的是,所有域名的"关于我们"页面显示相同的所谓公司创始人照片 - 经调查是白宫管家的库存图片。
突出的是,这些域名最初注册于2015年至2019年之间,远在ZipLine活动开始之前。通过获取具有合法业务历史的废弃或休眠域名,攻击者显著增加了绕过安全过滤器和获得目标组织信任的机会。这些老域名受益于长期DNS记录、清洁声誉和商业 sounding身份,使它们对社交工程非常有效。
受害者分析
我们对ZipLine钓鱼活动的分析揭示了跨多个行业、不同公司规模和几个地理位置的数十个目标组织,但明显强调美国实体。大多数目标公司处于工业制造领域,包括机械、金属加工、组件生产和工程系统。其他受影响行业包括硬件和半导体、消费品与服务以及生物技术和制药。这种分布表明攻击者寻求跨富裕运营和供应链关键行业的入口点,而不是专注于特定垂直领域。
该活动不仅基于组织规模进行歧视。虽然企业级公司构成已识别目标的大部分,但中小型企业也占显著部分。较大目标提供潜在高价值机会,而较小组织呈现较少安全控制的较软入口点。
与受害者的长期接触(多周对话)表明攻击者愿意投入时间培养关系,无论公司规模大小,可能根据感知价值或易受攻击性定制其努力。此活动中超过80%的已识别目标基于美国,强调明确的地理集中性,同时新加坡、日本和瑞士的公司也成为目标。
归因
该活动的目标来自广泛行业,除了财务收益外,基本动机仍不清楚。
然而,在我们的基础设施分析期间,我们识别了涉及IP地址172.210.58[.]69的重叠证书。此IP与五个其他IP地址共享SSL/TLS证书。其中之一,162.33.179[.]82,托管域名mainstomp[.]cloud,Zscaler先前报告与TransferLoader活动相关。随后,Proofpoint将此基础设施归因于他们跟踪为"UNK_GreenSec"的网络犯罪集群。
虽然这种重叠不构成明确归因,但它确实暗示与可能重复使用基础设施或在同一生态系统中操作的财务动机威胁行为者的潜在联系。
结论
在本报告中,我们分析了ZipLine,一个财务动机的钓鱼活动,反映了高级钓鱼活动不断发展的策略。在典型钓鱼管道的独特逆转中,威胁行为者迫使受害者进行初始接触。企业的"联系我们"表单提交使他们能够无缝集成到合法业务工作流中,从而武器化信任、耐心和合法服务以逃避怀疑。通过使用多阶段载荷、内存执行和基于DNS的C2通道,该活动在其感染链中实现隐身和适应性。
对于防御者,ZipLine提醒他们入站通信向量,包括看似良性的渠道如企业网页表单,可能被利用为初始访问点。专注于单消息分析的传统检测方法不足以防范此威胁。