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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
JOP_ROCKET — このフレームワークにより、ユーザーはJOPガジェットを発見でき、DEPをバイパスするための完全なJOPチェーン構築を自動化できます。JOP ROCKETは、Windowsジャンプ指向プログラミングの究極のソリューションです。JOP ROCKETはまた、JOPで可能なことを大幅に拡張する、斬新な2ガジェットディスパッチャーも発見します。 | Kitploit
ツール/GitHubGitHub/bw3ll/jop_rocket
エクスプロイトリバースエンジニアリング論文と研究学習と教育ペイロード開発バイナリエクスプロイトラボと実践
GitHubbw3ll/jop_rocket

JOP_ROCKET

このフレームワークにより、ユーザーはJOPガジェットを発見でき、DEPをバイパスするための完全なJOPチェーン構築を自動化できます。JOP ROCKETは、Windowsジャンプ指向プログラミングの究極のソリューションです。JOP ROCKETはまた、JOPで可能なことを大幅に拡張する、斬新な2ガジェットディスパッチャーも発見します。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

alt text

JOP ROCKET

注記: 2.15 では、ツーガジェットディスパッチャを導入しました。これにより、ディスパッチャガジェットの可能性が大幅に広がります。2021年5月26日の2.15では、多くの最適化と追加の新機能が加えられています。

更新: 2021年11月29日: @Hack in Ryadh のスライドと、Shellcodeless JOP に関するホワイトペーパーをアップロードしました。講演で使用されたサイレントデモ動画は、こちらからご覧いただけます: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV

更新: 2022年12月1日: この GitHub の最後に Q&A を追加しました。リソース(講演や論文)へのリンクが含まれています。

現在のバージョン: 2.15

Jump-oriented Programming Reversing Open Cyber Knowledge Expert Tool(略称 JOP ROCKET)は、x86 Windows 環境での JOP ガジェットの発見を支援するために設計されたツールです。このツールは DEF CON 27 で公開され、Dr. Bramwell Brizendine と Dr. Josh Stroschein による講演の題材となりました。2020年9月に、開発中だった大規模なアップデートがリリースされ、近い将来にマイナーアップデートが計画されています。

このツールをダウンロードするには、https://github.com/Bw3ll/JOP_ROCKET にアクセスしてください。

これまでに多数の主要なアップデートが行われています。多くのアップデートを活用するために、2.15 より前のバージョンは更新することをお勧めします。これらには、自動 JOP チェーン生成、新しいタイプのガジェットの発見、新しいタイプのディスパッチャガジェット、ツーガジェットディスパッチャが含まれます。JOP ROCKET は、そのパフォーマンスと速度を強化・最適化するための、その他の重要な変更も多数行われています。

JOP ROCKET は、Capstone 逆アセンブルエンジンやその他の依存関係を利用する Python プログラムです。このソフトウェアエクスプロイトツールは、ジャンプ指向プログラミング(Jump-oriented Programming)を支援するために設計された、フル機能を備えたツールです。Windows 上で実行することを想定しています。

現時点では、ヘルプメニューに記載されている以上の使用情報はありません。JOP エクスプロイトの構築は簡単ではなく、非常にニュアンスに富んでおり、ROP と共通する部分もありますが、多くの違いがあります。簡単なデモについては DEF CON の講演を参照してください。 https://www.youtube.com/watch?v=PMihX693mPE

このツールは、ダコタ州立大学(Dakota State University)の博士課程プログラムにおいて、CSC 848: Advanced Software Exploitation(プログラムで最も難しいコース)の一部として教えられてきました。学生たちは、DEP と ASLR のバイパスを含むエクスプロイトを完成させました。

JOP ROCKET に関するさまざまな問題への支援、そしてインストール手順について、Austin Babcock に感謝します。彼は JOP の達人です。

