Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
mquire — 依存関係ゼロのLinuxメモリフォレンジック。カーネル組み込みのBTFとkallsymsを活用し、外部デバッグ情報なしで型認識メモリ解析を実現。 | Kitploit
ツール/GitHubGitHub/trailofbits/mquire
OSINT (オープンソースインテリジェンス)メモリフォレンジック脆弱性分析リバースエンジニアリングフォレンジックマルウェア分析デジタルフォレンジックバイナリ解析脅威インテリジェンス学習と教育インシデントレスポンス
18484623日前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
GitHub
trailofbits/mquire

mquire

依存関係ゼロのLinuxメモリフォレンジック。カーネル組み込みのBTFとkallsymsを活用し、外部デバッグ情報なしで型認識メモリ解析を実現。

リポジトリを見るウェブサイト

mquire

mquireは、memory(メモリ)とinquire(問い合わせ)を組み合わせた造語で、osqueryにインスパイアされたメモリクエリツールです。

主な利点:外部デバッグシンボルが不要

mquireは、外部デバッグシンボルを必要とせずにLinuxカーネルメモリのスナップショットを解析できます。

分析に必要なものはすべてメモリダンプ自体に組み込まれています。つまり、以下を解析できます。

  • これまで見たことのない未知のカスタムカーネル
  • 事前準備なしの任意のLinuxディストリビューション
  • 外部デバッグシンボルが利用できない、または失われたメモリスナップショット

要件

カーネルバージョンの要件:

  • BTF対応:カーネル4.18以降で、かつBTFが有効であること(最近のディストリビューションのほとんどはデフォルトで有効)
  • Kallsyms対応:カーネル6.4以降(scripts/kallsyms.cのフォーマット変更による)

仕組み

mquireは、モダンなLinuxカーネルに組み込まれている次の2種類の情報を読み取ることでカーネルメモリを解析します。

  1. BTF(BPF Type Format)からの型情報 - カーネルのデータ型の構造とレイアウトを記述します。BTFデータはbtfparseクレートを使用して解析されます。
  2. Kallsymsからのシンボル情報 - カーネルシンボルのメモリ位置を提供します(/proc/kallsymsで使用されるのと同じデータ)。

型情報とシンボル位置を組み合わせることで、mquireは以下のような複雑なカーネルデータ構造を見つけて読み取ることができます。

  • プロセスのメモリマッピング(メープルツリー構造を使用)
  • キャッシュされたファイルデータ(XArray構造を使用)
  • カーネルログメッセージ

これにより、ディスクから削除されたファイルであっても、カーネルのファイルキャッシュから直接ファイルを抽出することが可能になります。

互換性に関する注意点

Kallsymsスキャナーは、カーネルソースのscripts/kallsyms.cのデータ形式に依存しています。将来のカーネルバージョンでこの形式が変更された場合、スキャナーのヒューリスティックを更新する必要があります。

機能

テーブル

mquireは、システムのさまざまな側面やツール自体の状態をクエリするためのSQLテーブルを提供します。

mquireはデータベースではありません。 各クエリは、メモリをスキャンしてポインタを辿ることにより、カーネルデータ構造を再構築します。事前計算されたインデックスやキャッシュされた結果はありません。テーブルアクセスはすべてカーネルデータのトラバーサルです。冗長なスキャンを避けるにはAS MATERIALIZEDを使用し(クエリ最適化を参照)、task_open_filesやmemory_mappingsのようなプロセス単位のテーブルをクエリする際は、単一プロセスにスキャンを限定するためにtaskのような制約条件を指定してください。

設計原則:結合キーとしての仮想アドレス。 テーブルは、pidや他のユーザー可視の識別子ではなく、virtual_address(基盤となるデータ構造のカーネルアドレス)を正規の結合キーとして使用します。これは意図的です。同じPIDが複数の発見ソースやルートタスクにわたって複数回現れる可能性がある一方、仮想アドレスは特定のカーネルオブジェクトを一意に識別するからです。SQLテーブルと基盤となるLinuxOperatingSystem APIはどちらもこの規則に基づいて構築されています。

システム情報

  • os_version - カーネルバージョンとアーキテクチャ
  • system_info - ホスト名とドメイン名
  • boot_time - システム起動時間
  • kallsyms - カーネルシンボルアドレス(/proc/kallsymsと同じデータ)
  • dmesg - カーネルリングバッファメッセージ(dmesgコマンドと同じデータ)

