WannaCry 事件与基础防范
【安全警示】本文所有代码仅用于隔离虚拟机中的安全课程教学演示,用于理解勒索病毒的工作原理与防范措施。严禁在任何真实环境、他人设备或未经授权的系统上运行、修改或传播这些代码。请务必在专用测试目录中运行,并确保虚拟机与外部网络完全隔离。
【任务背景】WannaCry 事件说明补丁、备份、权限和网络隔离必须共同发挥作用。本节只分析公开案例,不运行恶意程序。
【本课资料】微软安全公告:MSRC – Microsoft Security Response Center
【小组任务】
【提交成果】
【本周博客素材】本课成果作为本周博客素材;请在下一课完成合并、补充结果分析后统一提交。
【评分要点】案例事实有来源;防范措施具体;流程顺序合理;边界说明准确。
1. WannaCry 案例表
勒索病毒是什么
勒索病毒是恶意软件,入侵主机后加密磁盘内文件,索要赎金解密文件,不支付赎金文件大概率永久丢失。
WannaCry 是一种“蠕虫式”的勒索病毒软件
WannaCry 攻击对象、传播方式、影响、关键防范和可观察证据如下表所示:
| 攻击对象 | 开启 445 端口 SMB v1 协议服务,并且未安装 MS17-010 补丁的 Windows 电脑(Windows XP、Win7、Windows Server 2003/2008 等旧系统为主)。企业内网、工作室办公终端、服务器,只要内网一台中招,全网主机都会成为攻击目标。 |
| 传播方式 | 利用美国国家安全局泄露的“永恒之蓝”(EternalBlue)漏洞,通过 Windows 系统 MS17-010 漏洞传播。该病毒通过 445 端口自动扫描横向传播,不需要用户点击木马。 |
| 影响 | 2017 年爆发,波及 150 余个国家,30 万名用户中招,造成 80 亿美元损失。全球大量机构电脑文件被加密,弹出勒索提示,业务瘫痪,数据丢失。主要影响金融、能源、医疗等行业及中国校园网用户。 |
| 关键防范 | 安装微软 MS17-010 安全补丁;关闭 445 端口、禁用 SMBv1 协议;内网分段隔离,重要数据离线备份;限制本地管理员权限。 |
| 可观察证据 | 会将文件加密为 .WNCRY 格式并索要比特币赎金;桌面出现 WannaCry 勒索弹窗;主机日志大量 445 端口对外扫描记录;系统释放 mssecsvc.exe 恶意进程;内网多台机器短时间同时出现加密现象。 |
2. 四条防范措施
针对勒索病毒,为星河工作室列出的补丁、备份、权限、网络隔离 4 条防范措施如下:
(1)补丁管理
星河工作室的全部 Windows 终端、服务器统一安装 MS17-010 漏洞补丁。老旧 XP、Server 2003 也要安装微软专属补丁,定期漏洞扫描,关闭 SMBv1 协议,封堵 445 高危端口,消除永恒之蓝漏洞这个 WannaCry 核心入侵入口。
(2)离线备份
针对星河工作室的项目文档、设计素材、重要文件等,做离线备份。WannaCry 利用漏洞拿到 system 高权限进行全盘加密,离线备份可以在加密发生后快速恢复数据。
(3)最小权限
星河工作室要落实最小权限,工作室普通员工办公账号禁止使用本地管理员权限,管理员也尽量使用普通用户权限去做。普通权限可以限制病毒对全盘目录遍历加密,降低病毒对内网共享目录的破坏范围。
(4)网络隔离
利用防火墙划分工作室网段,办公电脑与业务服务器逻辑隔离,外网边界直接阻断入方向 445 端口访问。就算一台电脑被 WannaCry 感染,也不能跨网段横向扫描传播,限制蠕虫在内网扩散。
3. 事件处理流程图
如果发现星河工作室中了勒索病毒,应该怎么做?基础流程如下:
发现异常电脑 → 隔离 → 报告 → 恢复 → 复盘
事件处理流程图如下:

