ZipLine钓鱼攻击:针对美国制造业的复杂网络威胁分析

本文详细分析了ZipLine钓鱼攻击活动,攻击者通过逆向接触方式,利用企业联系表单发起定向攻击,最终部署MixShell内存植入程序,采用DNS TXT隧道进行C2通信,支持文件操作和反向代理等复杂功能。

关键发现

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文件。这种延长的互动帮助攻击者绕过电子邮件保护机制并与受害组织建立额外信任。

收到表单提交后,公司通常会回复确认收到,并可能询问后续问题或提议安排通话。攻击者保持令人信服的对话,随时间建立与受害者的融洽关系。

在所有观察到的案例中,攻击者发送的恶意链接指向herokuapp.com的子域。Heroku是一个合法的平台即服务(PaaS),为托管Web应用程序提供计算和存储基础设施。在此活动中,威胁行为者滥用该平台托管和传递武器化的ZIP存档。使用受信任且常用的域名可能有助于攻击者减少受害者的怀疑。

Check Point Research已通知Heroku有关攻击者在其平台上托管的恶意内容。

在完成本出版物时,我们观察到与ZipLine活动相关的新一波钓鱼电子邮件,围绕AI转型借口。在这种变体中,攻击者声称与目标组织合作,帮助实施旨在降低成本和提高效率的AI驱动运营变革。

电子邮件被定位为内部倡议,并构架为"AI影响评估",要求收件人审查关于人工智能如何影响其团队工作流程的简短问卷。为了增加合法性和紧迫性,攻击者明确表示公司领导层要求收件人提供个人意见,暗示他们的意见将影响即将到来的决策。

在此阶段,尚未观察到此AI主题变体中使用的有效载荷。然而,基于攻击者继续使用先前建立的基础设施,我们高度自信地评估它可能遵循ZipLine活动早期阶段类似的传递模型——可能涉及分阶段传递、武器化ZIP存档和内存中后门执行,如MixShell。

感染链

存档包含三个文件:用作诱饵的合法PDF和DOCX文件,以及负责启动执行链的恶意LNK文件。ZIP存档本身包含直接嵌入其二进制内容中的PowerShell脚本,随后由.lnk启动的有效载荷提取并在内存中执行。

有趣的是,并非此活动中观察到的所有ZIP文件都是恶意的。在几种情况下,存档仅包含无害文档,没有嵌入脚本或活动有效载荷。这表明恶意内容可能从Herokuapp托管的传递域动态提供,有效载荷根据收件人的IP地址、用户代理或其他上下文指示器实时定制。

LNK文件执行执行几个协调操作的PowerShell命令:

定位ZIP文件

在几个常见文件夹中搜索原始ZIP存档:

  • 桌面
  • 下载
  • 文档
  • 临时文件夹
  • ProgramData
  • 当前工作目录的父目录

搜索嵌入脚本标记

定位ZIP文件后,脚本扫描文件以查找硬编码标记字符串(xFIQCV)。此标记用于识别ZIP二进制数据中嵌入的PowerShell有效载荷的开始。

提取和执行嵌入脚本

PowerShell脚本:

  • 从ZIP中提取嵌入的PowerShell有效载荷。
  • 将ZIP存档复制到ProgramData文件夹并在那里提取。
  • 打开.docx文件以保持合法外观。
  • 执行AMSI(反恶意软件扫描接口)绕过。它设置System.Management.Automation.AmsiUtils.amsiInitFailed = $true,这欺骗AMSI认为其初始化失败。
  • 在删除所有"#“字符后执行下一阶段PowerShell有效载荷。

ZIP PowerShell分析

嵌入的PowerShell脚本被提取并执行后,首先用实际脚本文件路径和.lnk快捷方式路径替换占位符值。

接下来,脚本使用TypeLib劫持技术建立持久性。修改存储COM对象及其关联CLSID元数据的TypeLib注册表 hive,以目标CLSID {EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B},这是一个与Microsoft Web Browser组件相关的标识符。脚本分配此CLSID指向名为Udate_Srv.sct的本地文件。

此.sct文件由PowerShell脚本创建,并填充恶意XML scriptlet。最初Base64编码的scriptlet内容被解码并使用script:标记写入磁盘。此COM特定机制指示Windows在调用关联COM对象时解释和执行脚本内容。

