
直接メモリアクセス(DMA)攻撃ソフトウェア
PCILeech は PCIe ハードウェアデバイスを使用してターゲットシステムのメモリを読み書きします。これは PCIe 上の DMA を利用して実現されます。ターゲットシステムにドライバは必要ありません。
PCILeech は、LeechCore ライブラリがサポートする幅広いソフトウェアベースのメモリ取得方法(DumpIt や WinPmem を使用したリモートライブメモリのキャプチャを含む)と組み合わせて、ハードウェアなしでも動作します。PCILeech はローカルメモリのキャプチャや、多数のメモリダンプファイル形式もサポートしています。
PCILeech は複数のメモリ取得デバイスをサポートしています。ハードウェアベースとソフトウェアベースの両方です。USB3380 ベースのハードウェアはネイティブでは 4GB のメモリしか読み取れませんが、カーネルモジュール (KMD) をターゲットシステムカーネルに挿入すれば全メモリを読み取ることができます。FPGA ベースのハードウェアおよびソフトウェアベースの方法では、全メモリを読み取ることができます。
PCILeech は、ターゲットカーネルに幅広いカーネルインプラントを挿入できます。これにより、「マウントされたドライブ」を介したライブ RAM およびファイルシステムへの簡単なアクセスが可能になります。また、ログオンパスワード要件の削除、未署名ドライバのロード、コードの実行、システムシェルの生成も可能です。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 で若干のパフォーマンス低下があり、Windows での約 150MB/s に対し、最大約 90MB/s になります。
サポートされているソフトウェアベースのメモリ取得方法の概要を以下に示します。LeechService はリモートの LeechCore ライブラリへのネットワーク接続のみを提供することに注意してください。接続後は、ハードウェアベースとソフトウェアベースの両方のメモリ取得方法を使用できます。
PCILeech の最新版をお持ちであることを確認してください。PCILeech の GitHub リポジトリ https://github.com/ufrisk/pcileech をご覧ください。
最新のリリースから最新のバイナリ、モジュール、設定ファイルを入手してください。 または、リポジトリをクローンしてソースからビルドすることもできます。
Windows で PCILeech を実行する方法の詳細については、Windows 上の PCILeech ガイドを参照してください。
USB3380 ハードウェアを使用する場合は、Google Android USB ドライバをインストールする必要があります。Google Android USB ドライバは http://developer.android.com/sdk/win-usb.html#download からダウンロードしてください。zip を解凍します。
FTDI ドライバは、FPGA を FT601 USB3 アドオンカードまたは PCIeScreamer と共に使用する場合にインストールする必要があります。FTDI から 64 ビット版の FTD3XX.dll をダウンロードし、pcileech.exe と同じ場所に配置します。
Windows でライブ RAM とターゲットファイルシステムをドライブとしてマウントするには、Dokany2 ファイルシステムライブラリをインストールする必要があります。最新の安定版 Dokany2 を https://github.com/dokan-dev/dokany/releases/latest からダウンロードしてインストールしてください。
Linux で PCILeech を実行する方法の詳細については、Linux 上の PCILeech ガイドを参照してください。
その他の例については、プロジェクト Wiki ページを参照してください。Wiki は構築中であり、情報が不足している可能性があります。
ターゲットシステムのライブ RAM とファイルシステムをマウントします。KMD がロードされている必要があります。この例では 0x11abc000 が使用されています。
pcileech.exe mount -kmd 0x11abc000特定のカーネルインプラントのヘルプを表示します。この例では lx64_filepull カーネルインプラントです。
pcileech.exe lx64_filepull -helpdump コマンドのヘルプを表示します。
pcileech.exe dump -helpカーネルモジュールがアドレス 0x7fffe000 にロードされている場合、ターゲットシステムから全メモリをダンプします。
pcileech.exe dump -kmd 0x7fffe000USB3380 でより安定した USB2 アプローチを使用し、アクセス可能なメモリマップドデバイスを含む 4GB 未満のメモリを強制ダンプします。
pcileech.exe dump -force -device usb3380://usb=2PCIe TLP(トランザクションレイヤパケット)を受信し、画面に表示します(適切に設定された FPGA 開発ボードが必要)。
pcileech.exe tlp -vv -wait 1000ターゲットシステムのメモリをプローブ/列挙し、読み取り可能なメモリページと最大メモリを確認します(FPGA ハードウェアのみ)。
pcileech.exe probe最小アドレスから最大アドレスまでの全メモリをダンプし、失敗したページでは停止しません。64 ビットメモリへのネイティブアクセスは FPGA ハードウェアでのみサポートされています。
pcileech.exe dump -min 0x0 -max 0x21e5fffff -force全メモリをダンプし、ターゲットシステムのレジストリからメモリマップを特定しようとします。これにより、ターゲットをフリーズさせる可能性のある無効なメモリをダンプするのを避けられます。
pcileech.exe dump -memmap autoデフォルトの自動検出の代わりに、特定のデバイスを強制的に使用します(pmem デバイスは自動検出されません)。
pcileech.exe pagedisplay -min 0x1000 -device pmemリモート LeechAgent から、Kerberos によって暗号化され相互認証された接続を使用してリモートメモリをダンプします。
pcileech.exe dump -device pmem -remote rpc://[email protected]リモートコンピュータ上で、LeechAgent に組み込まれた Python 環境を使用して Python 解析スクリプト find-rwx.py を実行します。
pcileech.exe agent-execpy -in find-rwx.py -device pmem -remote rpc://[email protected]PID 432(この例では lsass.exe)の仮想プロセスメモリにパッチを適用します。
pcileech.exe patch -pid 432 -sig unlock_win10x64.sigこれらすべてが圧倒的に感じられますか? または簡単な質問をしたいだけですか? Discord の PCILeech および MemProcFS DMA コミュニティサーバーに参加してください!
バイナリはこのリポジトリのリリースセクションにあります。独自バージョンをビルドしたい場合は可能です。PCILeech のビルドに関する詳細は、Windows 上の PCILeech または Linux 上の PCILeech を参照してください。PCILeech は LeechCore に依存しており、一部の追加機能 (The Memory Process File System) については別途ビルドする必要があります。
PCILeech、MemProcFS、LeechCore はオープンソースですが、オープンコントリビューションではありません。PCILeech、MemProcFS、LeechCore は非常に柔軟なプラグインアーキテクチャを提供しており、プラグインの形での貢献が可能です。プラグイン以外のコアプロジェクトへの貢献を希望される場合は、開発を開始する前にご連絡ください。
v1.0-v3.6
v4.0
leechcore.dll/leechcore.so ライブラリを使用。新しいデバイスには以下が含まれます:
v4.1
agent-forensic コマンドによるリモートメモリ解析のサポート。
./pcileech mount /home/user/fusemnt/leechfs -kmd <your_kmd_address>none コマンドを追加。-bar-ro および -bar-rw オプションを追加。-psname オプションが追加されました。最新:
-no-kmd-mem オプション。KMD読み込み時にKMDメモリアクセスを任意で無効にします(場合によっては安定性の理由で有用かもしれません)。-kmd WIN11_X64 - Windows 11 KMD署名(WIN10_X64_3のエイリアス)。| デバイス | 種類 | インターフェース | 速度 | 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 パッチ適用済み HP iLO | BMC | TCP | 1MB/s | はい | いいえ |
| デバイス | 種類 | 揮発性 | 書き込み | Linux サポート | プラグイン |
|---|
| RAW 物理メモリダンプ | ファイル | いいえ | いいえ | はい | いいえ |
| 完全 Microsoft クラッシュダンプ | ファイル | いいえ | いいえ | はい | いいえ |
| 完全 ELF コアダンプ | ファイル | いいえ | いいえ | はい | いいえ |
| VMware | ライブメモリ | はい | はい | いいえ | いいえ |
| VMware メモリセーブファイル | ファイル | いいえ | いいえ | はい | いいえ |
| TotalMeltdown | CVE-2018-1038 | はい | はい | いいえ | いいえ |
| DumpIt /LIVEKD | ライブメモリ | はい | いいえ | いいえ | いいえ |
| WinPMEM | ライブメモリ | はい | いいえ | いいえ | いいえ |
| LiveKd | ライブメモリ | はい | いいえ | いいえ | いいえ |
| LiveCloudKd | ライブメモリ | はい | はい | いいえ | はい |
| Hyper-V 保存状態 | ファイル | いいえ | いいえ | いいえ | はい |
| LeechAgent* | リモート | いいえ | いいえ |