JIT spraying とは

JITスプレーは、ジャストインタイムコンパイルの振る舞いを利用して、アドレススペースレイアウトのランダム化(ASLR)とデータ実行防止(DEP)の保護を回避するコンピュータセキュリティの悪用の一種です。これは、PDF形式とAdobe Flashを利用するために使用されています。
ジャストインタイムコンパイラ(JIT)は、データとしてコードを生成します。実行可能なデータを生成することを目的としているため、JITコンパイラは、実行不可能なデータ環境では実行できない数少ない種類のプログラムの1つです。このため、JITコンパイラは通常、データの実行を防止することが免除されます。 JITスプレー攻撃は、生成されたコードのスプレーをヒープします。
JITから悪用コードを作成するには、Dion Blazakisのアイデアが使用されます。入力プログラム(通常はJavaScriptまたはActionScript)には、コードとして誤って実行される可能性のある多数の定数が含まれています。たとえば、XOR演算を使用できます。
JITはバイトコードをネイティブのx86コードに変換します:
 0:b8 44 33 22 11 mov $ 0x11223344、%eax mov eax、0x11223344 5:35 11 22 33 44 xor $ 0x44332211、%eax xor eax、0x44332211 a:35 11 22 33 44 xor $ 0x44332211、%eax xor eax、 0x44332211
その後、攻撃者は適切なバグを使用してコード実行を新しく生成されたコードにリダイレクトします。たとえば、バッファオーバーフローやフリーバグの後に使用すると、攻撃が関数ポインタや戻りアドレスを変更する可能性があります。
これにより、CPUはJIT作者の意図しない方法で命令を実行します。攻撃者は通常、予想される命令境界に限定されていません。意図した命令の途中にジャンプして、CPUがそれを何か他のものとして解釈させることが可能である。非JIT ROP攻撃と同様に、これはコンピュータを有効に制御するのに十分な操作である可能性があります。上記の例を続けると、「mov」命令の第2バイトにジャンプすると、「inc」命令が得られる。
 1:44 inc%esp inc esp 2:33 22 xor(%edx)、%esp xor esp、DWORD PTR [edx] 4:11 35 11 22 33 44 adc%esi、0x44332211 adc DWORD PTR ds:0x44332211、esi a :35 11 22 33 44 xor $ 0x44332211、%eax xor eax、0x44332211
命令の途中でジャンプできるようにするコンピュータハードウェアには、x86、x86-64、ARMがあります。このタイプのハードウェアには特に有効ですが、JITスプレーは他のシステムでも機能します。
JITスプレーから守るために、JITコードを無効にするか、攻撃者にあまり予測できないようにすることができます。