ここにアーカイブ、JOP ROCKET challenge - toy binaries.zip をアップロードしました。これにより、関心のある方は JOP ROCKET を使って、いくつかのサンプルトイバイナリで JOP をテストおよび練習できます。データ実行防止(DEP)をバイパスできますか? これは、脆弱であることが保証され、適切なガジェットが存在することがわかっているバイナリで JOP を練習したい場合に適しています。同じバイナリには、簡単なバージョンと難しいバージョンがあります。ただし、JOP は慣れるまでは最初はおそらく難しいでしょう。これらのバイナリで JOP をマスターしたら、十分なガジェットがあると仮定して、実際のガジェットでも試すことができます。ディスパッチャガジェットパラダイムを使用する場合は、ディスパッチャガジェットが必要であることに注意してください。JOP は ROP と混在させることも可能で、JOP ガジェットを使って RET を指すようにすることができます。たとえば、JMP EDX で EDX が RET を指すようにできます。これは、ROP を機能させるために 1 つか 2 つの JOP ガジェットだけが必要な場合にさらに役立ちます。アーカイブ内のバイナリを使用すると、ディスパッチャガジェットパラダイムをいくつかの異なる方法で使用できるはずです。

JOP のディスパッチャガジェットパラダイムを使用すると、ROP を 100% 排除できます。ただし、ディスパッチテーブルとディスパッチャガジェットをロードするために、2 つの ROP ガジェットから開始するのが最も簡単です。プリビルドの JOP チェーンは、それらが存在すれば、これを自動的に実行します。そこから先は、間接ジャンプと間接コール(JMP EBX、CALL EDX など)の両方を使用した純粋な JOP にできます。

JOP ROCKET の基本的なインストール手順

ステップ 1:

Python 2.7 をインストールします。最も簡単な方法は、Web サイトから行うことです: https://www.python.org/download/releases/2.7/

すでに Python 3 をお持ちの場合でも、Python 2.7 が必要です。このツールは Python 3 では正常に動作しません。

両方をお持ちの場合は、特別なコメントを追加する必要があります:

#!python2

これを rocket.py の先頭に追加します。その後、"python rocket.py" ではなく "py rocket.py" で実行します。これにより、プログラムが Python 2.7 を使用して実行されることが保証されます。または、単に py -2 rocket.py を実行することもできます。

alt text

ステップ 2:

pip が Python にまだ含まれていない場合は、pip をインストールします。

  • https://pip.pypa.io/en/stable/installing/

リンク先の指示に従って、提供されているスクリプトを保存して実行する必要があります。エラーが発生した場合は、「代替」スクリプトを試してください。

それでも pip が機能しない場合は、Path システム環境変数に "C:\python27\Scripts"(または対応するディレクトリ)を追加してみてください:

  • スタート
  • コンピューターを右クリック
  • プロパティ
  • システムの詳細設定
  • 詳細設定タブ
  • 環境変数

alt text

ステップ 3:

pip で依存関係のインストールを開始します!

注記: pip を使用したインストールは Windows ターミナルでは機能するはずですが、Cygwin 環境では機能しない場合があります。Cygwin を使用する場合は、代わりにソースコードからインストールする必要があるかもしれません。これはより時間のかかる作業になる可能性があり、各依存関係の製作者による最新のドキュメントを参照することをお勧めします。

  • pip install capstone

  • pip install pefile2

    • おそらく、Python 2.7 には pefile がすでにインストールされているでしょうが、そのバージョンは古いものです。

    • 必要なのは Pefile2 です。

    • プログラムに pefile2 を使用させるには、pip uninstall pefile を実行する必要があるかもしれません。

  • その他... 依存関係の一覧は、このドキュメントの下部にあります。まだインストールされていない場合は、それぞれをインストールする必要があります。

  • 上記の 2 つが、おそらく自分でインストールする必要がある唯一のものです。

依存関係の多くは Python にすでに含まれています。利用可能なモジュールを一覧表示するには、プロンプトを開きます:

alt text

一覧を確認して、すべての依存関係があるかどうかを確認してください。ないものについては、pip またはソースコードからインストールしてください。

依存関係:

  • Capstone
  • pywin32
  • Pefile2
  • Ctypes

注記: pywin32 は Win32file と Win32api に使用されます。

必要なファイル:

1 つのディレクトリに 5 つのファイルすべて(rocket.py、lists,py、checkIt.py、ui.py、stackpivot.py)を置いてください。ツールの使用を開始するには、コマンドラインで python rocket.py filename.exe を実行します。ここで filename.exe は、JOP ガジェットまたは JOP チェーンを取得したいプログラムです。

エラー:

"SyntaxError: Missing parentheses in call to 'print'" のようなエラーが発生する場合、おそらく Python 3 で実行されています。プログラムが Python 2 を使用するように、ステップ 1 で説明した修正を試してください。

「lists」または「ui」に関連するエラーは、lists.py と ui.py ファイルの場所が原因である可能性が高いです。これらのファイルが rocket.py と同じディレクトリにあることを確認してください。