プロセス情報

  • tasks - コマンドラインとバイナリパスを含む実行中のプロセス。各タスクは複数の独立したソースを介して発見されます。これはルートキット検出に役立ちます。ルートキット検出のためのタスク列挙方法の比較および重複排除されたプロセスリストを参照してください。
  • task_open_files - 各プロセスが開いているファイル(対象を絞った分析にはtask制約を指定し、すべてのタスクを一度にクエリすることも可能)
  • memory_mappings - 各プロセスによってマップされたメモリ領域(対象を絞った分析にはtask制約を指定し、すべてのタスクを一度にクエリすることも可能)
  • task_capabilities - タスクのLinuxケイパビリティセット(実効、許容、継承可能、境界、アンビエント)。task制約が必要なため、tasks/processesと結合してください(例:JOIN task_capabilities c ON c.task = p.virtual_address)。
  • task_ptrace_flags - 指定されたタスクのptraceフィールドをデコードします。task制約が必要です。

カーネルモジュール

  • kernel_modules - メタデータ(名前、状態、バージョン、パラメータ、テイントフラグ)を含むロードされたカーネルモジュール
  • kernel_module_mem_entries - カーネルモジュールオブジェクトからのmemエントリ。kernel_module制約が必要なため、kernel_modulesと結合してください(例:JOIN kernel_module_mem_entries r ON r.kernel_module = m.virtual_address)。
  • ftrace_ops - デフォルトでftrace_ops_listシンボルから辿ったstruct ftrace_opsノードのリスト。virtual_addressを制約して単一ノードを読み取るか、start_vaddr(オプションでend_vaddrで範囲指定)を制約して任意のノードから辿ることができます。

ネットワーク情報

  • network_connections - アクティブなネットワーク接続(TCPソケット)
  • network_interfaces - IPアドレスとMACアドレスを含むネットワークインターフェース

ファイルシステム

  • syslog_file - カーネルのファイルキャッシュから読み取ったシステムログ(ログファイルが削除されているか利用できない場合でも、メモリにキャッシュされている限り機能します)

デバッグ

  • mquire_diagnostics - 分析の進行状況、警告、エラーを示す内部mquireログ

コマンド

mquireは3つの主要なコマンドを提供します。

  • mquire shell - 対話型SQLシェルを起動し、メモリスナップショットをクエリします
  • mquire query - 単一のSQLクエリを実行し、結果を出力します(JSON形式またはテーブル形式をサポート)
  • mquire command - メモリスナップショットに対してカスタムコマンドを実行します(例:.task_tree, .system_version, .dump)

ドットコマンド

mquireは、SQLクエリと区別するために、ドット(.)で始まる特別なコマンドを提供します。

組み込みコマンド

これらのコマンドは、対話型シェルおよびmquire queryで動作します。

  • .tables - 利用可能なすべてのテーブルを一覧表示
  • .schema - すべてのテーブルのスキーマを表示
  • .schema <table> - 特定のテーブルのスキーマを表示
  • .commands - 利用可能なすべてのカスタムコマンドを一覧表示
  • .exit - 対話型シェルを終了(シェルのみ)

カスタムコマンド

これらのコマンドは、対話型シェルおよびmquire commandで動作します。

各コマンドで--helpを使用すると、利用可能なオプションと使用法の情報を表示できます。例:.task_tree --help

.system_version

オペレーティングシステムのバージョン情報を表示します。

これはSELECT * FROM os_versionと同等の便利なコマンドですが、フォーマットされた出力を提供します。

.task_tree

実行中のプロセスとスレッドの階層ツリーを表示します。Linuxのpstreeコマンドと似ています。

オプション:

  • --show-threads - プロセスに加えてスレッドも含めます。有効にすると、各エントリにTGIDとTIDの両方が表示されます。
  • --use-real-parent - ツリー構造の構築にparentフィールドではなくreal_parentフィールドを使用します。real_parentフィールドは、再親化前の元の親プロセスを示します(親プロセスが終了した後でもプロセス生成チェーンを追跡するのに役立ちます)。

注記:

  • スレッドを表示する場合の形式は[TGID TID]、スレッドを非表示にする場合は[TGID]です。TGID(スレッドグループID)は一般的にPIDと呼ばれるものです。メインスレッド(TGID == TID)の場合、両方の値は同じになります。

.carve

仮想メモリの領域をディスクに切り出します。このコマンドは、特定の仮想アドレス範囲から、指定されたページテーブルを使用して生のメモリ内容を抽出します。プロセスメモリ、ヒープ内容、またはその他のメモリ領域の抽出に便利です。

引数:

  • ROOT_PAGE_TABLE - ルートページテーブルの物理アドレス(オプションで0xプレフィックス付きの16進文字列)。翻訳に使用するアドレス空間を決定します。
  • VIRTUAL_ADDRESS - 切り出しを開始する仮想アドレス(オプションで0xプレフィックス付きの16進文字列)。
  • SIZE - 切り出すバイト数。
  • DESTINATION_PATH - 切り出されたメモリが書き込まれる出力ファイルのパス。

