JITスプレー

JITスプレー(JIT Spraying)とは



JITスプレーとは、JIT(Just-In-Time)コンパイラの特性を利用した攻撃手法であり、主にアドレス空間配置のランダム化およびデータ実行防止(DEP)といったセキュリティ対策を回避するために使用されます。特に、PDFフォーマットやAdobe Flashといったプラットフォームに対するエクスプロイトで見られる技術です。

JITコンパイラの概要



JITコンパイラは、プログラムのバイトコードを実行時に直接ネイティブコードに変換するコンパイラです。この変換プロセスにおいて、コンパイラは実行可能なデータを生成します。そのため、JITコンパイラは一般に、データ実行防止機能から除外されることが多く、これがJITスプレー攻撃が成立する背景となっています。

JITスプレーの具体的手法



JITスプレー攻撃は、まずJITコンパイラを使って不正なコードを生成することから始まります。具体的には、JavaScriptActionScriptなどのプログラミング言語で大量の定数を含むプログラムを作成し、これを誤ってコードとして実行させる仕組みです。このプロセスでは、例えばXOR演算といった基本的な処理が用いられます。

生成されるコードは、次の例のように、移動(MOV)命令や排他的論理和(XOR)命令が含まれます。

```
0: b8 44 33 22 11 mov $0x11223344,%eax
5: 35 11 22 33 44 xor $0x44332211,%eax
```

次に、攻撃者は脆弱性を突いて、実行を新しく生成したコードにリダイレクトさせます。これには、バッファオーバーフローやuse-after-freeバグを利用し、関数ポインタやリターンアドレスを上書きする手法が用いられます。この操作により、CPUはJITコンパイラの制作者が意図しなかった命令を実行することが可能になります。

実証例と効果



意図された命令の途中にジャンプすることができるため、CPUは別の命令群を実行してしまうことになります。この手法は、命令境界による制約を受けないため、非常に効果的です。たとえば、MOV命令の2バイト目にジャンプすることで、INC命令が発動することがあります。

```
1: 44 inc %esp
2: 33 22 xor (%edx),%esp
4: 11 35 11 22 33 44 adc %esi,0x44332211
```

JITスプレー攻撃は、特にx86、x86-64、ARMといったハードウェアで効果を発揮します。しかし、もちろんこれは他のシステムにも適用可能な技術です。

まとめ



このように、JITスプレーはJITコンパイラの特性を巧みに利用することで、セキュリティ対策を回避し、悪意のあるコードを実行させる手法です。セキュリティの向上が求められる現代において、こうした手法を理解し、適切な対策を講じることが重要です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。