より高度なインストール手順

Cygwin 環境でこれを使用するには、おそらく Capstone をソースコードからインストールする必要があります。これにはさまざまな方法があり、Capstone のドキュメントが支援を提供します。Cygwin は元々このツールの開発中に使用されていましたが、現在はそうではありません。JOP ROCKET v2.0 は Cygwin では未テストであり、コマンドプロンプトが推奨される使用方法です。注記: Cygwin の使用は明示的にはサポートされなくなりました。また、このプログラムでの使用は推奨されなくなりました。

基本的な使い方

より詳細な使用情報は今後公開される予定です。サポートが必要な場合は、DEF CON 27 の講演とヘルプサブメニューを参照してください。

ただし、開始するには、5 つの Python ファイル(rocket.py、ui.py、stackpivot.py、checkIt.py、lists.py)を同じディレクトリに置く必要があります。その後、コマンドラインから実行します。インストールディレクトリ内のローカルファイルを指定することもできますが、モジュール/DLL は見つかりません。これらを見つけるには、プログラムをインストールし、アプリケーションへの絶対パスをテキストファイル内の入力として指定し、それをコマンドラインの引数として提供します。例:

python rocket.py input.txt

input.txt 内には絶対パス、例: C:\rocket2\sample_binary.exe を記述します。絶対パスを指定することで、必要に応じてスキャンするモジュールも抽出できます。ローカルディレクトリ内のプログラムのみで JOP ROCKET を使用したい場合は、イメージ実行ファイル自体、つまり DLL なしのガジェットのみが見つかります。その方法で使用するには、次の構文を使用します:

python rocket.py sample_binary.exe

実行ファイルが同じディレクトリにある場合は、上記の方法で JOP ROCKET を使用できます。

バイナリのすべてのモジュール/DLL を確実に取得する

分析する実行ファイルまたは DLL をロードする場合、2 つのアプローチがあります。1 つ目は、実行ファイルを同じディレクトリに置き、それを引数としてプログラムを実行する方法です(例: python rocket.py binary.exe)。これにより、ユーザーは多くのシステムモジュールを識別して抽出できます。ただし、一部の非システムバイナリは見つかりません。包括的なカバレッジを得るには、ユーザーはアプリケーションへの絶対パスをテキストファイルに指定し、それを ROCKET への入力として使用する必要があります(例: python rocket.py input.txt)。これにより、ROCKET は対象アプリケーションに関連する非システム DLL を特定、抽出、検索できます。したがって、一部の DLL が除外される可能性があるため、通常はテキストファイルを介してバイナリを入力として指定することをお勧めします。例: python rocket.py binaryToScan.txt。binaryToScan.txt にはバイナリのパス、C:\Users\CoolPerson\Desktop\Instructions\targetBinary.exe を含める必要があります。

非常に大きなバイナリでのメモリ問題

32 ビット版の Python は、非常に大きなバイナリでは動作しなくなります。これらを処理するには、64 ビット版の Python を使用する必要があります。

32 ビット版から 64 ビット版の Python への移行に関する Austin の手順は次のとおりです: 64 ビット版の python2.7 をインストールするには、まず古いインストールがアンインストールされていることを確認してください。64 ビット版をインストールした後、"DLL load failed: %1 is not a valid Win32 application" のようなライブラリのインポート時にエラーが発生する場合があります。これは、Python が以前にインストールされた 32 ビット版をロードしようとするために発生します。この問題を修正するには、pip を使用してライブラリをアンインストールします。Python 2 と 3 の両方がインストールされている場合は、"py -2 -m pip " のように使用して、正しいバージョンの pip が使用されていることを確認してください。

capstone の問題の修正は簡単です:

py -2 -m pip uninstall capstone

py -2 -m pip install capstone

win32api インポートに関するエラーは pywin32 に関連しています。pip がプロセスを自動化しない可能性があるため、これをアンインストールするのはより困難です。...\Python27\Lib\site-packages 内の PyWin32 ファイルを削除して手動でアンインストールする必要があるかもしれません。

次に、次を実行します:

py -2 -m pip install pywin32

その後、...\Python27\Scripts\pywin32_postinstall.py -install を実行してインストールを完了します。

Q & A

Q: JOP ROCKET の何が特別なのですか?