防火墙能力边界说明
防火墙在该事件中能做的 1 件事:
在网络边界设置规则,挡住外网访问内网 445 端口的流量,防止黑客从外网利用永恒之蓝漏洞植入 WannaCry 病毒。
防火墙在该事件中不能单独完成的 1 件事:
一旦内网里有一台电脑已经染上 WannaCry,防火墙拦不住这台中毒电脑在内网里扫描其他电脑的 445 端口;也没法删掉电脑里已经运行的 WannaCry 病毒,更不能解密被加密的 .wncry 文件。
4. 自创的模拟勒索病毒软件演示及代码说明
4.1 学习 WannaCry 病毒的核心实现
WannaCry 主体由 C++ 编写,加密部分使用 AES+RSA 混合加密,其核心功能可归纳为以下四点:
- 文件遍历与搜索:递归扫描指定目录下的目标文件。
- 文件加密:使用对称/非对称加密锁定文件内容。
- 勒索信生成:在目标目录创建说明文件。
- 解密还原:恢复被加密的文件。
① 文件遍历
源码实现:使用 Windows API FindFirstFile / FindNextFile,递归遍历本地磁盘(C 盘、D 盘等),过滤后缀(文档、图片、压缩包等),跳过系统关键目录。
伪代码:
FindFirstFile(目录)
循环 FindNextFile
如果是文件夹 → 递归进入
如果是目标后缀文件 → 加入待加密列表
② 文件加密
源码实现:
原理:AES 加密大文件速度快;RSA 用来保护 AES 密钥(只有攻击者私钥才能解密 AES 密钥,还原文件)。
③ 勒索信生成
源码实现:遍历完成后,在每个被加密文件所在目录,释放勒索提示文件(@WannaCryDecryptor.txt、网页提示文件),写入赎金地址、说明文件已加密,指导受害者支付比特币。
④ 解密还原
源码实现:
4.2 学习银狐勒索病毒(SilverFox)的核心实现
银狐多为 C# 编写,面向国内,常通过木马远控投递;传播模块:远控木马、局域网共享扫描。其核心功能同样包含以下四点:
① 文件遍历
源码实现:调用 .NET Directory.EnumerateFiles 递归遍历目录,自定义目标文件后缀清单,跳过系统保护目录。
② 文件加密
源码实现:同样混合加密:AES 加密文件,RSA 加密 AES 密钥;银狐会直接覆盖原文件或者生成新加密文件,部分版本会删除原文件。
③ 勒索信生成
源码实现:在每个目录生成中文勒索文档(银狐特色,中文提示),写明文件被银狐加密,提供解密联系方式。
④ 解密还原
源码实现:使用配套解密器,导入 RSA 私钥,提取 AES 密钥,批量解密文件。
4.3 自创九半模拟勒索软件(JiuBan Virus)设计方案
根据学习的两个病毒,自创一个仅用于教学演示的勒索病毒模拟程序,命名为九半模拟勒索软件(JiuBan Virus)。
- 命名来源:今日日期 2026.09.15,取九月中旬,命名为“九半病毒”。
- 运行平台:Linux 虚拟机。
- 核心加密算法:国产商用密码 SM4 对称加密。
- 功能:只保留四大基本功能(文件遍历与搜索、文件加密、勒索信生成、解密还原),没有传播模块。
一、整体设计思路(借鉴 WannaCry + 银狐优点,自创新版)
借鉴 WannaCry 优点
借鉴银狐优点
自我创新
二、四大功能详细设计方案
功能① Linux 文件遍历模块设计
设计逻辑:针对 Linux 文件系统结构 /home/用户目录 进行遍历。
遍历特点(对比两款病毒):比 WannaCry 的 Windows 遍历更适配 Linux 树形结构;比银狐的粗遍历更安全、精准。
功能② 国产加密算法 SM4 文件加密功能设计
选用算法:国产加密算法 SM4 分组密码算法(商用国产密码)。
加密设计方案:
为什么选 SM4:
功能③ 九半模拟勒索软件勒索信设计
勒索信文件名:《九半解密说明.txt》
勒索信内容(原创、适配本次实验):
【九半病毒加密提示】
你的文件已被 JiuBan-Virus 加密!
所有重要文档、图片、资料已锁定为 .jiuban 格式。
本次加密无暴力破解途径。
如需恢复全部数据,请联系管理员获取专属解密密钥。
警告:
功能④ 国密 SM4 解密还原模块设计
解密设计方案:
Linux 虚拟机环境配置
1. 更新软件源
sudo apt update

2. 安装 Python3 与 pip
Ubuntu:
sudo apt install python3 python3-pip -y
Kali 自带 python3,可直接执行:
sudo apt install python3-pip -y

3. 验证安装成功
python3 –version
pip3 –version
能输出版本号就代表安装完成。

4. 安装国密 gmssl 库(代码依赖,必不可少)
pip3 install gmssl

