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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
SilentMoonwalk — PoC 完全動的コールスタックスプーファーの実装 | Kitploit
ツール/GitHubGitHub/klezvirus/silentmoonwalk
エクスプロイトリバースエンジニアリングバイナリ解析レッドチーミングペイロード開発
GitHubklezvirus/silentmoonwalk

SilentMoonwalk

PoC 完全動的コールスタックスプーファーの実装

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

人気

すべて見る →

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

すべてのツールを探索

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

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

SilentMoonwalk

完全動的コールスタックスプーファーのPoC実装

TL;DR

SilentMoonwalkは、完全動的コールスタックスプーファーのPoC実装であり、呼び出し元をコールスタックから除去し、ROPを使用してアンワインドと制御フローを非同期化する技術を実装しています。

著者

このPoCは、スタックスプーフィングに関する共同研究の成果です。研究の著者は以下の通りです。

  • KlezVirus
  • Waldo-IRC
  • Trickster0

この研究は、Waldo-IRCとTrickster0の貢献なしには不可能でした。両者はPoCの初期段階とその背後にある研究に多大な貢献をしました。

概要

このリポジトリは、任意のWindows APIを呼び出す際にコールスタックをスプーフィングするPoC実装を示しています。

この試みは、こちらのTwitterスレッドおよびこちらのTwitterスレッドに触発されました。そこでは、師であるnamazsoが、ROPチェーンを用いてアンワインドと実際の制御フローを非同期化し、その後元のスタックを復元するスタックアンワインド手法の拡張を示し、提案しました。

このPoCは上記と同様のことを試み、非同期化スタックを使用して元のコールスタックを完全に隠し、EXEイメージベースもそこから除去します。戻り時にはROPガジェットが呼び出され、元のスタックを復元します。コード内では、このプロセスをループ内で10回繰り返し、毎回異なるフレームを使用して安定性を証明しています。

サポートされているモード

現在、このツールは2つのモードをサポートしています。そのうちの1つは、機能しないPOP RBPフレームに対する不適切なパッチであり、現在のRSPをシフトし、コールスタックに2つの偽のフレームを追加することで動作します。合成フレームを使用して動作するため、このモードを「SYNTHETIC」と呼んでいます。

RBPレジスタをスタックからポップすることでアンワインドするフレームを選択すると、ツールが不適切なフレームを選択し、以下のように不自然に途切れたコールスタックになる可能性があります。

Windows 10 Call Stack - Cut

合成コールスタックモード

この問題に対する愚直な解決策は、2つの偽のフレームを作成し、それらを途切れたコールスタックにリンクすることです。これにより、一見正当に見えるコールスタックが作成されます(たとえPOP RBPを呼び出す適切なフレームがなくても)。しかし:

  • 非同期化手法の利点が失われる
  • スタックはまだアンワインド可能である
  • 結果として得られるコールスタックは一見正当に見えるかもしれませんが、厳密なチェックにはおそらく合格しないでしょう

_合成スプーフィングの結果は以下の画像で確認できます。

Windows 10 Call Stack - Apparently Legit, non unwoundable - getchar

図1: Windows 10 - 一見正当でアンワインド不可能なコールスタック。EXEモジュールが完全に除去されています(引数なしの関数getcharを呼び出し)

注: この動作モードはデフォルトで無効になっています。有効にするには、CALLSTACK_TYPEを1に変更してください。

非同期化スタックモード

このモードは上記の問題に対する正しい解決策であり、不適切なフレームを適切なフレームに置き換えるだけです。

Windows 10 Call Stack - Legit, unwoundable - MessageBoxExA

図2: Windows 10 - 正当でアンワインド可能なコールスタック。EXEモジュールが完全に除去されています(4つの引数を持つ関数MessageBoxAを呼び出し)

ユーティリティ

リポジトリには、ランタイム関数を検査するための小さなユーティリティも含まれています。これはランタイム関数エントリの解析に役立つかもしれません。

