Skip to main content
QUICK REVIEW

[論文レビュー] JIT Spraying and Mitigations

Piotr Bania|arXiv (Cornell University)|Sep 6, 2010
Security and Verification in Computing参考文献 3被引用数 11
ひとこと要約

本論文は、デフォルトのDEPおよびASLRを回避するため、ジャストインタイムコンパイラによって生成された実行可能メモリ領域にシェルコードを注入するという手法であるJITスプライティング攻撃に対する、新規で高性能な緩和策を提示する。著者らは、32ビットの即値オペランドを用いる命令のシーケンスをスキャンし、短いジャンプチェーンの検証を組み合わせることで、悪意あるコードを検出する検出メカニズムを提案している。この手法により、偽陽性がなく、Windowsシステムにおけるパフォーマンスオーバーヘッドも最小限に抑えられ、効果的な検出が可能である。

ABSTRACT

With the discovery of new exploit techniques, novel protection mechanisms are needed as well. Mitigations like DEP (Data Execution Prevention) or ASLR (Address Space Layout Randomization) created a significantly more difficult environment for exploitation. Attackers, however, have recently researched new exploitation methods which are capable of bypassing the operating system's memory mitigations. One of the newest and most popular exploitation techniques to bypass both of the aforementioned security protections is JIT memory spraying, introduced by Dion Blazakis. In this article we will present a short overview of the JIT spraying technique and also novel mitigation methods against this innovative class of attacks. An anti-JIT spraying library was created as part of our shellcode execution prevention system.

研究の動機と目的

  • DEPやASLRといった従来のメモリ保護機構を回避するJITスプライティング攻撃の増加する脅威に対処すること。
  • 特にActionScript環境において、JITによって生成された実行可能メモリ領域へのシェルコードインジェクションを検出および防止すること。
  • アプリケーションのパフォーマンスを著しく低下させない効率的な緩和策を設計すること。
  • 洗練された回避技術に対しても強い保護を維持しつつ、検出における偽陽性を最小限に抑えること。

提案手法

  • この手法は、攻撃者制御のシェルコードに特徴的な32ビット即値オペランドをソースとして使用する命令のシーケンスをスキャンすることで、JITスプライティングを検出する。
  • 最初の'mov reg, IMM32'命令からデシーマブルを開始し、終端命令(例:CALL、RET、JMP)が現れるまで、32ビット即値を含む「悪意ある」命令(以下「bad」命令)の数を数える。
  • そのような「bad」命令の数が事前に定義された最大値を超えると、しきい値に基づくアラートが発動され、潜在的なシェルコードが検出される。
  • また、ジャンプチェーン(JMP、JCC)の検証も実施しており、即値ターゲットが有効で連続するジャンプ命令を指しているかを確認することで、ジャンプリンクによる回避を防止する。
  • 検出は、JITによって生成されたコードが実行される直前、つまりリアルタイムで行われるため、コード生成段階で保護が確保される。
  • 緩和策はアプリケーションランタイムに統合されたライブラリとして実装されており、OSやブラウザの変更は不要である。

実験結果

リサーチクエスチョン

  • RQ1顕著なパフォーマンスオーバーヘッドを伴わずに、リアルタイムでJITスプライティング攻撃を検出する方法は何か?
  • RQ2JITによって生成されたコードのどの特徴が、悪意あるコードと良性のコードを信頼性高く区別するために利用できるか?
  • RQ332ビット即値オペランドの使用に基づく検出メカニズムは、ジャンプチェーンによる回避を効果的に防止できるか?
  • RQ4JITコンパイルが頻繁に行われる環境では、偽陽性をどのように最小限に抑えることができるか?

主な発見

  • アンチ-JITスプライティングライブラリは、Flash 10cでのテストにおいて、既知のすべてのJITシェルコードサンプルを検出しており、偽陽性は一切発生しなかった。
  • 検出メカニズムは低いパフォーマンスオーバーヘッドを達成しており、一般的なFlashを多用するWebサイトの閲覧時においても、アプリケーションパフォーマンスに顕著な影響を及ぼさなかった。
  • 攻撃者が複数の短いジャンプを使用してコード断片をリンクすることで検出を回避しようとしても、この手法はシェルコードを正常に検出できた。
  • 32ビット即値オペランドのカウントをしきい値ベースで行うことで、実行前に悪意あるコードブロックを効果的に同定できた。
  • 即値オペランドスキャンとジャンプチェーン検証の組み合わせにより、緩和策を回避する難易度が著しく上昇した。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。