Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Linpmem — 物理メモリ取得のためのLinuxカーネルドライバ。予約メモリやメモリホールを含む任意の物理アドレスへの読み取りアクセスを可能にし、CR3情報と仮想アドレスから物理アドレスへの変換サービスを提供します。 | Kitploit
ツール/GitHubGitHub/velocidex/linpmem
メモリフォレンジックフォレンジックデジタルフォレンジックインシデントレスポンス
GitHubvelocidex/linpmem

Linpmem

物理メモリ取得のためのLinuxカーネルドライバ。予約メモリやメモリホールを含む任意の物理アドレスへの読み取りアクセスを可能にし、CR3情報と仮想アドレスから物理アドレスへの変換サービスを提供します。

リポジトリを見る
1051221年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Linpmem -- Linux用物理メモリ取得ツール

alt text

Linpmemは、物理メモリを読み取るためのLinux x64専用ツールです。

Windows版のWinpmemと同様に、これは従来のメモリダンパではありません。Linpmemは、任意の物理アドレス(予約メモリやメモリホールを含む)から読み取るためのAPIを提供しますが、通常のメモリダンプにも使用できます。さらに、ドライバは物理メモリを読み取るためのさまざまなアクセスモード(バイト、ワード、ダブルワード、クワッドワード、バッファアクセスモード)を提供します。通常の標準的なケースでは、バッファアクセスモードが適切です。整列されたバイト/ワード/ダブルワード/クワッドワードの読み取りが必要な場合、Linpmemはそれを正確に行います。

現在のLinpmemの機能:

  1. 物理アドレスからの読み取り(アクセスモード:バイト、ワード、ダブルワード、クワッドワード、バッファ)
  2. CR3情報サービス(pidでターゲットプロセスを指定)
  3. 仮想アドレスから物理アドレスへの変換サービス

キャッシュ制御は、特殊な読み取りアクセスモードをサポートするために将来追加予定です。

サマリーテーブル

  • カーネルドライバのビルド
  • ドライバのロード
  • 使用方法
    • デモコード
    • CLIツール
    • ライブラリ
    • メモリダンプツール
  • ライブラリ
  • テスト済みLinuxディストリビューション
  • セキュアブートへの対応
  • 既知の問題
  • 作業中
  • 将来の作業
  • 謝辞

カーネルドライバのビルド

少なくとも現時点では、Linpmemドライバは自分でコンパイルする必要があります。他のLinuxシステムでプリコンパイルされたLinpmemドライバをロードする方法は現在作業中ですが、まだ完了していません。とはいえ、Linpmemドライバのコンパイルは難しくなく、基本的には'make'を実行するだけです。

ステップ1 - 適切なヘッダーの取得

makeとCコンパイラが必要です。(gccを推奨しますが、clangでも動作するはずです。)

linux-headersがインストールされていることを確認してください(ターゲットのLinuxディストリビューションのパッケージマネージャーを使用)。パッケージ名はディストリビューションによって異なる場合があります。 インストールされているかどうかを確認する簡単な(ディストリビューションに依存しない)方法:

root@kitploit:~
ls -l /usr/lib/modules/`uname -r`/

これで完了です。ステップ2に進めます。

外部システム: 現在、別のシステム用にドライバをコンパイルしたい場合(例えば、ターゲット上でコンパイルできないがメモリダンプを作成したい場合など)、そのシステムのLinuxディストリビューションのパッケージリポジトリから直接ヘッダーパッケージをダウンロードする必要があります。パッケージのバージョンが、外部システムで実行されているリリースおよびカーネルバージョンと完全に一致することを確認してください。外部システムが自己コンパイルされたカーネルを使用している場合は、そのカーネルのビルドディレクトリのコピーを入手する必要があります。その後、いずれかのディレクトリの場所をKDIR環境変数に設定します。

root@kitploit:~
export KDIR=path/to/extracted/header/package/or/kernel/root

ステップ2 - make

ドライバのコンパイルは簡単です。次のように入力するだけです:

root@kitploit:~
make

これにより、現在の作業ディレクトリにlinpmem.koが生成されます。

precompiler.hを事前に確認し、リリース用かデバッグ用か(例:デバッグ出力あり)を選択するとよいでしょう。現時点では他にあまりプリコンパイラ設定はありません。

ドライバのロード

insmod path-to-linpmem.koでモジュールをロードし、rmmod path-to-linpmem.koでアンロードできます。(これにより、この起動中のみドライバがロードされます。)デバッグ用にコンパイルした場合は、dmesgも確認してください。

ロード後、ドライバと通信するにはデバイスを作成する必要があります:

root@kitploit:~
mknod /dev/linpmem c 42 0

ドライバと通信できない場合は、dmesgログで'42'が実際に登録されたメジャー番号かどうかを確認します:

root@kitploit:~
[12827.900168] linpmem: registered chrdev with major 42

通常、カーネルはこの番号を実際に割り当てようとします。

chownを使用してデバイスをユーザーに与えることもできます。これにより、常にrootコンソールを開いておく必要がなくなります。(または、rootコンソールで使い続けても構いません。)

  • dmesg出力に注意してください。エラーが表示された場合は報告してください。
  • 警告:Linpmemから再起動を促すdmesgエラーが出力された場合は、すぐに再起動することをお勧めします。
  • 警告:これは初期バージョンです。

使用方法

デモコード

ドライバとの対話方法を(詳細に)示し説明するサンプルコードがあります。ユーザー空間APIのリファレンスは./userspace_interface/linpmem_shared.hにもあります。

  1. cd demo
  2. gcc -o test test.c
  3. (sudo) ./test // <= デバイスにchownを使用していない場合はsudoが必要です。

このコードは、ライブラリを使用せずにドライバと直接対話する方法を理解したい場合に重要です。簡単な機能テストとしても使用できます。

コマンドラインインターフェースツール

Linpmem用の(オプションの)基本的なコマンドラインインターフェースツール、pmem CLIツールがあります。こちらから入手できます:https://github.com/vobst/linpmem-cli。ソースコードに加えて、プリコンパイルされたCLIツールとプリコンパイルされた静的ライブラリおよびヘッダーもこちらにあります(署名付き)。注意:これは予備バージョンです。多くの追加機能や拡張が近日中に行われる予定ですので、更新を確認してください。

pmem CLIツールは、Linpmemのさまざまな機能を(比較的)安全かつ便利な方法でテストするために使用できます。Linpmemは、insmod/rmmodの代わりにこのツールでロードすることもでき、将来は追加オプションも提供されます。これにより、pmemがすぐに使用できる適切なデバイスを自動的に作成するという利点もあります。非常にポータブルで、どのLinuxシステムでも動作します(実際、Linux 2.6でもテスト済みです)。

root@kitploit:~
$ ./pmem -h
Command-line client for the linpmem driver

Usage: pmem [OPTIONS] [COMMAND]

Commands:
  insmod  Load the linpmem driver
  help    Print this message or the help of the given subcommand(s)

Options:
  -a, --address <ADDRESS>            Address for physical read operations
  -v, --virt-address <VIRT_ADDRESS>  Translate address in target process' address space (default: current process)
  -s, --size <SIZE>                  Size of buffer read operations
  -m, --mode <MODE>                  Access mode for read operations [possible values: byte, word, dword, qword, buffer]
  -p, --pid <PID>                    Target process for cr3 info and virtual-to-physical translations
      --cr3                          Query cr3 value of target process (default: current process)
      --verbose                      Display debug output
  -h, --help                         Print help (see more with '--help')
  -V, --version                      Print version

CLIツールを自分でコンパイルしたい場合は、そのディレクトリに移動し、(CLIの)Readmeの指示に従ってビルドしてください。それ以外の場合は、プリビルドされたプログラムをダウンロードするだけで、任意のLinuxで動作するはずです。CLIツールでカーネルドライバをロードするには:

root@kitploit:~
# pmem insmod path/to/linpmem.ko

pmemツールを使用してドライバをロードする利点は、自分でデバイスファイルを作成する必要がなく、次回のリリースではlinpmemデバイスの所有者を選択できるようになることです。

ライブラリ

pmemコマンドラインインターフェースは、ドライバとインターフェースするためのAPIを公開する小さなRustライブラリの薄いラッパーにすぎません。より上級のユーザーはこのライブラリを使用することもできます。このライブラリは、https://github.com/vobst/linpmem-cliからコンパイルする際に、pmem CLIツールと共に自動的にコンパイルされます(静的ポータブルライブラリとして)が、こちらにもプリコンパイル版が含まれています(署名付き)。注意:これは予備バージョンです。近日中にさらに追加される予定です。

ユーザーモードライブラリを使用せず、独自にドライバと直接インターフェースしたい場合は、./userspace_interface/linpmem_shared.hにユーザー空間API/インターフェースとドキュメントがあります。また、demo/test.cにドライバを直接使用する方法を説明するサンプルコードも提供しています。

Pythonラッパー

LinPyMem:Linpmemドライバ用のPythonラッパー。PyPIから入手可能。

メモリダンプツール

まだ実装されていません。

