名称: dma-attack-techniques 描述: 使用FPGA硬件进行直接内存访问(DMA)攻击技术的指南。在研究PCIe DMA攻击、pcileech、FPGA固件开发或游戏安全研究的硬件级内存访问时使用此技能。
DMA攻击技术
概述
这个技能涵盖了来自awesome-game-security集合的直接内存访问(DMA)攻击资源,重点关注基于FPGA的PCIe攻击、pcileech使用和硬件级内存访问技术。
DMA基础知识
什么是DMA攻击?
DMA攻击利用PCIe设备直接访问系统内存而无需CPU参与的能力。攻击者可以:
- 读取任意物理内存
- 写入物理内存
- 绕过基于软件的保护
- 对操作系统级检测保持不可见
硬件要求
- FPGA开发板(Xilinx/Altera)
- PCIe接口能力
- 足够的逻辑资源
- 开发环境
pcileech框架
概述
pcileech是用于基于DMA的内存访问的主要框架:
- 开源内存取证工具
- 支持多种FPGA板
- 广泛的插件生态系统
- 活跃的开发社区
支持的硬件
- Screamer PCIe(Xilinx Artix-7)
- PCIe Squirrel
- AC701(Xilinx Artix-7)
- SP605(Xilinx Spartan-6)
- 自定义FPGA板
基本用法
# 内存转储
pcileech dump -out memory.raw -min 0 -max 0x200000000
# 进程列表
pcileech pslist
# 读取特定地址
pcileech read -a 0x12345000 -l 0x1000
# 写入地址
pcileech write -a 0x12345000 -v 0x41414141
FPGA固件
开发工具
- Vivado(Xilinx)
- Quartus(Intel/Altera)
- 开源工具链
固件特性
- TLP数据包生成
- 配置空间模拟
- MSI/MSI-X中断处理
- DMA读/写实现
反检测特性
- 设备ID欺骗
- 供应商ID伪装
- 序列号随机化
- 能力结构模拟
设备模拟
常见模拟目标
- 网络适配器(Intel I210/I226)
- 存储控制器
- USB控制器
- 声卡
模拟要求
1. 正确的PCI配置空间
2. 适当的能力结构
3. BAR(基地址寄存器)设置
4. 中断处理
示例:网络适配器模拟
- 模拟Intel I210网卡
- 正确的设备/供应商ID
- PHY寄存器模拟
- 最小功能以实现检测规避
内存访问技术
物理内存读取
// 典型的pcileech API用法
HANDLE hDevice;
BYTE buffer[0x1000];
// 读取物理内存
pcileech_read_phys(hDevice, physAddr, buffer, sizeof(buffer));
虚拟地址翻译
// 遍历页表以将虚拟地址转换为物理地址
PHYSICAL_ADDRESS TranslateVA(UINT64 cr3, UINT64 virtualAddr) {
// PML4 -> PDPT -> PD -> PT -> 物理
UINT64 pml4e = ReadPhys(cr3 + PML4_INDEX(virtualAddr) * 8);
UINT64 pdpte = ReadPhys(PFN(pml4e) + PDPT_INDEX(virtualAddr) * 8);
UINT64 pde = ReadPhys(PFN(pdpte) + PD_INDEX(virtualAddr) * 8);
UINT64 pte = ReadPhys(PFN(pde) + PT_INDEX(virtualAddr) * 8);
return PFN(pte) + PAGE_OFFSET(virtualAddr);
}
DTB(目录表基址)查找
- 扫描物理内存以查找有效的CR3值
- 查找内核结构
- 使用签名扫描
- 验证页表条目
工具集成
Cheat Engine DMA插件
- 用于DMA访问的CE服务器
- 通过DMA读取进程内存
- 远程调试能力
ReClass DMA
- 结构重建
- 实时内存查看
- 指针扫描
自定义实现
- DMA库(DMALib)
- 最小虚拟机库
- 游戏特定作弊
反作弊绕过
为什么DMA能绕过反作弊
1. 无需进程附加
2. 无可疑API调用
3. 无需内核驱动程序
4. 无代码注入
5. 在操作系统级别以下操作
限制
- 某些实现仅支持读取
- 可能基于时序检测
- 硬件指纹识别
- 内存加密(在较新系统上)
检测方法
- PCIe设备枚举
- IOMMU/VT-d监控
- DMA缓冲区分析
- 性能计数器异常
高级技术
无线DMA
- pcileech-wifi:无线网卡模拟
- 远程内存访问
- 扩展范围操作
SMM(系统管理模式)
- Ring -2执行
- 最高特权级别
- 极其隐秘
- 复杂实现
VMD控制器模拟
- 虚拟管理设备
- 隐藏在Intel VMD后面
- 复杂的检测规避
固件开发指南
项目结构
/firmware
├── src/
│ ├── pcie_core.v # PCIe核心
│ ├── tlp_handler.v # TLP处理
│ ├── dma_engine.v # DMA实现
│ └── config_space.v # 配置模拟
├── constraints/
│ └── board.xdc # 引脚约束
└── scripts/
└── build.tcl # 构建脚本
关键组件
// TLP数据包处理
module tlp_handler (
input wire clk,
input wire [127:0] rx_data,
output reg [127:0] tx_data,
// DMA接口
output reg [63:0] dma_addr,
output reg [31:0] dma_data,
output reg dma_read,
output reg dma_write
);
安全注意事项
道德使用
- 仅用于安全研究
- 授权测试环境
- 负责任披露
- 法律合规
风险意识
- 需要物理硬件访问
- 可能导致系统不稳定
- 可能被高级反作弊检测
- 法律影响
资源组织
README包含:
- pcileech及其衍生工具
- FPGA固件项目
- DMA库
- 集成工具
- 设备模拟固件
- 反检测实现
数据源
重要:此技能提供概念指导和概述信息。对于详细信息,包括:
- 特定的GitHub仓库链接
- 完整项目列表及描述
- 最新工具和资源
- 代码示例和实现
请从主仓库获取完整数据:
https://raw.githubusercontent.com/gmh5225/awesome-game-security/refs/heads/main/README.md
主README包含数千个按类别组织的精选链接。当用户请求特定工具、项目或实现时,从此源检索并参考适当部分。