Heap overflow とは

ヒープオーバーフローまたはヒープオーバーランは、ヒープデータ領域で発生するバッファオーバーフローの一種です。ヒープオーバーフローは、スタックベースのオーバーフローとは異なる方法で悪用可能です。ヒープ上のメモリは、実行時にアプリケーションによって動的に割り当てられ、通常はプログラムデータを含みます。 Exploitationは、このデータを特定の方法で破損させて、アプリケーションがリンクされたリストポインタなどの内部構造を上書きするようにすることによって実行されます。正規のヒープオーバーフロー技法は、動的メモリ割り当てリンケージ(mallocメタデータなど)を上書きし、その結果のポインタ交換を使用してプログラム関数ポインタを上書きします。
古いバージョンのLinuxの典型的な例は、ヒープ上で隣り合って2つのバッファが割り当てられているため、最初のバッファの境界を超えて書き込みを行うと、2番目のバッファにメタデータを上書きできます。使用中のビットを2番目のバッファのゼロに設定し、長さをNULLバイトをコピーできる小さな負の値に設定すると、プログラムが最初のバッファでfree()を呼び出すと、これらの2つのバッファをマージしようとします単一のバッファこれが起こると、解放されると見なされるバッファは、前に割り当てられたバッファの最初の8バイトに2つのポインタFDおよびBKを保持することが期待される。 BKはFDに書き込まれ、ポインタを上書きするために使用できます。