A: JOP ROCKET は、ディスパッチャガジェットを含む必要なすべてのガジェットを見つけます。ディスパッチャガジェットを検索する他のツールは知りません。さらに、新しいタイプのガジェットと JOP への革新を導入しています。JOP ROCKET は、複数のスタックピボットの連続を伴うディスパッチャガジェットパラダイムの新しい変種を使用して、DEP をバイパスする完全な JOP チェーンを生成することもできます。現実的には、JOP ROCKET を使用せずにディスパッチャガジェットアプローチで JOP エクスプロイトを行うことは非常に困難です。より限定的な JOP ガジェットを提供する他の ROP ツールもありますが、それらはほとんど将来の作業のためのプレースホルダーであり、JOP ROCKET で見つかる一部のガジェットなしでは JOP エクスプロイトを完了できません。

Q: 以前どこかの講演で JOP ROCKET を見たと思いますが、どこでしたか?

A: 私たちはいくつかのカンファレンスで発表してきました: DEF CON 27 (2019)、Wild West Hackin' Fest (2020)、Hack in the Box Amsterdam (2021)、Black Hat Asia (2021)、@Hack (2021)(現在は Black Hat Middle East and Africa に改名)。これらそれぞれについて、通常はホワイトペーパーとビデオがあります(@Hack にはビデオなし)。アカデミックなカンファレンスもありました。各講演とホワイトペーパーは異なり、通常は少なくとも 60〜70% が新しい内容です。JOP に関するさまざまなトピックを取り上げています。新しい講演の予定はなく、私たちは繰り返すのが好きではないため、共有する新しい何かがない限り、別の講演は行わないでしょう。

ここに、いくつかの JOP 関連資料の限定的なリストを示します。私たちは絶えず進化し、新しい革新を追加しているため、これは同じ講演や論文ではありません。それぞれに新しい貢献があります。

DEF CON 27 2019 ビデオ: https://www.youtube.com/watch?v=PMihX693mPE

Wild West Hackin' Fest 2020 ビデオ: https://www.youtube.com/watch?v=ZQuxSSBfeHM

Black Hat Asia ビデオ: https://www.youtube.com/watch?v=NYgTw-h6GT8

Black Hat Asia ペーパー: https://i.blackhat.com/asia-21/Thursday-Handouts/as-21-Brizendine-Babcock-Prebuilt-Jop-Chains-With-The-Jop-Rocket-wp.pdf

Hack in the Box Amsterdam 2021 ビデオ: https://www.youtube.com/watch?v=MxIySXHvKyE

Hack in the Box Amsterdam 2021 ペーパー: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-.pdf

高解像度: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-Hi-res.pdf

@Hack 2021(Black Hat Middle East and Africa に改名)ペーパー: https://blackhatmea.com/content-hub/advanced-code-reuse-attacks-jump-oriented-programming

アカデミックな研究者であれば、これらの一部または私たちの学術論文も引用してください。:-)

Q: 実際の JOP エクスプロイトの例は何ですか?

A: Austin が Exploit DB に 1 つ公開しました: https://www.exploit-db.com/exploits/49959

私たちが行った HITB 2021 のプレゼンテーションで、それと Austin がそれについて話しているビデオを見ることができます。その実際の JOP エクスプロイトはいくつかの特別な課題を提示したため、見て研究するのに適しています。Austin はそれを手作業で書きましたが、実際には JOP ROCKET の自動 JOP チェーン生成が作業のほとんどを行っていたでしょう。(それでも、いくつかの課題を補うための追加の特別なセットアップが必要だったでしょう。)これは、複数のスタックピボットの連続を使用した、ディスパッチャガジェットアプローチへの新しい変種の例でもあります。このエクスプロイトは 1 日未満で完成しました。

Q: JOP は難しいですか?

A: いいえ、難しくはありません。ただし、ROP とは大きく異なります。すぐには明らかではないかもしれない「ルール」が各所にあります。私たちはそれらについてさまざまな論文で詳しく書いたり、行ってきたさまざまな講演で話したりしています。しかし、時には難しいのは、十分なガジェットを持っていることです。JOP にはさまざまなスタイルがあり、ディスパッチャガジェットアプローチ(ROP なしで完全な JOP エクスプロイトを可能にする)を試みる場合は、ディスパッチャガジェットが必要です。

Q: JOP は名前を変えただけの ROP ではないですか?