因此,每当被劫持的COM对象被访问时,恶意代码会自动执行,通过启动Internet Explorer,或通过嵌入IE组件的其他应用程序,甚至通过间接调用该COM功能的系统进程。值得注意的是,Windows资源管理器(explorer.exe)在正常操作期间触发此COM对象。这意味着有效载荷将在每次系统重启时执行,无需任何手动用户操作,帮助其保持长期持久性。

注入的scriptlet包含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哈希算法来识别它们。

哈希例程工作如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def api_hash(s):
    v1 = 0
    for c in s:
        ch = ord(c)
        if 'a' <= c <= 'z':
            ch -= 32  # 转换为大写
        v2 = ror4(v1, 13)
        v1 = (v2 + ch) & 0xFFFFFFFF
    return v1

def ror4(val, r_bits, max_bits=32):
    return ((val >> r_bits) | (val << (max_bits - r_bits))) & (2**max_bits - 1)

所有必要的API地址解析后,MixShell解析其配置块,该配置块存储在shellcode代码部分之后。

每个配置值是:

  • 十六进制编码
  • 使用位于配置数据末尾的密钥进行XOR加密

早期变体以纯文本存储此配置,表明开发人员正在积极发展恶意软件以逃避检测。

解码的配置提供关键操作参数:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
STRING[] dns_domain_name
STRING[] communication_xor_key
STRING[] lure_file_name
STRING[] base64_string
STRING[] prepend_value
STRING[] append_value
STRING[][4] libraries
STRING[] current_version_reg_string
STRING[] product_id_string
STRING[] install_date_string
STRING[] volume
STRING[] verb
STRING[] payload_default_file_name
STRING[] pipe_process_name
STRING[] cleanup_command_line
STRING[] scheme
STRING[] http_domain
STRING[] config_xor_key

这些值与解析的API指针一起集中在MixShell的运行时结构中。

为确保每个主机只有一个活动实例,MixShell创建一个互斥体,其名称也兼作其C2标识符,这有效地将每个感染指纹到特定机器。此名称生成如下:

1
hex(100 + ProductId + InstallDate + SerialNumber)

DNS优先命令与控制

MixShell更喜欢使用DNS TXT记录查询与其C2通信。DNS子域格式:

1
<prepend><hex(comm_key[0] ^ base64_str[0])><append>.<id_hex>.<time_hex>.<domain>

例如:

  • prepend = ul
  • XOR结果 = 44
  • append = mg

生成的子域是ul44mg。

每个出站请求都是DNS TXT查询。C2响应遵循反向过程:

  • 删除prepend/append标记
  • 将剩余数据从字符串转换为十六进制字节
  • 使用用于出站消息的相同XOR密钥解密(这是配置的一部分)

如果六个连续的DNS请求失败,MixShell回退到HTTP,同时保持相同的加密和数据包装格式以保持一致性。

由于MixShell强制执行的60个字符最大子域长度,发送到C2的数据被分块为较小的查询。消息的结尾由子域中的append值标记,这允许C2确定传输何时完成。所有出站数据在编码和传输之前都带有命令ID前缀。

支持的命令

植入程序支持广泛的命令,从基本文件操作到交互式反向代理shell:

命令ID 命令 参数 描述
“0” ack - 调整重试计数
“1” Abort - 终止并删除程序目录。运行命令:"// /c rd /s /q %ProgramData%\"
“2” Send lure name - 使用XOR通信字节密钥加密诱饵文件名并发送到C2
“3” Create Pipe - 内部IPC通道设置
“4” Run Command command 通过管道执行命令
“5” Read From Pipe - 发送命令输出到C2
“6” Cleanup Pipes - 删除IPC管道
“7” Write Files URL 下载并保存文件到TEMP。如果文件名不在给定URL中,将从配置中获取
“8” Sockets method port 反向代理shell
“9” Close Socket - 关闭活动连接

反向代理(命令8)

