ヒープスプレー
ヒープスプレー とは何ですか?
ヒープスプレーヒープを多数のペイロードコピーで埋め尽くす攻撃プリミティブ。破壊されたポインタが攻撃者制御データに高確率で着地するようにする。
ヒープスプレーは、プロセスメモリの広範囲を NOP スレッドとシェルコード(現代では ROP ガジェットや偽の vtable)の予測可能なコピーで満たします。攻撃者がブラウザの use-after-free や type confusion などのメモリ破壊を発火させると、破壊したポインタを 0x0c0c0c0c などの定番アドレスへ向け、スプレーで配置済みのバイト列に着地させます。2004 年に Skylined が公表した Internet Explorer エクスプロイトで広く知られ、現在もブラウザ・ドキュメント・フォント解析のエクスプロイトで多用されます。対策は高エントロピー ASLR、パーティション化されたヒープ(PartitionAlloc、Edge の Heap Isolation)、制御フロー整合性(CFI)、JIT 強化策などです。
● 例
- 01
数百 MB のシェルコード入り JavaScript 文字列を確保し、use-after-free 後に 0x0c0c0c0c をシェルコードにする。
- 02
Adobe Flash のエクスプロイトが Vector<uint> スプレーで ROP チェーンを配置する。
● よくある質問
ヒープスプレー とは何ですか?
ヒープを多数のペイロードコピーで埋め尽くす攻撃プリミティブ。破壊されたポインタが攻撃者制御データに高確率で着地するようにする。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
ヒープスプレー とはどういう意味ですか?
ヒープを多数のペイロードコピーで埋め尽くす攻撃プリミティブ。破壊されたポインタが攻撃者制御データに高確率で着地するようにする。
ヒープスプレー はどのように機能しますか?
ヒープスプレーは、プロセスメモリの広範囲を NOP スレッドとシェルコード(現代では ROP ガジェットや偽の vtable)の予測可能なコピーで満たします。攻撃者がブラウザの use-after-free や type confusion などのメモリ破壊を発火させると、破壊したポインタを 0x0c0c0c0c などの定番アドレスへ向け、スプレーで配置済みのバイト列に着地させます。2004 年に Skylined が公表した Internet Explorer エクスプロイトで広く知られ、現在もブラウザ・ドキュメント・フォント解析のエクスプロイトで多用されます。対策は高エントロピー ASLR、パーティション化されたヒープ(PartitionAlloc、Edge の Heap Isolation)、制御フロー整合性(CFI)、JIT 強化策などです。
ヒープスプレー からどのように防御しますか?
ヒープスプレー に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
ヒープスプレー の別名は何ですか?
一般的な別名: ヒープスプレー。
● 関連用語
- attacks№ 469
Heap Feng Shui
2007 年に Alexander Sotirov が紹介した決定論的ヒープ整形手法。アロケーションを巧妙に配置して脆弱オブジェクトの隣に攻撃者制御オブジェクトを置く。
- vulnerabilities№ 1193
解放後使用(Use-After-Free)
free 済みのメモリをプログラムが使い続けるメモリ安全性のバグ。攻撃者にオブジェクト状態の操作と制御フロー奪取を許すことが多い。
- appsec№ 064
ASLR
ASLR はコード、スタック、ヒープ、ライブラリの配置アドレスを実行ごとに乱数化し、攻撃者がエクスプロイトに使う目標アドレスを予測できないようにする緩和策です。
- vulnerabilities№ 131
バッファオーバーフロー
メモリ安全性の欠陥で、確保済みバッファの末尾を超えて書き込みが行われ、隣接メモリが破壊されてしばしばコード実行を可能にする。
● 関連項目
- № 564JIT スプレー