root@kitploit:~
UnwindInspector.exe -h

 Unwind Inspector v0.100000

 必須引数:
   -m <module>: ターゲットDLL
   -f <function>: ターゲット関数
   -a <function-address>: ターゲット関数アドレス

出力例:

root@kitploit:~
UnwindInspector.exe -m kernelbase -a 0x7FFAAE12182C
[*] 関数アドレス 0x7ffaae12182c を使用

  ランタイム関数 (0x000000000000182C, 0x00000000000019ED)
  アンワインド情報アドレス: 0x000000000026AA88
    バージョン: 0
    バージョン+フラグ: 00000000
    プロローグサイズ: 0x1f
    コード数: 0xc
    フレームレジスタ: 0x0
    フレームオフセット: 0x0
    アンワインドコード:
    [00h] フレーム: 0x741f - 0x04  - UWOP_SAVE_NONVOL     (RDI, 0x001f)
    [01h] フレーム: 0x0015 - 0x00  - UWOP_PUSH_NONVOL     (RAX, 0x0015)
    [02h] フレーム: 0x641f - 0x04  - UWOP_SAVE_NONVOL     (RSI, 0x001f)
    [03h] フレーム: 0x0014 - 0x00  - UWOP_PUSH_NONVOL     (RAX, 0x0014)
    [04h] フレーム: 0x341f - 0x04  - UWOP_SAVE_NONVOL     (RBX, 0x001f)
    [05h] フレーム: 0x0012 - 0x00  - UWOP_PUSH_NONVOL     (RAX, 0x0012)
    [06h] フレーム: 0xb21f - 0x02  - UWOP_ALLOC_SMALL     (R11, 0x001f)
    [07h] フレーム: 0xf018 - 0x00  - UWOP_PUSH_NONVOL     (R15, 0x0018)
    [08h] フレーム: 0xe016 - 0x00  - UWOP_PUSH_NONVOL     (R14, 0x0016)
    [09h] フレーム: 0xd014 - 0x00  - UWOP_PUSH_NONVOL     (R13, 0x0014)
    [0ah] フレーム: 0xc012 - 0x00  - UWOP_PUSH_NONVOL     (R12, 0x0012)
    [0bh] フレーム: 0x5010 - 0x00  - UWOP_PUSH_NONVOL     (RBP, 0x0010)

ビルド

PoCをビルドし、画像と同様の動作を確認するには、以下の設定を確認してください。

  • GSを無効化 (/GS-)
  • コード最適化を無効化 (/Od)
  • プログラム全体の最適化を無効化 (/GLを削除)
  • サイズと速度の優先を無効化 (/Os、/Otを削除)
  • 組み込み関数を有効化(まだ有効でない場合)(/Oi)

先行研究

このトピックに関する先行研究に言及しておきます。これらは本研究成果の基盤を築きました。

  • Return Address Spoofing: Namaszoによるオリジナルの手法とアイデア。私が知る限り、他のすべてのPoCはこれを基に構築されています。
  • YouMayPasser: Arashによる素晴らしい研究で、NamaszoのReturn Address Spoofing PoCを適切に拡張した最初のものです。
  • VulcanRaven: 別の実際のコールスタックをミラーリングするスレッドスタックを合成的に作成することでスプーフィングを行うコールスタックスプーファー。
  • Unwinder: アンワインドコード情報を解析してコールスタック内のフレームを置き換えることで動作する、非常に優れたRust製コールスタックスプーファーのPoC実装。

クレジット

  • waldo-ircとtrickster0に多大な感謝を。彼らはこの研究で協力してくれました。すべてを彼らに負っています。
  • このアイデアのすべての功績はnamaszoにあります。私は彼を個人的に天才だと思っています。彼はリリース前にこのPoCをクロスチェックもしてくれました。心から感謝します。

注意事項

  • このテストは非常に限られています。現時点では認識していない例外が存在する可能性があります。
  • 128ビットレジスタを含むアンワインドはテストされていません。
  • 128ビットレジスタを使用する関数の呼び出しは公式にサポートされていません。
ツールをダウンロード