
OpenPetya v2.0.0
一个受 Petya 勒索软件启发的概念验证型 bootkit 和 UEFI 启动应用程序,使用 Assembly、C 和 C++ 编写。
OpenPetya
一个受 Petya 勒索软件启发的概念验证型 Bootkit 和 UEFI 启动应用程序,使用 Assembly、C 和 C++ 编写
如果您觉得这个项目有帮助或具有参考价值,我将非常感谢您为仓库点一个 ⭐。您的支持将是我继续改进这个工具的巨大动力。
概述
OpenPetya 是一个教育项目,旨在研究 bootkit 和底层勒索软件的内部运作方式。
该项目专注于:
- 自定义 MBR 引导加载
- 多阶段启动过程
- 保护模式切换
- NTFS 主文件表(MFT)加密
- 基于 Salsa20 的加密技术
- 密码验证与恢复流程
- UEFI 编程
OpenPetya 并非旨在精确复刻 Petya 或 NotPetya。相反,它是一个为学习和研究目的而设计的简化概念验证。
值得一提的是,OpenPetya 不包含命令与控制(C2)功能。此外,OpenPetya 在加密后将明文 MFT 备份数据存储在隐藏扇区中。这一行为是出于教育目的而特意设计的,因为与该项目中实现的核心引导加载程序和加密机制相比,这些功能相对简单。不过,您仍然可以根据需要修改或移除这些功能。
注意:在 2.0.0 版本中,我选择不为 UEFI 实现该功能,因为担心它可能被滥用而破坏现代 Windows 操作系统。
项目动机
v1.0.0
在过去的几个月里,我一直在研究:
- 恶意软件分析
- 引导加载程序
- rootkit 和 bootkit
- Windows 内部机制
- 操作系统基础
- 底层汇编编程
在研究 Petya 和 NotPetya 时,我意识到许多在线资源只是简要解释整体工作流程,而没有演示底层启动过程实际上是如何运作的。
此外,许多现有的 Petya 相关项目依赖于提取的引导加载程序二进制文件或修改过的原始组件,而不是从头实现逻辑。
因此,我决定开发 OpenPetya 作为一个实践项目,以理解:
- 自定义 MBR bootkit 如何工作
- 第二阶段引导加载程序如何运作
- 磁盘加密工作流程如何运行
- 密码验证和恢复机制如何实现
该项目也是我对 bootkit、底层恶意软件和操作系统内部机制持续研究的一部分。
相关文章:
v2.0.0
在 2.0.0 版本中,我对现代 bootkit 的工作方式产生了好奇(如 Alex Matrosov、Eugene Rodionov 和 Sergey Bratus 所著《Rootkits and Bootkits》最后几章所述)。因此,我决定从头开始学习 EFI 应用程序编程。随后我发现这比我预期的要困难得多(尤其是在调试方面)。
无论如何,在编写了一些简单的 EFI 应用程序之后,我发布了 OpenPetya v2.0.0!
功能特性
v1.0.0
-
自定义 MBR
OpenPetya 使用自定义主引导记录(MBR)来加载第二阶段负载。
-
自定义第二阶段引导加载程序
第二阶段引导加载程序包含该项目的核心功能,包括:
- Salsa20 加密/解密
- 密码验证
- 恢复逻辑
- 用户界面
-
保护模式切换
引导加载程序在执行更高级逻辑之前,会从 16 位实模式切换到 32 位保护模式。
-
MFT 加密
与原始 Petya 类似,OpenPetya 使用 Salsa20 加密 NTFS 主文件表(MFT)的关键部分。
-
密码验证
OpenPetya 在解密前验证输入的密码,以防止因无效密钥导致的不可逆损坏。
-
自动恢复
一旦输入正确的密码:
- 加密数据被恢复
- 原始启动链被还原
- OpenPetya 自动移除自身
v2.0.0
OpenPetya v2.0.0 不包含自定义 EFI 应用程序(petya.efi)中的 MFT 加密功能。它提供一个简单的登录面板,并在密码正确时执行链式加载。
我选择不在 EFI 应用程序中实现 MFT 加密,因为它可能被滥用而破坏现代 Windows 操作系统,而我在 v1.0.0 中实现了该功能,因为威胁行为者已在 2016 年演示过这一技术。
组件
OpenPetya.exe
用户模式安装程序和控制器应用程序。
功能:
- 驱动器选择
- 安装
- 触发重启
- 实用工具界面
mbr.bin
自定义主引导记录(MBR)代码,负责:
- 第二阶段加载
- 早期启动执行
stage2.bin
OpenPetya 的核心负载。
职责:
- 保护模式切换
- Salsa20 加密操作
- MFT 加密/解密
- 密码验证
- 恢复
- 启动时界面
petya.efi
OpenPetya 的核心负载。
功能:
- 密码验证
- 链式加载
工作流程
BIOS
OpenPetya(MBR + 引导加载程序)的工作流程总结如下。
- 用户使用
OpenPetya.exe安装 OpenPetya 并选择一个密码。 - 机器通过手动方式或安装程序提供的 BSOD(通过
NtRaiseHardError)机制重启。 - 在启动过程中,自定义 MBR 加载第二阶段负载。
- 第二阶段负载将 CPU 切换到保护模式。
- OpenPetya 加密 NTFS 主文件表(MFT)的选定部分。
- 加密完成后,机器再次重启。
- 启动时界面提示用户输入密码。
- 如果密码正确:
- 加密数据被解密
- 原始启动链被还原
- OpenPetya 自动移除自身
- Windows 正常启动。
与原始 Petya 勒索软件不同,OpenPetya 不会尝试用虚假的 CHKDSK 屏幕或社会工程行为来欺骗用户。该项目纯粹为教育和研究目的而设计。
UEFI
OpenPetya(UEFI)的工作流程总结如下:
- 启动时界面提示用户输入密码。
- 如果密码正确:
- 系统执行链式加载
- 用户手动移除自定义 EFI 程序
构建
您可以使用以下命令构建该项目。
make # 构建 mbr.bin 和 stage2.bin
./build.sh # 构建 OpenPetya.exe
使用方法
警告:请在您的虚拟机中执行!
以下命令展示了如何安装自定义 MBR 和第二阶段引导加载程序(需要管理员权限):
传统 BIOS:
OpenPetya.exe --list
OpenPetya.exe --drive 0 --install mbr.bin stage2.bin
UEFI:
OpenPetya.exe --is-admin
OpenPetya.exe --firmware
OpenPetya.exe --uefi-secure
OpenPetya.exe --drive 0 --uefi-install petya.efi
OpenPetya.exe --drive 0 --uefi-restore
技术说明
关于以下内容的详细解释:
- MBR 启动过程
- 实模式和保护模式
- Salsa20 实现
- MFT 加密工作流程
- bootkit 设计
- 关于 Petya 和 NotPetya 的更多讨论
- 如何使用未文档化的 API(如
NtRaiseHardError)
已记录在这篇文章中。
免责声明
该项目纯粹为教育和研究目的而开发。
OpenPetya 的目标是研究:
- bootkit
- 操作系统内部机制
- 底层恶意软件技术
- 引导加载程序架构
请不要将该项目用于非法活动,或针对您不拥有或未经明确授权测试的系统。
作者对任何滥用本软件的行为不承担任何责任。
演示(Windows 7)
截图
运行时演示
未来计划
- 改进恢复工作流程
- 更好的 NTFS 解析
- 更精确的 Petya 行为模拟
- 更多 bootkit 研究
- 全屏图形模式
- 支持 Linux
致谢
感谢您查看这个项目。欢迎提供反馈和建议。