注記:

  • コマンドは、書き込み前にマップされた領域とマップされていない領域の概要を表示します。
  • マップされていない領域は、出力ファイルではゼロで埋められます。

.dump

カーネルのファイルキャッシュからファイルを抽出して、メモリから直接ファイルを復元します。このコマンドは、すべてのタスクとそのオープンファイル記述子を反復処理し、ページキャッシュからファイル内容を抽出します。

引数:

  • OUTPUT - 抽出されたファイルの出力ディレクトリ。ファイルはTGIDごとに整理されます(例:tgid_1234/path/to/file)。

注記:

  • 現在は、ファイル記述子(プロセスのファイル記述子テーブルから)を介して開かれたファイルでのみ動作します。
  • メモリマップされたファイルからのデータ抽出はまだサポートしていません。
  • 空のファイル(ページキャッシュにデータがない)はスキップされます。
  • 読み取りエラーが発生した領域は、出力ではゼロ埋めされます。

ユースケース

mquireは以下の目的で設計されています。

  • フォレンジック分析 - 侵害されたシステムのメモリスナップショットを分析し、何が実行されていたか、どのファイルがアクセスされたかを把握する
  • インシデント対応 - メモリダンプを迅速にクエリして、悪意のあるアクティビティの証拠を見つける
  • セキュリティ研究 - メモリスナップショットからカーネル内部やプロセスの動作を調査する
  • マルウェア解析 - 検出されずに実行中のプロセスとそのファイル操作を調べる
  • カスタムツール作成 - mquireライブラリクレートを使用して独自の分析ツールを構築する。このクレートは、カーネルメモリ解析のための再利用可能なAPIを提供します。

ビルドとインストール

CIからのビルド済みパッケージ

ビルド済みパッケージはCI実行のアーティファクトとして利用できます。Actionsタブから、成功したワークフロー実行を選択し、アーティファクトをダウンロードすることで入手できます。以下のパッケージ形式が利用可能です。

  • linux-deb-package - Debian/Ubuntu用.debパッケージ
  • linux-rpm-package - Fedora/RHEL/CentOS用.rpmパッケージ
  • linux-tgz-package - 汎用Linux用.tar.gzアーカイブ

ソースからのビルド

mquireはRustで書かれています。ビルドするには:```bash

Clone the repository

git clone https://github.com/trailofbits/mquire cd mquire

Build the project

cargo build --release

The binary will be in target/release/

- mquire: Unified tool with shell, query, and command modes

## 対応するスナップショット形式

mquireは、ファイル拡張子で検出される以下のメモリスナップショット形式をサポートしています:

| 形式 | 拡張子 | 説明 |
|--------|-----------|-------------|
| Raw | `.raw` | フラットな物理メモリダンプ(物理アドレス空間のバイト単位コピー) |
| LiME | `.lime` | アドレス範囲ヘッダー付きの[Linux Memory Extractor](https://github.com/504ensicsLabs/LiME)形式 |
| ELF core | `.elf` | PT_LOADセグメントを含むELFコアダンプ(`virsh dump` または QEMU `dump-guest-memory` で生成されるもの) |

## メモリスナップショットの取得

### AVMLの使用(推奨)

ライブLinuxシステムからメモリスナップショットを取得するには、[AVML](https://github.com/microsoft/avml)を推奨します。以前は[LiME](https://github.com/504ensicsLabs/LiME)が推奨されていましたが、現在は積極的にメンテナンスされていません。```bash
sudo avml output.lime

重要: mquire用のスナップショットを取得する際には --compress を使用しないでください。mquire は圧縮された AVML スナップショットをサポートしていません。圧縮されたスナップショットがある場合は、avml-convert を使用して最初に解凍してください: avml-convert compressed.lime uncompressed.lime

追加オプションについては、AVML ドキュメント を参照してください。

virsh の使用(仮想マシン)

libvirt/KVM 仮想マシンの場合は、virsh dump を使用して ELF core dump を生成します:```bash virsh -c qemu:///system dump output.elf --memory-only --format elf

ダンプ中はVMが一時停止され、ダンプ後に再開されます。`--live` を追加すると、一時停止を回避できますが、スナップショットの整合性が低下します。

## はじめに

メモリスナップショットを取得したら、SQLクエリとカスタムコマンドを使って操作できます。mquire はスナップショットを操作するための3つの方法を提供します:

### インタラクティブシェル
ツールをダウンロード