A: JOP は非常に流動的です。そのようにもなり得ます。JOP ガジェットに RET をロードし、たとえば JMP EBX を実行するたびに、それは RET と同等になります。その意味では、JOP を ROP を拡張する単なる方法として使用でき、ディスパッチャガジェットは必要ありません。その方法でエクスプロイト全体を構築するのは面倒に思えるかもしれませんが、本当に望むなら可能です。私たちは他のスタイルの JOP についても書いていますが、私たちの作業の大部分はディスパッチャガジェットアプローチに集中しています。

Q: ディスパッチャガジェットとは何ですか? 簡単に見つかりますか? ツーガジェットディスパッチャとは何ですか?

A: それは比較的珍しいガジェットであり、常に簡単に見つかるとは限りませんでした。一部のバイナリには、実行可能なディスパッチャガジェットがまったくない場合もありました。ここで過去形が使われていることに注意してください。私たちは代替ディスパッチャガジェットを導入し、さらに重要なことに、HITB ペーパーで書いたツーガジェットディスパッチャを導入しました。これは 2 つの一般的なガジェットを取得して連結するため、ディスパッチャガジェットはもはや珍しくありません。必要なガジェットの 1 つは非常に一般的で、ほとんどのレジスタに対してそのバリエーションが通常存在します。もう 1 つは非常に一般的ですが、前者ほどではありません。ただし、他の実際的な制限もあります。ツーガジェットディスパッチャを使用すると、別のレジスタを占有することになります。(追加の柔軟性が必要な場合は、エクスプロイト中に使用されるディスパッチャガジェットとレジスタを切り替えることが可能です。)

Q: ツーガジェットパラダイムは JOP ROCKET の自動 JOP チェーン生成に組み込まれていますか?

A: いいえ、組み込まれていません。自動 JOP チェーン生成の作成には時間がかかり、私はその後にツーガジェットディスパッチャのコンセプトを考案しました。いずれどこかで追加しようとするかもしれませんが、当面は予定していません。JOP ROCKET を完全に書き直す場合にのみ追加される可能性が高いです。デフォルトでは、JOP ROCKET は、従来のディスパッチャガジェットが見つからない場合でも、利用可能なすべてのレジスタに対してさまざまな JOP チェーンのバリエーションを作成します。したがって、誰かが自分でツーガジェットディスパッチャを追加するのにそれほど労力はかかりません。ただし、ツールは自動的に保護しないため、ツーガジェットディスパッチャのために保護する必要があるレジスタに注意を払う必要があります。

Q: 自分で JOP チェーンを作ってみたいのですが、できますか?

A: もちろんです。チュートリアル用に、GitHub 上にバイナリを用意しています。2 つの形式があり、人為的に作成された JOP ガジェットが含まれています。簡単なバージョンと難しいバージョンの両方があります。難しいバージョンにはヌルバイトの制限があります。自動 JOP チェーン生成なしで 1 つ試して、独自のガジェットを見つけられるかどうかを確認してみてください。自動 JOP チェーン生成を使用して試すこともできます。自動 JOP チェーン生成では、ヌルバイトに対処する際に追加の作業を行う必要があります。それは将来の追加作業の領域になるかもしれません。その一部を自動化することです。

Q: JOP ROCKET が古いスタイルの Python を使用するのはなぜですか? 最新の Python に変更する予定はありますか?

A: これは数年前に最初に作成され、当時はそれを共有するつもりはまったくありませんでした。最初に DEFCON に提出したのは偶然でした。残念ながら、最新の Python と古い Python の違いは、JOP ROCKET を変更するのが非常に簡単ではないほどであり、違いが影響する複雑な関数が多数あります。JOP ROCKET は非常に大規模でもあり、変更が必要な場所を必ずしもすべて覚えているわけではありません。おそらく、JOP ROCKET を完全に書き直し、現在よりもはるかにモジュール化してコンパクトにすることになるでしょう。そうするなら追加したい新機能がいくつかあり、そうすれば非常にクールなこともできるでしょう。当面の予定はありませんが、今後 1〜3 年のうちにはあるかもしれません。ただし、決してとは言いません。コードを非常に速く書き直せることもあるからです。その間に、現在の JOP ROCKET に他のアップデートを行うかもしれません。完全な書き直しよりも小規模なアップデートの方が簡単だからです。

Q: 「私たち」とは誰ですか?