テスト済みLinuxディストリビューション

  • Debian, 自己コンパイル済み6.4.X, Qemu/KVM, 非パラバーチャル化。
    • PTI: off/on
  • Debian 12, Qemu/KVM, 完全パラバーチャル化。
    • PTI: on
  • Ubuntu server, Qemu/KVM, 非パラバーチャル化。
    • PTI: on
  • Fedora 38, Qemu/KVM, 完全パラバーチャル化。
    • PTI: on
  • ベアメタルLinuxテスト, AMI BIOS: Linux 6.4.4
    • PTI: on
  • ベアメタルLinuxテスト, HP: Linux 6.4.4
    • PTI: on
  • ベアメタル, Arch[-hardened], Dell BIOS, Linux 6.4.X
  • ベアメタル, Debian, 6.1.X
  • ベアメタル, Ubuntu 20.04 セキュアブート有効。動作しますが、最初にドライバに署名してください。
  • ベアメタル, Ubuntu 22.04, Linux 6.2.X

セキュアブートへの対応

システムがモジュールのロード時に次のエラーメッセージを報告する場合、セキュアブートが原因である可能性があります:

root@kitploit:~
$ sudo insmod linpmem.ko
insmod: ERROR: could not insert module linpmem.ko: Operation not permitted

モジュールをロードする方法はいくつかあります。明白な方法は、UEFI設定でセキュアブートを無効にすることです。

ディストリビューションがサポートしている場合、よりエレガントな解決方法は、使用前にモジュールに署名することです。 これは以下の手順で行えます(Ubuntu 20.04でテスト済み)。

  1. mokutilをインストール:
    root@kitploit:~
    $ sudo apt install mokutil
    
  2. 署名キー素材を作成:
    root@kitploit:~
    $ openssl req -new -newkey rsa:4096 -keyout mok-signing.key -out mok-signing.crt -outform DER -days 365 -nodes -subj "/CN=Some descriptive name/"
    
    必要に応じてオプションを調整してください。特に、キー長(-newkey)、有効期間(-days)、キーパスフレーズ設定オプション(-nodes; パスフレーズを設定する場合は省略)、証明書に含めるコモンネーム(-subj)に注意してください。
  3. 新しいMOKを登録:
    root@kitploit:~
    $ sudo mokutil --import mok-signing.crt
    
    次の手順で必要なパスワードを求められます。USキーボードレイアウトで入力できるパスワードを検討してください。
  4. システムを再起動します。 MOK登録メニューが表示されます。指示に従って新しいキーを登録してください。
  5. モジュールに署名 MOKが登録されたら、モジュールに署名できます。
    root@kitploit:~
    $ /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 path/to/mok-singing/MOK.key path/to//MOK.cert path/to/linpmem.ko
    

その後、モジュールをロードできるようになります。

フォレンジック準備の観点からは、必要になる前に署名付きモジュールを準備しておくことをお勧めします。上記の手順中にシステムが2回再起動し、メモリ内の揮発性データのほとんどが失われるためです。

既知の問題

  • 巨大ページの読み取りは実装されていません。現在、Linpmemは巨大ページを認識し、読み取りを拒否します。
  • マッピングされたI/OおよびDMA空間からの読み取りは、CPUキャッシュを有効にして行われます。
  • ページテーブルウォーク中にロックは取得されません。これにより、同時変更が行われている場合に異常な結果が生じる可能性があります。これは、OS全体を完全に停止させずに行うライブRAM読み取りの一般的な(ほとんど解決不可能な)問題です。
  • セキュアブート(Ubuntu):使用前にドライバに署名してください。
  • CPUによるメモリ暗号化(例:AMD SME、Intel SGX/TDXなど)
  • Plutonチップ?

(問題が発生した場合は、報告してください。)

作業中

  • プリコンパイル済みドライバを任意のLinuxでロード。
  • プロセッサキャッシュ制御。例:マッピングされたI/OおよびDMA空間のキャッシュなし読み取り用。

将来の作業

  • Arm/Mipsサポート。(遠い将来の作業)
  • レガシーカーネル(2.6など)、Unixベースのカーネル

謝辞

LinpmemおよびWinpmemは、私たちの先駆者である(現在は廃止された)REKALLプロジェクトの作業なしには存在しませんでした:https://github.com/google/rekall。

  • Mike Cohen氏とJohannes Stüttgen氏の先駆的な研究と、10年経った今でも使用されているPTEリマッピング技術のオープンソース貢献に感謝します。

私たちのオープンソース貢献者:

  • Viviane Zwanger
  • Valentin Obst
ツールをダウンロード