新版 Kali(Python3.12/3.13)增加了保护机制:externally-managed-environment,不让直接用 pip3 install 往系统 Python 装包,防止破坏系统。
使用 Python 虚拟环境
安装虚拟环境工具
sudo apt install python3-venv -y

安装完成

在当前目录创建虚拟环境,名字叫 venv
python3 -m venv venv

激活虚拟环境
source venv/bin/activate
激活成功后,终端前面会出现 (venv) 标记。
在虚拟环境里安装 gmssl,现在不会报错了
pip3 install gmssl

每次要运行九半病毒代码,都要先激活虚拟环境:
source venv/bin/activate
用完输入 deactivate 退出虚拟环境
查看当前位置,不用 /home 主目录,单独建一个测试目录:

mkdir -p /home/user/test_files

sudo apt install gedit
y
gedit hello.py
mv hello.py jiuban.py
gedit jiuban.py



gedit jiuban.py

把整套【九半病毒 Python 代码】粘贴进去。
根据创建的目录修改代码里的 TARGET_DIR = "/home/user/test_files"
保存退出
给测试文件夹加点内容
cd /home/user/test_files

运行程序
source venv/bin/activate
python3 jiuban.py
输入1:执行加密
输入2:执行解密



代码效果演示
版本1

打开被加密的路径,发现文件后缀变成了jiuban 还出现了九半解密说明.txt


打开文件发现确实被加密

版本2
sudo apt install python3-tk -y

版本3

点击缴纳赎金会弹出实验说明

点击解密指南会弹出对应提示

点击尝试解密会出现此界面

最后,只要把弹窗叉掉就可以这样解密
source venv/bin/activate
python3 sim_ransom.py
因为更新到版本三原文件出错
所以换了个新py文件运行
还是一样的解密