A: JOP ROCKET の作成者は Dr. Bramwell Brizendine です。これは元々彼の博士論文の主題でしたが、それ以来大きく成長し、変化してきました。彼の学生の 1 人である Austin Babcock は、学部生として JOP 研究に関わり、コンピューターサイエンスの修士号取得までそれを続けました。その間、Austin は複数の論文の共著者であり、複数のイベントの共同講演者でもありました。Austin は JOP の仕組みに重要な貢献をしました。彼は後に JOP ROCKET のコントリビューターとして加わり、主に最適化とコードの改善を導入しました。Austin はいくつかの JOP エクスプロイトを作成しました。1 つは ExploitDB にあります。

**Q: あなたたちが行った JOP における「最新」の事柄は何ですか?**A: ええ、2ガジェットディスパッチャがあります。これにより、ディスパッチャガジェットがもはや珍しいものではなくなったため、多数のバイナリでJOPが可能になります。これは非常に大きなことです。というのも、多くのケースでは有効なディスパッチャガジェットが存在しないことが制約になっていたからですが、その状況はもはや当てはまらないからです。また、いくつかの代替となるシングルディスパッチャガジェットも紹介しましたが、そのほとんどは一般的とは言えないようです(その一部はAndrew Kramerに帰せられます)。さらに、「シェルコードレスJOP」も紹介しました。これはDEPのバイパスを不要にし、シェルコードの機能をJOPに直接組み込むものです。HITBではその一部を、@Hack 2021(Black Hat MEA)ではさらに多くの部分を発表しました。@Hackは撮影されませんでしたが、非常に詳細な論文があります。実際の動作のクリップは、@Hack 2021の無声デモ動画の一部で見ることができます:https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV 。シェルコードレスJOPに挑戦した学生も数人いました。それは、コード再利用攻撃に対するより高いスキルと習熟が求められるものです。

Q: JOP ROCKETはLinuxバイナリで動作しますか?

A: いいえ、残念ながら動作しません。

Q: JOP ROCKETは64ビットバイナリで動作しますか?

A: いいえ、現時点では動作しません。

Q: JOPの一般的なアプローチは何ですか?

A: 私たちの論文を読むか、講演をご覧ください。私たちはJOPで可能なことを広げるために膨大な作業を行いました。私たちの研究以前にはJOPに関する資料は事実上存在せず、私たちはJOPのための多くの新しい実践的テクニックを生み出しました。

Q: 私はアカデミックな研究者で、論文やプレゼンテーションとしてJOPに関連することをしたいと考えています。連絡してもよいですか?

A: もちろんです。論文や新しいプロジェクトを計画しているのであれば、連絡していただいて構いません。bramwell.brizendine AT gmail まで私に連絡できます。Austinが興味を持てば、彼に伝えます。共同研究にも関心を持つ可能性があります。JOPに関して何らかの形で私たちの研究を利用する場合は、引用してください。おそらく、JOPに関する研究で最も実践的なアプローチは、JOPに対する防御策や緩和策を導入することでしょう。以前にも連絡を受けたことがあります。

Q: 他の人々はJOPを行ったことはありますか?

A: それは一般的ではなく、私たちの最初のDEFCON講演以前は極めて稀でした。私たちは確かにその認知度を大きく高めてきました。私は以前、博士課程のAdvanced Software Exploitationコースで3年間JOPを教えてきたため、何十人もの学生がJOPエクスプロイトを作成しました。実際の現場でどれだけの人がそれを行っているかはわかりませんが、今ではJOP ROCKETを使えば確かに誰でもできます。また、学部生にもJOPエクスプロイトを作成させたことがあります。それが博士課程の学生でなければならない特別な理由はありません。エクスプロイトとコード再利用攻撃に強い能力を持つ人なら誰でもできます。私たちが行ってきた講演や執筆した論文の数、そして2ガジェットディスパッチャのような革新と相まって、ROPに熟達した人なら誰でもそれを習得できない理由はありません。

Q: なぜJOP ROCKETが必要だったのですか?

