PCILeech FPGA DMA 仿真 VMD 控制器项目
May 14, 2025 · View on GitHub
免责声明
本项目仅用于研究、教育与安全测试目的。作者不鼓励、支持或容忍任何使用本项目进行下列行为:
- 未经授权访问或控制他人计算机系统;
- 绕过、禁用或对抗任何类型的安全、反作弊、或隐私保护机制;
- 在真实环境中部署该代码进行恶意活动、作弊、数据窃取或破坏。
项目中的所有代码和技术细节仅供反作弊系统开发者、安全研究员和硬件工程师用于:
- 理解 DMA 技术的工作原理;
- 开发检测、对抗和防护机制;
- 测试自研设备或实验平台。
使用者须自行承担使用本代码产生的一切法律与安全责任。作者及贡献者对因本项目产生的任何直接或间接后果概不负责。
项目概述
本项目是PCILeech FPGA实现,基于Xilinx Artix-7 XC7A75T-FGG484芯片,专门仿真Intel RST VMD(Volume Management Device)控制器。PCILeech是一个直接内存访问(DMA)工具,可用于硬件安全研究和测试。该项目通过模拟Intel RST VMD控制器(设备ID:9A0B)实现对现代系统的DMA访问.
最新更新
- VMD控制器增强 - 完整实现Intel RST VMD控制器寄存器集,支持端点管理和VMD特有功能
- MSI-X中断完善 - 实现自动中断触发和状态监控,支持VMD状态变化通知和命令完成通知
- NVMe命令处理 - 支持基本NVMe命令集,允许系统识别并操作虚拟存储设备
- 多功能设备模拟 - 新增对多个PCI功能的模拟支持,可配置设备类型和功能
- ACPI路径与设备树模拟 - 实现真实的ACPI路径和设备关系仿真,提高系统集成度
- 可配置BAR地址 - 支持跨多个功能的自定义BAR地址配置
- 代码架构优化 - 重构顶层模块和接口定义,提高代码可维护性和稳定性
- 模块接口修复 - 修复了pcileech_com和pcie_a7模块接口不一致问题,确保数据流稳定
- IP核优化 - 修复了配置空间内存深度,支持更完整的VMD能力集合
- 安全性增强 - 添加了访问模式识别和动态响应控制机制
- 隐身模式增强 - 改进了TLP回响和扫描检测功能,新增多种响应策略和访问模式分析
- 状态机改进 - 修复了各模块状态机的超时处理逻辑
- RW1C寄存器实现 - 新增符合PCIe规范的RW1C寄存器模块,专门处理状态寄存器,提升兼容性
- 冗余保护 - 增强寄存器访问模式监控,优化系统响应机制,确保设备稳定运行
- ZeroWrite4K优化 - 增强了BAR实现的隐身能力,增加多种响应模式和自适应计数器恢复机制
技术原理
VMD控制器仿真
本项目通过以下方式实现VMD控制器仿真:
- 设备伪装 - 将FPGA设备伪装为Intel RST VMD控制器(设备ID:9A0B),使系统识别为受信任设备
- PCIe配置空间模拟 - 完整实现PCIe配置空间,包括必要的能力结构(Capability Structures)
- MSI-X中断支持 - 实现MSI-X中断机制,支持自动触发和状态监控,确保与现代操作系统兼容
- BAR空间实现 - 提供完整的基地址寄存器(BAR)空间实现,支持内存映射操作
- 动态响应机制 - 智能识别系统查询模式,自适应调整响应策略
- PCIe桥接器模拟 - 将设备类型定义为PCI-to-PCI桥接器(类代码:060400),增强兼容性
- RW1C寄存器标准实现 - 符合PCIe规范的RW1C寄存器操作,保证状态位正确处理
- NVMe命令支持 - 实现基本NVMe管理命令集,支持系统识别和操作虚拟存储设备
关键模块说明
- pcileech_75t484_x1_vmd_top.sv - 顶层模块,集成所有功能组件,新增VMD特定参数
- pcileech_fifo.sv - FIFO网络控制模块,负责数据传输和命令处理
- pcileech_com.sv - 通信控制模块,处理FT601和系统间通信,修复了接口一致性问题
- pcileech_ft601.sv - FT601/FT245控制器模块,处理USB通信
- pcileech_pcie_a7.sv - PCIe控制器模块,修复了接口定义,新增PCIe状态输出
- pcileech_pcie_cfg_a7.sv - PCIe配置模块,处理Artix-7的CFG操作
- pcileech_tlps128_cfgspace_shadow.sv - 配置空间阴影模块,支持动态配置响应
- pcileech_tlps128_cfgspace_shadow_advanced.sv - 增强型配置空间,支持访问模式分析
- pcileech_pcie_tlp_a7.sv - TLP处理核心,支持回响和隐身模式
- pcileech_bar_impl_vmd_msix.sv - 实现带MSI-X中断功能的BAR,支持VMD控制器和NVMe命令处理
- pcileech_bar_impl_zerowrite4k.sv - 实现带隐身功能的4KB BAR,支持动态响应和异常检测
- pcileech_rw1c_register.sv - 标准PCIe RW1C寄存器实现,提供状态寄存器操作功能
- pcileech_pcie_tlps128_status.sv - PCIe TLP设备状态寄存器模块,使用RW1C处理状态位
- pcileech_tlps128_monitor.sv - 访问监控模块,提供系统稳定性支持
项目结构
ip/- 包含项目所需的IP核文件- 包括PCIe接口、FIFO、BRAM等IP核
- 最新版本已修复内存深度和COE文件格式问题
- 新增pcileech_cfgspace_writemask.coe文件,支持RW1C寄存器正确操作
src/- 包含SystemVerilog源代码文件- 核心功能模块和顶层设计
- 新增VMD专用的顶层模块和支持文件
vivado_build.tcl- Vivado构建脚本,已优化自动识别项目名称vivado_generate_project_captaindma_75t.tcl- 项目生成脚本,修复了文件引用不一致问题
IP核修复说明
最新版本修复了以下IP核相关问题:
- 配置空间深度扩展 - 将BRAM深度从1024增加到2048,支持完整的VMD控制器特性
- 写掩码文件创建 - 添加了pcileech_cfgspace_writemask.coe文件,实现PCIe标准的RW1C寄存器功能
- COE文件格式修正 - 添加了正确的初始化格式头部
- BAR空间内存扩展 - 支持更大的寄存器区域,满足MSI-X表和PBA需求
- Vendor/Device ID一致性 - 确保所有模块使用统一的厂商ID和设备ID
VMD控制器功能说明
最新版本大幅增强了VMD控制器功能:
-
完整寄存器集实现 - 实现了Intel RST VMD控制器的全部关键寄存器:
- 控制寄存器 (Control) - 用于VMD控制器配置
- 状态寄存器 (Status) - 反映控制器当前状态
- 能力寄存器 (Capabilities) - 指示控制器支持的功能
- 端点计数寄存器 (Endpoint Count) - 记录连接的NVMe设备数量
- 端口映射寄存器 (Port Mapping) - 管理VMD控制器端口分配
- 错误状态/掩码寄存器 (Error Status/Mask) - 错误管理和报告
-
MSI-X中断增强 - 实现了完整的MSI-X中断处理机制:
- 状态变化触发中断 - 在VMD控制器状态变化时自动触发中断
- 中断状态机 - 四状态中断处理状态机(IDLE/PREPARE/TRIGGER/WAIT)
- 中断错误监控 - 自动检测和恢复中断错误
-
NVMe命令处理 - 支持基本NVMe管理命令:
- 获取日志页 (Get Log Page)
- 获取特性 (Get Features)
- 识别 (Identify)
- 自动命令完成和中断触发
-
门铃寄存器实现 - 支持NVMe标准门铃寄存器,允许系统操作命令队列
构建说明
- 安装Xilinx Vivado设计套件(推荐2021.2)
- 在Vivado Tcl Shell中运行以下命令生成项目:
source vivado_generate_project_captaindma_75t.tcl -notrace - 生成比特流文件:
注意:合成和实现步骤可能需要较长时间。source vivado_build.tcl -notrace - 使用IP核验证脚本检查IP配置一致性:
source ip/verify_ip_consistency.tcl
脚本修复说明
最新版本修复了项目生成和构建脚本中的以下问题:
- 实现运行配置 - 在vivado_generate_project_captaindma_75t.tcl脚本中添加了完整的impl_1运行创建和配置代码,确保能正确执行实现步骤
- 项目生成与构建一致性 - 确保vivado_generate_project_captaindma_75t.tcl和vivado_build.tcl脚本之间的实现设置一致
- 报告配置完善 - 添加了完整的实现报告配置,包括DRC、时序、功率和资源利用率等报告
- 参数传递改进 - 优化了脚本间的参数传递方式,自动识别项目名称
- 文件引用修复 - 修复了文件路径引用不一致的问题,确保所有文件能被正确导入
- 综合和实现流程升级 - 更新为Vivado 2022兼容的综合和实现流程
- IP核升级处理 - 添加了正确的IP核升级处理逻辑
使用方法
- 将生成的比特流文件下载到支持的FPGA开发板
- 将FPGA开发板连接到目标系统的PCIe插槽
- 使用PCILeech软件通过USB接口与FPGA通信,执行DMA操作
- 系统将识别FPGA为Intel RST VMD控制器,允许DMA访问
支持的操作
- 内存读写操作
- 物理内存转储
- DMA攻击测试
- 硬件安全研究
- NVMe命令模拟
- VMD控制器高级特性仿真
- NVMe虚拟端点呈现
技术规格
- FPGA芯片:Xilinx Artix-7 XC7A75T-FGG484
- PCIe接口:Gen2 x1
- USB接口:通过FT601实现高速数据传输
- 仿真设备:Intel RST VMD控制器(设备ID:9A0B)
- PCI类代码:060400(PCI桥接器)
- 内存容量:支持最大2048深度的配置空间,4K的BAR空间
- RW1C寄存器规格:
- 支持最大32位宽度,可配置默认值
- 4种工作状态(正常、警告、恢复、错误)
- 访问计数最大支持255次
- 16位访问历史模式记录,用于监控访问模式
- 内置恢复机制,防止永久锁死
- MSI-X规格:
- 支持16个中断向量
- 四状态中断处理状态机
- 自动触发和监控机制
- 中断挂起位数组(PBA)支持
- 向量错误检测和恢复
- VMD控制器规格:
- 支持最多8个NVMe端点
- 完整寄存器集实现
- 兼容Intel RST VMD协议
- 支持NVMe基本管理命令
- DMA稳定性保障:
- 改进的接口连接确保数据流通畅
- 模块间接口定义一致性修复
- 状态信号和复位逻辑优化
- 支持高速数据传输
- 稳定性保障:
- 自适应超时恢复机制
- 多级异常处理容错设计
- 基于状态机的动态响应系统
- 冗余校验和状态监控
安全功能说明
最新版本增加了以下安全特性:
- 访问模式分析 - 监控系统对VMD设备的访问模式,识别异常扫描行为
- 动态响应控制 - 根据访问模式自动调整响应策略,应对安全检测
- TLP回响功能 - 支持将接收到的TLP包回传,实现通信伪装
- 多级隐身模式 - 实现了三种响应模式(正常/伪装/欺骗),根据检测到的系统行为自动切换
- 自适应恢复机制 - 长时间无活动后自动恢复设备状态,防止永久锁定
- 标准RW1C寄存器 - 实现符合PCIe规范的RW1C (Read-Write 1 to Clear) 寄存器:
- 支持正确的"写1清零"操作,处理PCIe状态寄存器
- 内置多种状态(正常、警告、恢复、错误)自动处理机制
- 硬件事件设置接口,允许硬件自动设置对应状态位
- 访问模式监控功能,确保设备稳定运行
- 接口代码隔离 - 优化模块间接口定义,提高代码隔离度,增强安全性
- 异常访问防护 - 检测并应对非标准寄存器访问模式,保护设备不被安全扫描工具识别
- ZeroWrite4K增强 - 实现了智能内存写入过滤系统:
- 只有关键区域的写入才会被实际存储
- 非关键区域写入被忽略但返回成功
- 支持关键区域配置和动态调整
许可证信息
本项目采用MIT许可证开源。
MIT License
版权所有 (c) 2024 PCILeech项目贡献者
特此免费授予任何获得本软件及相关文档文件("软件")副本的人不受限制地处理本软件的权利,
包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,
以及允许向其提供本软件的人这样做,但须符合以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中。
本软件按"原样"提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、
特定用途的适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、
损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,由软件或软件的使用或
其他交易引起、产生或与之相关。
如何贡献
我们欢迎社区成员对本项目做出贡献。如果您想参与贡献,请遵循以下步骤:
- Fork本仓库
- 创建您的特性分支 (
git checkout -b feature/amazing-feature) - 提交您的更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启一个Pull Request
贡献指南
- 请确保您的代码符合项目的编码规范
- 添加适当的注释和文档
- 对于FPGA设计的修改,请提供相应的仿真结果或测试报告
- 确保您的更改不会破坏现有功能
联系方式
如有任何问题或建议,请通过以下方式联系:
- 提交Issue
- 发送电子邮件至[1719297084@qq.com]
致谢
- 特别感谢Ulf Frisk(pcileech@frizk.net)的原始PCILeech项目
- 感谢Dmytro Oleksiuk (@d_olex) 对FIFO网络模块的贡献
- 感谢所有为本项目做出贡献的开发者和研究人员