直接内存访问(DMA)攻击软件
PCILeech 使用 PCIe 硬件设备读取和写入目标系统内存。这是通过 PCIe 上的 DMA 实现的。目标系统上无需驱动程序。
PCILeech 也可以在没有硬件的情况下工作,配合 LeechCore 库支持的多种基于软件的内存获取方法——包括使用 DumpIt 或 WinPmem 捕获远程实时内存。PCILeech 还支持本地内存捕获以及多种内存转储文件格式。
PCILeech 支持多种内存获取设备,包括基于硬件和基于软件的方式。基于 USB3380 的硬件原生只能读取 4GB 内存,但如果先将内核模块(KMD)插入目标系统内核,则可以读取所有内存。基于 FPGA 的硬件以及基于软件的方法能够读取所有内存。
PCILeech 能够将多种内核植入程序注入目标内核——从而可以通过“挂载驱动器”轻松访问实时 RAM 和文件系统。还可以移除登录密码要求、加载未签名驱动程序、执行代码并生成系统 shell。PCILeech 可在 Windows 和 Linux 上运行。当前支持的目标系统为以下系统的 x64 版本:UEFI、Linux、FreeBSD 和 Windows。这需要对内存的写入权限(USB3380 硬件、FPGA 硬件、LiveCloudKd 或 CVE-2018-1038 “Total Meltdown”)。
要开始使用,请克隆仓库中的源代码,或下载最新的二进制文件、模块和配置文件。
PCILeech 的 PushPin GUI 前端让常见的 RedTeam 任务变得非常简单。请注意,PushPin 不是官方 PCILeech 发行版的一部分。







*) 不支持 macOS High Sierra 及更高版本。
PCILeech 支持基于硬件和基于软件的内存获取方法。所有内存获取均由 LeechCore 库处理。
请查看下面列出的受支持基于硬件的内存获取方法摘要。所有基于硬件的内存获取方法均支持 Windows 和 Linux。不过,基于 FPGA 的方法在 Linux 上会有轻微性能损失,最高约为 90MB/s,而在 Windows 上为 150MB/s。
| 设备 | 类型 | 接口 | 速度 | 64 位内存访问 | PCIe TLP 访问 | 项目 赞助者 |
|---|---|---|---|---|---|---|
| ZDMA | FPGA | Thunderbolt3 | 1000MB/s | 是 | 是 | 💖 |
| GBOX | FPGA | OCuLink | 400MB/s | 是 | 是 | 💖 |
| LeetDMA | FPGA | USB-C | 190MB/s | 是 | 是 | 💖 |
| CaptainDMA M2 | FPGA | USB-C | 190MB/s | 是 | 是 | 💖 |
| CaptainDMA M2 100T | FPGA | USB-C | 220MB/s | 是 | 是 | 💖 |
| CaptainDMA 4.1th | FPGA | USB-C | 190MB/s | 是 | 是 | 💖 |
| CaptainDMA 75T | FPGA | USB-C | 200MB/s | 是 | 是 | 💖 |
| CaptainDMA 100T | FPGA | USB-C | 220MB/s | 是 | 是 | 💖 |
| AC701/FT601 | FPGA | USB3 | 190MB/s | 是 | 是 | |
| USB3380-EVB | USB3380 | USB3 | 150MB/s | 否 | 否 | |
| DMA patched HP iLO | BMC | TCP | 1MB/s | 是 | 否 |
请查看下面列出的受支持基于软件的内存获取方法摘要。请注意,LeechService 仅提供到远程 LeechCore 库的网络连接。连接后,可以同时使用基于硬件和基于软件的内存获取。
| 设备 | 类型 | 易失性 | 写入 | Linux 支持 | 插件 |
|---|---|---|---|---|---|
| RAW physical memory dump | 文件 | 否 | 否 | 是 | 否 |
| Full Microsoft Crash Dump | 文件 | 否 | 否 | 是 | 否 |
| Full ELF Core Dump | 文件 | 否 | 否 | 是 | 否 |
| VMware | 实时 内存 | 是 | 是 | 否 | 否 |
| VMware memory save file | 文件 | 否 | 否 | 是 | 否 |
| TotalMeltdown | CVE-2018-1038 | 是 | 是 | 否 | 否 |
| DumpIt /LIVEKD | 实时 内存 | 是 | 否 | 否 | 否 |
| WinPMEM | 实时 内存 | 是 | 否 | 否 | 否 |
| LiveKd | 实时 内存 | 是 | 否 | 否 | 否 |
| LiveCloudKd | 实时 内存 | 是 | 是 | 否 | 是 |
| Hyper-V Saved State | 文件 | 否 | 否 | 否 | 是 |
| LeechAgent* | 远程 | 否 | 否 |
请访问 PCILeech GitHub 仓库以确保您拥有最新版本的 PCILeech:https://github.com/ufrisk/pcileech
从最新发行版获取最新的二进制文件、模块和配置文件。或者克隆仓库并从源代码构建。
有关在 Windows 上运行 PCILeech 的信息,请参阅 PCILeech on Windows 指南。
如果使用 USB3380 硬件,则必须安装 Google Android USB 驱动。从以下地址下载 Google Android USB 驱动:http://developer.android.com/sdk/win-usb.html#download 解压该驱动。
如果 FPGA 与 FT601 USB3 扩展卡或 PCIeScreamer 一起使用,则必须安装 FTDI 驱动。从 FTDI 下载 64 位 FTD3XX.dll 并将其放在 pcileech.exe 旁边。
要在 Windows 中将实时 RAM 和目标文件系统挂载为驱动器,必须安装 Dokany2 文件系统库。请从以下地址下载并安装最新稳定版 Dokany2:https://github.com/dokan-dev/dokany/releases/latest