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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
snapchange — KVMを使用したメモリスナップショットの軽量ファジング | Kitploit
ツール/GitHubGitHub/awslabs/snapchange
動的分析 (サンドボックス)脆弱性分析動的コード分析 (DAST)デバッガセキュリティ仮想化ファジング
GitHubawslabs/snapchange

snapchange

KVMを使用したメモリスナップショットの軽量ファジング

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Snapchange

KVM を使用したメモリスナップショットの軽量ファジング

Snapchange は、生のメモリダンプとレジスタ状態を KVM 仮想マシン (VM) にロードして実行する機能を提供します。実行中の任意の時点で、この VM は、KVM によって検出されたダーティページ、またはファザーによって手動でダーティ化されたページをリセットすることにより、初期状態にリセットできます。

クイックリンク:

  • クックブック には、fuzz、trace、coverage、minimize、project のコマンドライン・ユーティリティの例が含まれています
  • QEMU でスナップショットを取得する
  • アーキテクチャ
  • ファザーのライフサイクル

チュートリアル

  • チュートリアル 1 - 基本的な使い方
  • チュートリアル 2 - ASAN を使用した LibTIFF
  • チュートリアル 3 - カスタムミューテーターを使用した FFmpeg
  • チュートリアル 4 - システムコールファザー
  • チュートリアル 5 - Redqueen

目標

  • KVM を使用して物理メモリとレジスタ状態のスナップショットを再生する
  • 複数のコアでの並列実行
  • ゲスト VM に一連のイントロスペクション機能を提供する
  • ブレークポイントカバレッジによるリアルタイムのカバレッジ状態
  • ファザーコンポーネントのリアルタイムのパフォーマンスメトリクス
  • シングルステップデバッグトレース、テストケースの最小化、テストケースのカバレッジなどのファジングユーティリティを提供する
  • カスタムの変異および生成戦略を可能にする入力抽象化

例:

ファザーテンプレートからターゲットファザーを作成する

root@kitploit:~
$ cp -r -L fuzzer_template your_new_fuzzer

your_new_fuzzer/create_snapshot.sh を変更して、ターゲットのスナップショットを取得する

src/fuzzer.rs を更新して、変異したデータをゲスト VM に注入する

root@kitploit:~
#[derive(Default)]
pub struct TemplateFuzzer;

impl Fuzzer for TemplateFuzzer {
    // The type of Input being fuzzed. Used to know how to generate and mutate useful inputs.
    type Input = Vec<u8>;
    // The starting address of the snapshot
    const START_ADDRESS: u64 = 0x402363;
    // The maximum length of mutated input to generate
    const MAX_INPUT_LENGTH: usize = 100;

    fn set_input(&mut self, input: &Self::Input, fuzzvm: &mut FuzzVm<Self>) -> Result<()> {
        // Write the mutated input into the data buffer in the guest VM
        fuzzvm.write_bytes_dirty(VirtAddr(0x402004), CR3, &input)?;
        Ok(())
    }

    fn reset_breakpoints(&self) -> Option<&[BreakpointLookup]> {
        Some(&[
            // Reset when the VM hits example1!main+0x123
            BreakpointLookup::SymbolOffset("example1!main", 0x123)
        ])
    }
}

16 コアでファジングを開始する

root@kitploit:~
$ cargo run -r -- fuzz -c 16

実装

この README で使用される用語の簡単な説明:

  • ハイパーバイザー: スナップショットを KVM で実行する、ターゲットに依存しないコード
  • ファザー: ターゲット固有のファズケースのためにゲストを変更および監視するために使用される、ターゲット固有のコード

ハイパーバイザーは、要求された各コアの物理メモリファイルをマッピングすることから始まります。これにより、各コアは独自のメモリコピーを持つことになります。次に、ハイパーバイザーは KVM ゲストを作成し、このバッキングメモリをゲストに与えます。このゲストのレジスタ状態は、指定されたレジスタ状態で初期化され、ゲストの実行が開始されます。ハイパーバイザーは、ゲストが終了するまで待機します。各終了はハイパーバイザーによって処理され、一部はターゲット固有の変異、変更、またはイントロスペクションのためにファザーに渡されます。終了のハンドラーがゲストをリセットすべきであると示した場合、ハイパーバイザーは実行ループを終了し、ゲストを元のスナップショット状態にリセットして、実行ループを再度開始します。

ゲストのカバレッジは、カバレッジブレークポイントを使用して生成されます。ブレークポイントするアドレスのリストを含む別のファイルをハイパーバイザーに渡すことができます。これらのアドレスのいずれかがヒットした場合、そのアドレスはカバレッジデータベースに追加され、そのアドレスの命令が復元されます。これにより、ブレークポイントは再度トリガーされません。

プロジェクトディレクトリ

Snapchange は、構成にターゲット固有のプロジェクトディレクトリを活用します。このディレクトリは、入力ファイルと出力ファイルおよびディレクトリが配置される場所です。次のファイル拡張子/ディレクトリが入力として使用されます:

  • .physmem - 生の物理メモリファイルを含むファイル
  • レジスタファイル (次のいずれか)
    • .regs - レジスタ状態 を含む JSON レジスタファイル
    • .qemuregs - qemu の info registers からの出力

プロジェクトディレクトリ内のファイルとその用途の完全なリストは、ここ にあります。

デバッグトレース

デバッグ用シングルステップトレースの完全な例は、ここ にあります。

root@kitploit:~
ITERATION 604 0x00007ffff7ecb0d5 0x11115000 | libc-2.31.so!__GI___getpid+0x5 (0x7ffff7ecb0d5)              
    syscall 
    [0f, 05]
ITERATION 605 0xffffffff83a00000 0x11115000 | entry_SYSCALL_64+0x0 (0xffffffff83a00000)                    
    swapgs 
    [0f, 01, f8]
ITERATION 606 0xffffffff83a00003 0x11115000 | entry_SYSCALL_64+0x3 (0xffffffff83a00003)                    
    mov qword ptr gs:[0xa014], rsp 
    [None:0x0+0xa014=0xa014]] 
    RSP:0x7fffffffeb78 -> example1!main+0x19 (0x55555555514e)-> 0xff8458b48f44589
    [65, 48, 89, 24, 25, 14, a0, 00, 00]
ITERATION 607 0xffffffff83a0000c 0x11115000 | entry_SYSCALL_64+0xc (0xffffffff83a0000c)                    
    nop 
    [66, 90]
ITERATION 608 0xffffffff83a0000e 0x11115000 | entry_SYSCALL_64+0xe (0xffffffff83a0000e)                    
    mov rsp, cr3 
    RSP:0x7fffffffeb78 -> example1!main+0x19 (0x55555555514e) -> 0xff8458b48f44589
    CR3:0x11115000
    [0f, 20, dc]

スナップショット

VirtualBox または QEMU を介してスナップショットを取得する方法については、以下を参照してください:

  • VirtualBox
  • QEMU

例には、ゼロから完全なスナップショットを作成する make_example.sh (例 1 など) スクリプトが含まれています。これらの例は、再現可能なスナップショットのための他のターゲットのテンプレートとして使用できます。

ドキュメントと clippy

root@kitploit:~
make all
cargo doc --open

どこから読み始めますか?

HACKING には、システムを理解し始めるためのコードベース内のいくつかの高レベルの場所が記載されています。

セキュリティ

詳細については、CONTRIBUTING を参照してください。

ライセンス

このプロジェクトは Apache-2.0 License の下でライセンスされています。

ツールをダウンロード