当命令8被调用时,MixShell遵循此握手序列:

  1. 连接到给定端口的C2
  2. 从C2接收4字节密钥
  3. 发送初始消息(type1=0, type2=0x33, “mix-socks-<hex_id>")
  4. 接收确认(type2=0x33)
  5. 打开到同一端口的第二个套接字
  6. 接收新的4字节密钥
  7. 发送4096零字节(type1=0, type2=0x53)
  8. 接收消息(type2=0x77)指示:
    • 00000001 → 新IP/端口
    • 00000003 → 新域
  9. 连接到新目的地
  10. 中继流量直到type2 != 0x77

此设计允许MixShell作为灵活的中继运行,使攻击者能够转向内部网络,同时似乎与合法网络活动混合。

MixShell PowerShell变体

在我们的研究中,我们确定了MixShell的基于PowerShell的变体。

虽然其加密例程(十六进制编码字节 + XOR)和整体感染流程(在ZIP文件中的相同标记值后触发)与shellcode版本相同,但此变体引入了几个显著差异:

增强的反调试和沙箱规避

  • 扫描分析/调试工具,如windbg、ida、wireshark、procmon、ollydbg和immunity debugger
  • 检查沙箱相关命名管道:\cuckoo、\hgfs、\vmci、\vbox
  • 搜索虚拟化的BIOS和系统标识符:qemu、virtual、vbox、vmware、xen
  • 如果物理内存小于4 GB则终止
  • 如果CPU核心数低于4则终止

受害者识别

  • 使用ProductID的CRC32哈希作为受害者ID

替代持久性机制

  • 通过计划任务建立持久性
  • 使用conhost.exe执行恶意软件

修改的C2子域结构

1
<prepend><data_chunk><append>.<crc32(ProductID)><crc16(encoded_lurename)><modecode><time_hex>.<domain>

功能差异

  • 省略反向代理shell和文件下载功能
  • 除了命名管道和cmd.exe,它可以直接通过PowerShell执行命令

基础设施

威胁行为者用于发起电子邮件通信的域名似乎经过精心选择,以确保可信度和合法性。许多这些域名与美国注册的有限责任公司名称匹配,在某些情况下可能曾经属于合法企业。

然而,仔细检查这些域名上托管的网站会发现它们完全是伪造的。所有网站共享相同的内容、布局和结构,强烈表明它们是从单个模板克隆的。值得注意的是,所有域名的"关于我们"页面显示相同的所谓公司创始人照片——一张库存图片,经调查是白宫管家的照片。

突出的是,这些域名最初注册于2015年至2019年之间,远在ZipLine活动开始之前。通过获取具有合法业务历史的废弃或休眠域名,攻击者显著增加了绕过安全过滤器和获得目标组织信任的机会。这些老域名受益于长期DNS记录、清洁声誉和商业 sounding的身份,使它们对社会工程非常有效。

我们识别的第一个C2域是tollcrm[.]com,它解析到名称服务器IP地址172.210.58[.]69。对此基础设施的进一步分析揭示了与同一IP地址相关的几个额外域,所有这些域都与同一活动相关联并用于基于DNS隧道的C2通信。这些包括:

  • humcrm[.]com
  • vnrsales[.]com
  • atriocrm[.]com
  • zappiercrm[.]com

对此服务器的进一步检查揭示了似乎是剩余或部分配置的基础设施,可能代表管理界面的组件。在这些工件中有一个空的数据库表,似乎旨在存储受害者数据,以及一个包含执行命令、打开反向shell或使用提供的URL启动文件下载功能的基于Web的面板。

虽然我们无法确认此面板在当前活动中的积极使用,但这些组件的存在提供了对攻击者潜在工具和后端环境的罕见一瞥。

受害者分析

我们对ZipLine钓鱼活动的分析揭示了跨多个部门、不同公司规模和几个地理位置的数十个目标组织的多样化集合,但明确强调美国实体。大多数目标公司处于工业制造领域,包括机械、金属加工、零部件生产和工程系统。其他受影响行业包括硬件和半导体、消费品和服务以及生物技术和制药。这种分布表明攻击者寻求跨富裕运营和供应链关键行业的入口点,而不是专注于特定垂直领域。

消费电子、航空航天和能源公司以及更传统的工业目标的包含表明行为者可能追求具有有价值专有数据、强大供应商网络或可利用基础设施的组织。

该活动不仅基于组织规模进行歧视。虽然企业级公司占已识别目标的大部分,但中小型企业(SMB)也占很大比例。较大的目标提供潜在高价值机会,而较小的组织呈现较少安全控制的较软入口点。

与受害者的长期接触(多周对话)表明攻击者愿意投入时间培养关系,无论公司规模如何,可能基于感知价值或易受攻击性定制他们的努力。此活动中超过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提醒他们入站通信向量,包括看似良性的渠道,如公司Web表单,可以被利用作为初始访问点。专注于单消息分析的传统检测方法不足以防范此威胁。

Check Point如何防范ZipLine类攻击

Check Point Harmony Email & Collaboration提供针对高级钓鱼和社会工程活动(如ZipLine)的主动防御。通过分析通信上下文、发送者声誉和行为指示器,而不是依赖单消息分析,Harmony Email and Collaboration检测在数天或数周内逐渐展开的攻击。其AI驱动的钓鱼预防、恶意附件和ZIP存档的威胁仿真以及实时URL保护在武器化有效载荷到达用户之前阻止其传递。

Harmony Email and Collaboration还通过行为分析防止账户接管和商业电子邮件妥协,而数据丢失防护保护敏感IP和供应链数据免遭外泄。这些层一起确保组织即使在攻击者利用受信任渠道(如公司Web表单或扩展业务通信)时也保持受保护。

IOCs

哈希值:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
e69d8b96b106816cb732190bc6f8c2693aecb6056b8f245e2c15841fcb48ff94
d39e177261ce9a354b4712f820ada3ee8cd84a277f173ecfbd1bf6b100ddb713
f531bec8ad2d6fddef89e652818908509b7075834a083729cc84eef16c6957d2
2c7bc0ebbbfa282fc3ed3598348d361914fecfea027712f47c4f6cfcc705690f
71dec9789fef835975a209f6bc1a736c4f591e5eeab20bdff63809553085b192
83b27e52c420b6132f8034e7a0fd9943b1f4af3bdb06cdbb873c80360e1e5419
f5a80b08d46b947ca42ac8dbd0094772aa3111f020a4d72cb2edc4a6c9c37926
15d024631277f72df40427b8c50e354b340fac38b468f34826cc613b4650e74c
155bccbd11066ce5bf117537d140b920f9b98eaa0d3b86bdc8a04ac702a7a1ef
4dcff9a3a71633d89a887539e5d7a3dd6cc239761e9a42f64f42c5c4209d2829
d6e1e4cc89c01d5c944ac83b85efa27775103b82fece5a6f83be45e862a4b61e
81c1a8e624306c8a66a44bfe341ec70c6e3a3c9e70ac15c7876fcbbe364d01cd
36b065f19f1ac2642c041002bc3e28326bec0aa08d288ca8a2d5c0d7a82b56e6
f44107475d3869253f393dbcb862293bf58624c6e8e3f106102cf6043d68b0af

域和IP地址:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
lvprocurement[.]com
kprocurement[.]com
lamyconsulting[.]com
trilineconsulting[.]com
hancockconsulting[.]com
caultonconsulting[.]com
chipmanconsulting[.]com
kgmstrategy[.]com
crosleyconsulting[.]com
humcrm[.]com
tollcrm[.]com
atriocrm[.]com
vnrsales[.]com
zappiercrm[.]com
crmforretailers[.]com
172.210.58[.]69
212.83.190[.]143
5.180.221[.]108
185.180.221[.]108

hxxps://signstream-docs-de3fa399b173[.]herokuapp[.]com
hxxps://collab-sign-8e36fa762841[.]herokuapp[.]com
hxxps://viewshare-4a47630892e1[.]herokuapp[.]com
hxxps://legal-sign-8ec8b9f1edb2[.]herokuapp[.]com
hxxps://docsign-hub-3295a03470c3[.]herokuapp[.]com
hxxps://signflow-e15eda21396d[.]herokuapp[.]com
hxxps://webmailapp-0e6cff4089a4[.]herokuapp[.]com
hxxps://webmailapp-0e6cff4089a4[.]herokuapp[.]com
hxxps://clear-sign-e69444a8e4ea[.]herokuapp[.]com
hxxps://signhub-view-09a16562134b[.]herokuapp[.]com
hxxps://mail-serve-9a5d4f13e3a7[.]herokuapp[.]com
hxxps://mail-serve-9a5d4f13e3a7[.]herokuapp[.]com
hxxps[:]//docvault-share-665d141177ca[.]herokuapp[.]com
hxxps://signlink-portal-37c581992418[.]herokuapp[.]com
viewshare-4a47630892e1[.]herokuapp[.]com
signforge-a61a5975a04b[.]herokuapp[.]com
sharespace-link-360b265f3942[.]herokuapp[.]com
hxxps://signtrack-docs-6a96b334b140[.]herokuapp[.]com
signcentral-vault-33ce0aff08dc[.]herokuapp[.]com
signcentral-7df32454744c[.]herokuapp[.]com
hxxps://john-deer-apple-0c6f34d9c276[.]herokuapp[.]com
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计