A: JOP ROCKETがなければ、JOPガジェットのごく一部しか見つけられず、それらは整理もされていないため、何かを見つけるのは干し草の山から針を探すようなものでした。実際のJOPガジェットの多くは、自然には発生しない意図しないガジェットです。そのため、あなたが非常に献身的な類まれな才能の持ち主で、独自のツールやスクリプトを作成しない限り、ROPガジェットを使わない完全なJOPエクスプロイトを試みる場合、多くのものを見逃すことになるでしょう。ディスパッチャガジェットのようなものもあり、それらは意図しない形式であっても、何とかして自分で魔法のように見つけ出さなければなりません。私たちの研究以前にJOPが非常に稀で、ほとんど話題にならなかったのには十分な理由があります。それは、現在では一般的になったという意味ではありません。JOP ROCKET以前は、エクスプロイトを作成するために克服すべきいくつかの重大な問題がありました。今ではJOP ROCKETによってそれらの問題は克服され、JOPガジェットを使って独自のエクスプロイトを構築したり、自動JOPチェーン生成によって作成されたJOPチェーンを適応させたりすることができます。

Q: JOPはROPよりも簡単になり得ますか?

A: 実際、JOPはROPよりも簡単だという学生の声を聞いたことがあります。そして、適切なガジェットがあり、複数のスタックピボットを用いたディスパッチャガジェットへの私たちの新しいアプローチを使えば、実際に簡単になり得ます。ここでのキーワードは「なり得る」です。これは、ヌルバイトの制約がない、スタックピボットガジェットが豊富にある、有効なディスパッチャガジェットが存在する、といった特別な状況下でのみ当てはまります。

Q: JOPは誰のためのものですか?

A: 主に、コード再利用攻撃に熟達していて、自分自身を追い込み、最先端の何かに挑戦したい人々のためのものだと思います。ただし、すべてのJOPが必ずしも「難しい」必要はありません。JOPを実行できるなら、それは誇るべき名誉の証です。JOPエクスプロイトを作成したら、ExploitDBに投稿してJOP ROCKETへのリンクを貼り、認知度向上に協力してください。JOPは、単にROPの使用を避けたい人のためのものでもあります。ROPガジェットを検出する緩和策が導入されている可能性があるからです。JOPはROPではなく、ROPガジェットを一つも使わずに完全なJOPエクスプロイトを行うことができます。

Q: 自動JOPチェーン生成を実行したところ、VirtualAllocとVirtualAllocに対して多数の異なるチェーンが生成されました。なぜそんなに多いのですか?

A: 私はJOPを、特定のレジスタがディスパッチャガジェットへのポインタとディスパッチテーブルへのポインタを保持するという観点から捉えています。そのため、これらのレジスタは占有されます。機能ガジェット(通常のROPガジェットにより似ている)はディスパッチャガジェットを呼び出し、ディスパッチャガジェットがディスパッチテーブル内の位置を進めます。JOP ROCKETはしたがって、さまざまなレジスタの組み合わせを使用して異なるチェーンを作成します。一部のレジスタはディスパッチャガジェットとディスパッチテーブル用に「予約」されますが、必要に応じて好きなだけ行き来することもできます。一部のレジスタは、より望ましいJOPチェーンを持つことがあります。つまり、「使いやすい」ガジェットを持つかもしれないという意味です。そのため、私たちは選択肢を提供することを好みます。デフォルトでは、JOP ROCKETはそれぞれについて5つ生成するため、1つに問題があっても、他を検討できるかもしれません。さらに、JOP ROCKETは、望ましいディスパッチャガジェットが見つからない場合でもこれらを生成します。常に代替手段や2ガジェットディスパッチャが存在し得るからです。(JOP ROCKETは2ガジェットディスパッチャを見つけますが、現在はそれらをJOPチェーン生成に組み込んでいません。)質問に戻ると、JOP ROCKETは多くの選択肢を提供しようとし、どれが最も望ましいか、または扱いやすいかを評価して判断するのはユーザー次第です。

Q: JOP ROCKETが自動JOPチェーン生成で良い結果を出してくれません。なぜですか?

A: 場合によってはバグがある可能性もありますが、自動JOPチェーン生成が、複数のスタックピボットを使用するという前提で機能することを覚えておくことも重要です(講演や論文を参照)。デフォルトに基づいた結果しか生成されないため、希望するピボット量を指定する必要があります。非常に大きな優れたスタックピボットが存在しても、それが範囲外にあるため見逃す可能性があります。したがって、許容可能なスタックピボットの範囲を計算し、最小値と最大値を指定する必要があります。後でパディングで調整することもできます。正確である必要はありません。

Q: コンパイラにはJOPに関する「脆弱性」はありますか?

