JIT スプレー
JIT スプレー とは何ですか?
JIT スプレーJIT コンパイラを悪用し、合法に生成された実行可能メモリページの中に攻撃者が選んだ実行可能バイト列を埋め込むエクスプロイト技法。
JIT スプレーは、JIT(Just-In-Time)コンパイラを備えるランタイム(V8、SpiderMonkey、JSC などの JavaScript エンジン、.NET CLR、JVM、ActionScript、eBPF など)を標的とするメモリ破壊系の攻撃技法です。攻撃者は高水準コードを巧みに記述し、JIT が出力するバイト列をそのまま解釈すると目的のネイティブ命令となるように仕向け、JIT が生成した RWX ページ内にペイロードを忍び込ませます。制御フローを奪うメモリ破壊バグと組み合わせれば、スプレーされたガジェットへ飛び込み、DEP/NX を回避して任意コードを実行できます(メモリは正規に実行可能だからです)。緩和策には、定数ブラインディング、コード領域のランダム化、W^X 分離、ASLR、CFI などがあります。
● 例
- 01
JavaScript の即値定数にシェルコードを埋め込んだ乗算を大量にスプレーする。
- 02
ActionScript の JIT で Flash Player の JIT 領域に NOP スレッドとシェルコードを配置する。
● よくある質問
JIT スプレー とは何ですか?
JIT コンパイラを悪用し、合法に生成された実行可能メモリページの中に攻撃者が選んだ実行可能バイト列を埋め込むエクスプロイト技法。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
JIT スプレー とはどういう意味ですか?
JIT コンパイラを悪用し、合法に生成された実行可能メモリページの中に攻撃者が選んだ実行可能バイト列を埋め込むエクスプロイト技法。
JIT スプレー はどのように機能しますか?
JIT スプレーは、JIT(Just-In-Time)コンパイラを備えるランタイム(V8、SpiderMonkey、JSC などの JavaScript エンジン、.NET CLR、JVM、ActionScript、eBPF など)を標的とするメモリ破壊系の攻撃技法です。攻撃者は高水準コードを巧みに記述し、JIT が出力するバイト列をそのまま解釈すると目的のネイティブ命令となるように仕向け、JIT が生成した RWX ページ内にペイロードを忍び込ませます。制御フローを奪うメモリ破壊バグと組み合わせれば、スプレーされたガジェットへ飛び込み、DEP/NX を回避して任意コードを実行できます(メモリは正規に実行可能だからです)。緩和策には、定数ブラインディング、コード領域のランダム化、W^X 分離、ASLR、CFI などがあります。
JIT スプレー からどのように防御しますか?
JIT スプレー に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
JIT スプレー の別名は何ですか?
一般的な別名: JIT スプレー攻撃。
● 関連用語
- appsec№ 1182
型混乱の脆弱性
実際の確保型と矛盾する型を介してオブジェクトへアクセスしてしまうメモリ安全性のバグで、任意読み書きやコード実行に直結することが多い。
- appsec№ 129
ブラウザサンドボックス
OS レベルの分離層で、ブラウザのレンダラーやヘルパープロセスを閉じ込め、侵害された Web コードがファイルシステムや他アプリへアクセスできないようにする。
- vulnerabilities№ 1193
解放後使用(Use-After-Free)
free 済みのメモリをプログラムが使い続けるメモリ安全性のバグ。攻撃者にオブジェクト状態の操作と制御フロー奪取を許すことが多い。
- attacks№ 471
ヒープスプレー
ヒープを多数のペイロードコピーで埋め尽くす攻撃プリミティブ。破壊されたポインタが攻撃者制御データに高確率で着地するようにする。
- appsec№ 1075
投機的実行サイドチャネル
本来実行されるべきでない経路で命令を投機的に実行した結果、CPU がキャッシュや予測器を介してデータを漏らしてしまうマイクロアーキテクチャ脆弱性の総称。
- vulnerabilities№ 399
エクスプロイト
脆弱性を悪用して、コード実行・権限昇格・情報漏えいなど意図しない動作を引き起こすコード、データ、または手法。