三个版本的核心代码
程序主入口增加路径校验逻辑,强制限定只能操作预先设定的测试目录,防止误加密其他路径。执行时调用traverse_and_encrypt函数,传入测试文件夹路径
以下仅为课程实验代码片段,仅用于隔离虚拟机学习勒索原理。
本片段不会删除原始文件,仅生成加密后的新文件;禁止在真实主机运行,禁止修改用于非法用途。
片段 1:SM4 文件加密(CBC 模式,只生成加密文件,不删源文件)
from Crypto.Cipher import SM4
import os
# 演示用密钥,正式实验中会动态生成
KEY = b'1234567890123456'
IV = b'1234567890123456'
def encrypt_file(filepath):
# SM4-CBC加密
cipher = SM4.new(KEY, SM4.MODE_CBC, IV)
with open(filepath, 'rb') as f:
plaintext = f.read()
# 简单填充,满足SM4分组16字节对齐
pad_len = 16 – len(plaintext) % 16
padded_plaintext = plaintext + bytes([pad_len]) * pad_len
ciphertext = cipher.encrypt(padded_plaintext)
# 生成新加密文件,【不删除原始文件】
new_file = filepath + ".jiuban"
with open(new_file, 'wb') as f:
f.write(ciphertext)
片段 2:生成勒索提示文件
def create_ransom_note(target_dir):
note_path = os.path.join(target_dir, "README_九半.txt")
with open(note_path, 'w', encoding="utf-8") as f:
f.write("【课程实验模拟勒索提示】\\n")
f.write("本次仅虚拟机测试,文件已生成加密副本,原始文件保留。\\n")
f.write("输入正确密钥即可解密恢复。\\n")
片段 3:遍历指定目录(强制限定目标文件夹,不删原文件)
def traverse_and_encrypt(root_dir):
# 仅遍历预先指定的测试目录
for dirpath, _, filenames in os.walk(root_dir):
for filename in filenames:
filepath = os.path.join(dirpath, filename)
# 跳过隐藏文件、链接、加密后缀文件,防止重复加密
if not filename.startswith('.') and not os.path.islink(filepath) and not filepath.endswith(".jiuban"):
try:
encrypt_file(filepath)
print(f"已生成加密副本:{filepath}")
except Exception as e:
print(f"加密失败: {filepath}, 错误: {e}")
片段 4:配套解密片段(本次实验有恢复能力,这是和危险病毒最大的区别)
def decrypt_file(enc_file_path, key):
# 解密 .jiuban 文件
iv = b'1234567890123456'
cipher = SM4.new(key, SM4.MODE_CBC, iv)
with open(enc_file_path, 'rb') as f:
ciphertext = f.read()
plain_padded = cipher.decrypt(ciphertext)
pad_len = plain_padded[-1]
plaintext = plain_padded[:-pad_len]
out_path = enc_file_path.replace(".jiuban", "_recovered.txt")
with open(out_path, 'wb') as f:
f.write(plaintext)
本实验与真实勒索病毒的关键差距 固定密钥 vs 动态会话密钥:本实验使用固定的密钥和初始向量,一旦泄露即可批量解密所有文件。真实勒索病毒通常采用混合加密机制——用 RSA 公钥加密随机生成的 AES 会话密钥,再用该密钥加密文件。每台主机的会话密钥唯一,即使私钥丢失也无法解密其他设备上的文件。
无传播模块:本程序不具备网络扫描、漏洞利用或横向移动能力,无法自动感染其他主机。真实勒索病毒常结合 EternalBlue、SMB 漏洞、钓鱼邮件等手段主动扩散,形成大规模感染。
无持久化机制:未植入启动项、服务或计划任务,重启后即失效。真实勒索软件通常会创建持久化入口,确保每次开机自动运行。
无反检测设计:未加入混淆、进程注入、内存加载等规避杀毒软件的技术,容易被静态分析发现。
勒索病毒防范思考:从作业补丁到纵深防御 及时打补丁:本次实验所依赖的权限提升漏洞(如未授权访问、路径遍历)在真实环境中往往源于系统或应用未更新。保持操作系统与第三方软件最新,是防止攻击的第一道防线。
定期备份策略:建立离线或异地备份机制,遵循 3-2-1 原则(3 份副本、2 种介质、1 份异地)。即使遭遇勒索攻击,也能快速恢复业务,无需支付赎金。
最小权限原则:避免以管理员身份运行日常程序。若程序需高权限,应通过 UAC 提权确认。本实验若以普通用户运行,将无法访问受保护目录,从而限制破坏范围。
网络隔离与访问控制:关键服务器应置于独立网段,禁止不必要的端口通信。例如,关闭不必要的 SMB 端口(445),阻止勒索软件横向传播。
行为监控与日志审计:部署 EDR(终端检测与响应)系统,监控异常文件操作(如批量 .encrypted 写入)、进程调用(如 Python 执行加密脚本)、网络外联行为。及时发现并阻断攻击链。
员工安全意识培训:绝大多数勒索攻击始于钓鱼邮件。通过模拟演练提升识别能力,减少人为失误带来的风险。
思考总结 本实验虽实现了“加密+勒索信”的基础功能,但其本质仍是一次教学性质的代码演示。真正的网络安全攻防对抗远不止于算法实现,而是围绕攻击链完整性、隐蔽性、持久性、可扩展性展开的系统博弈。
真实勒索病毒之所以难以根除,不仅因其加密强度,更在于其具备完整的攻击生命周期:从初始入侵 → 权限提升 → 横向移动 → 数据加密 → 赎金勒索 → 隐蔽退场。每一个环节都经过精心设计,甚至融入 AI 驱动的自适应行为。
而本实验仅停留在“单点突破”层面,忽略了攻击者的战术思维与防御体系的协同演进。真正有价值的实践,不是复现一个“看起来像”的勒索程序,而是理解其背后的设计逻辑、防御弱点与应对策略。
因此,从“我能写一个加密脚本”到“我理解为何它不会在真实世界生效”,再到“我能构建一套不可被绕过的防护体系”,才是从初级实验迈向高级安全素养的跃迁。这正是本实验区别于普通博客的最大价值所在——它不仅是技术展示,更是对攻防本质的反思与重构。
为什么现实勒索病毒几乎不用SM4国密算法
1. 硬件加速:AES全球普及,SM4缺乏底层支持
现代CPU普遍内置AES指令集(AES-NI),包括Intel、AMD的x86架构以及ARM架构的移动芯片。这一硬件级加速使得AES加密速度极快,尤其在处理大量文件时优势显著。勒索病毒依赖快速加密以规避检测,时间窗口极为关键。
相比之下,SM4在主流非国产芯片平台上无硬件加速支持,只能通过纯软件实现,性能远低于AES。即便在部分国产鲲鹏、飞腾处理器中存在硬件优化,但这些平台在全球范围内的部署比例极低,无法满足勒索攻击者对广泛兼容性的需求。
2. 黑产生态链全面基于国际标准
全球黑客组织使用的恶意工具链、漏洞利用模块、加密组件均围绕NIST推荐的标准构建,如AES、RSA、ChaCha20等。这些算法被集成于开源库如OpenSSL、mbedtls中,可直接调用,无需额外开发成本。
而SM4需引入专门的国密库(如gmssl),该库并非主流安全框架默认包含,使用时需手动编译、链接,导致恶意程序体积增大、行为特征更明显,极易触发杀毒软件或EDR系统的静态/动态分析机制。对于追求隐蔽性与高效传播的黑产而言,这是不可接受的负担。
3. 攻击目标为全球用户,不面向单一国家体系
当前主流勒索病毒(如WannaCry、REvil、LockBit)的设计初衷是覆盖尽可能多的受害者,其攻击面集中在运行Windows系统的全球个人及企业终端。
SM4作为中国国家标准(GM/T 0028-2014),主要服务于国内政务、金融、信创领域,在海外系统中无原生支持,也未形成通用生态。国外用户不会安装或启用国密算法环境,因此针对此类用户的勒索程序若采用SM4,将面临无法解密的致命缺陷——即使加密成功,也无法完成后续赎金交换流程。
4. 真实勒索架构采用混合加密模式,非单一对称加密
真实勒索软件并不采用“固定密钥+单一加密”的简单结构。其典型架构如下:
- 每台受感染主机生成唯一的随机会话密钥(通常为128位或256位);
- 使用该密钥对所有文件进行加密(常用AES);
- 将此会话密钥用攻击者持有的RSA公钥加密;
- 加密后的密钥存储于受害设备,同时删除明文会话密钥;
- 受害者必须提供赎金换取攻击者的私钥,才能恢复会话密钥并解密文件。
这种设计确保了每台机器的加密密钥独立,即使某次泄露也无法影响其他主机。而课程实验中使用的“固定SM4密钥”方式,本质上是一种教学简化,不具备实际威胁能力,也违反了真实勒索逻辑中的核心安全原则。
5. SM4的实际应用场景集中于国内合规体系
尽管SM4在密码学强度上等同于AES-128,且已被广泛应用于国内关键信息基础设施中,其主要用途包括:
- 国家机关、军队、电网、铁路等领域的数据保护;
- 金融行业支付系统、身份认证、电子合同签署;
- 信创工程中替代进口密码算法,实现自主可控。
这些场景强调的是合规性、可控性和主权安全,而非用于非法攻击活动。因此,国密算法的推广方向是防御型、合规型应用,而非攻击工具。
课程项目价值与反思:为何选用SM4反而是创新点?
虽然现实中勒索病毒极少使用SM4,但在教学实验环境中选择它具有多重意义:
- 展示国产密码算法的能力:通过实现基于SM4的文件加密与解密,直观验证国密算法在实际应用中的可行性;
- 理解勒索软件完整流程:从密钥生成、文件遍历、加密执行到解密恢复,构建完整的攻击模拟链条;
- 控制实验风险:限定测试目录、自带解密模块、禁止网络通信,避免造成真实破坏;
- 突出教学差异:明确指出实验与真实勒索之间的区别,体现对安全机制的深入理解。
实验中使用固定密钥仅为演示目的,真实攻击不会如此设计。应强调:真正的勒索病毒必须实现每机唯一密钥 + 非对称加密保护密钥,否则将失去保密性与攻击有效性。
补充思考:未来趋势与安全防护启示
尽管目前尚未出现大规模使用国密算法的勒索样本,但已有迹象表明,相关威胁正在浮现:
- 安全厂商已捕获少量使用SM2签名或加密的恶意代码;
- 某些高级持续性威胁(APT)组织开始尝试在特定目标中嵌入国密组件,以绕过传统检测规则;
- 国内部分供应链攻击事件中,出现利用国密算法伪装合法通信的行为。
这提示我们:国密算法不应仅被视为“防御工具”,同样需要纳入恶意代码检测与威胁情报分析范畴。未来的杀毒引擎、EDR系统、沙箱环境都应具备识别和解析国密算法行为的能力,防止其被滥用。
结尾
本实验虽基于理想化设定,却揭示了一个深刻命题:技术本身无善恶,关键在于使用方式。选择SM4作为教学实验,并非否定其安全性,而是借此机会深入理解国密算法的实现原理、适用边界及其在真实世界中的角色定位。
在信息安全教育中,我们不仅要学会如何“攻”,更要懂得“防”;不仅要掌握国际通用标准,也要认识本土密码体系的价值。
当有一天,国密算法真的出现在勒索病毒的代码中,我们才不会措手不及——因为在此之前,我们已经用一次实验,提前看清了它的模样。
网硕互联帮助中心




评论前必须登录!
注册