A: 実際、あります。Visual Studio 2015でDeveloper Promptを使ってコンパイルしたすべてのものに、常に存在する非常に望ましいディスパッチャガジェットがいくつか見つかりました!この詳細な情報をある講演に含めるつもりでしたが、時間の都合でカットされました。後日、別途含めるかもしれません。悪い知らせとしては、約1年前までに、他の年のVisual Studioの他のエディションで作成されたすべてのバイナリを評価しましたが、これが繰り返されるのを見ませんでした。優れたディスパッチャガジェットがあると素晴らしいですが、私たちが紹介した新しい2ガジェットディスパッチャで説明されているように、それらは必須ではありません。さらに、これは実際には脆弱性ではなく、真の脆弱性があると仮定した場合に、JOPが容易に利用可能であることを保証する方法にすぎません。

Q: JOP ROCKETはスタンドアロンツールですか?デバッガで動作しますか?

A: はい、静的解析を行うスタンドアロンツールです。いいえ、Monaのようなデバッガと統合することはできません。JOP ROCKETには、見つけられるDLLを検索するオプションがあり、それらを検索できますが、明らかにほとんどのWindowsシステムDLLは緩和策のため使用できません。JOP ROCKETに、緩和策に基づいて除外または包含させることができます。静的解析であるため、オプションでDLLを検索できますが、IATにないものや、JOP ROCKETが場所を簡単に特定できないDLLの一部を見逃す可能性があります。これは静的解析に固有の制限です。デフォルトでは、JOP ROCKETは時間を節約するために、イメージ自体、つまり.exeのみを検索し、DLLは検索しません。バイナリを解析して非システムDLLを調べようとする場合は、そのアプリケーションがインストールされている必要があり、そのパスを指定する必要があります。DLLを気にしない場合は、バイナリをインストールする必要はありません。

Q: 次の引用についてコメントしていただけますか:「JOP ROCKETは[Bri19]によって2019年に公開されたツールで、完全に自動化された方法で完全なJOPチェーンを生成すると主張しています。より詳しく調べると、その手法の実際のユースケースはROPとJOPが混在したチェーンで構成されており、結果のほんの一部だけが純粋なJMPガジェットで構成され、残りはJOPチェーンのセットアップに必要なRET命令で終わるガジェットで構成されています。」

A: 残念ながら、上記はJOPに対する理解不足を反映しています。JOPはディスパッチャガジェットのパラダイムを使用し、ディスパッチテーブルとディスパッチャガジェットを必要とします。JOPをセットアップするには、ディスパッチャガジェットのアドレスとディスパッチテーブルのアドレスをそれぞれのレジスタにロードする必要があります。これはJOPを介して達成することもできますが、互換性の目的で、popを使用した2つのROPガジェットを介して行われました。したがって、この2つのROPガジェットだけからなる初期化の後は、追加のROPガジェットは使用されません。使用されるJOPガジェットの数は、ユーザーが提供する入力に応じて、1つから数十まで変化します。ここでの問題はツールではなく、ツールとJOPの誤解にあります。適切な入力を提供すれば、JOP ROCKETは確かに実世界のアプリケーションに適したエクスプロイトを提供します。実際、これは著者が以前に教えたAdvanced Software Exploitationコースで使用され、学生はJOP ROCKETを使ってさまざまなJOPエクスプロイトを作成することを要求されました。各JOPチェーンで使用されるROPガジェットは最大でも2つだけであるため、上記のようなコメントが学術研究で行われたことは残念です。私たちが知るExploit_DBにある唯一の実世界のJOPエクスプロイトは、私たちの一人であるAustin Babcockによるもので、彼がHack in the Box Amsterdam 2021で説明したように、彼のエクスプロイトはJOP ROCKETが見つけたものと非常によく似ています。ほとんどの実用的なケースでは、セットアップに2つのROPガジェットを使用するかどうかは実際にはあまり違いません。ディスパッチャガジェットのパラダイムに適合する適切なJOPガジェットがバイナリにない場合があり、JOPのセットアップができないことがあります。私たちは、100%純粋なJOPを求めるために制限するよりも、むしろJOPが可能な限りすべてのバイナリで実行可能であることを望みます。結局のところ、JOPの最大の制限の1つは、JOPガジェットが不十分なことです。2024年現在、JOP ROCKETへの活発なアップデートは行われていません。そして、はるかに新しいROP ROCKETに範を取り、はるかに高度になるであろう可能な新バージョンでは、純粋なJOPのオプションがおそらく含まれるでしょう。

ツールをダウンロード