【ひーぷすぷれー】

ヒープスプレー とは?

最終更新:
💡 メモリに多数の候補を置き、悪用の成功を狙う

ヒープ領域に攻撃に利用するコードやデータを多数配置し、別の脆弱性の悪用を成功させやすくする手法。メモリに配置することと、そこへ処理を移したり不正に利用したりすることは別で、配置だけで必ず攻撃が成立するわけではない。

📌 このページのポイント
多数の配置と、脆弱性の悪用は別ヒープ:動的に確保するメモリ攻撃用の候補通常のデータ攻撃用の候補通常のデータ攻撃用の候補攻撃用の候補脆弱性の悪用と組み合わせる置いただけで、必ず成功するわけではない
配置するものを模式的に示した図。領域のすべてを埋めることや、実際のアドレス・悪用手順を表していません。
ひよこ ひよこ
何を、スプレーするの?
ペンギン先生 ペンギン先生
動的に確保するヒープのメモリへ、攻撃に利用するコードやデータを多数置くんだ。Microsoft Researchの説明では、悪用するコードを含むオブジェクトを多数配置する例が紹介されているよ。
ひよこ ひよこ
たくさん置くと、どうなる?
ペンギン先生 ペンギン先生
悪用する際の場所を正確に予測しにくいとき、候補を多数置くことで成功の可能性を上げる狙いがあるよ。すべてのメモリを埋める必要がある、どこへ移っても必ず成功する、という意味ではないんだ。
ひよこ ひよこ
置いただけで、攻撃が完成する?
ペンギン先生 ペンギン先生
それだけではないよ。配置したものを利用させるための脆弱性の悪用などが必要なんだ。図でも配置と悪用を分けている。多数のメモリ確保だけを見て、必ずヒープスプレー攻撃だとは判断できないね。
ひよこ ひよこ
ASLRがあれば、完全に防げる?
ペンギン先生 ペンギン先生
ASLRはメモリの位置を予測しにくくする緩和策だよ。DEPは実行用でないメモリからのコード実行を防ぐ。役割が違い、環境や設定にも左右されるので、どちらか一つだけでどんな攻撃も防げるとは言わないんだ。
ひよこ ひよこ
守る側は、何をする?
ペンギン先生 ペンギン先生
まず悪用される脆弱性を修正し、OSやアプリを更新するよ。その上で、対象のアプリに合う緩和策を組み合わせる。Microsoftも複数の防御を勧めている。古い研究で紹介された対策が、そのまま現在の標準機能とは限らないね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ヒープスプレー」って出てきたら「メモリに多数の候補を置いて、脆弱性を悪用しやすくする手法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Heap spraying」 = ヒープへの散布
💬 Heapは動的に確保するメモリ領域、sprayingは散布すること。攻撃に利用するものを多数置くイメージだよ。

参考資料

← 用語集にもどる