Double Free
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
メモリブロックを複数回解放すると、アロケータのデータが混乱し、攻撃の扉が開かれる可能性があります。これは次のように発生します:メモリブロックを解放すると、それはフリーチャンクのリスト(例えば、「ファストビン」)に戻ります。同じブロックを連続して2回解放すると、アロケータはこれを検出し、エラーをスローします。しかし、その間に別のチャンクを解放すると、ダブルフリーのチェックがバイパスされ、破損が発生します。
さて、新しいメモリを要求すると(malloc
を使用)、アロケータは2回解放されたブロックを提供する可能性があります。これにより、2つの異なるポインタが同じメモリ位置を指すことになります。攻撃者がそのポインタの1つを制御している場合、彼らはそのメモリの内容を変更でき、これがセキュリティ問題を引き起こしたり、コードを実行させることを可能にしたりします。
例:
この例では、tcacheをいくつかの解放されたチャンク(7)で埋めた後、コードはチャンクh
を解放し、次にチャンクi
を解放し、再びh
を解放することでダブルフリーを引き起こします(ファストビンの重複とも呼ばれます)。これにより、再割り当て時に重複するメモリアドレスを受け取る可能性が生じ、2つ以上のポインタが同じメモリ位置を指すことができます。1つのポインタを通じてデータを操作すると、他のポインタにも影響を与え、重大なセキュリティリスクと悪用の可能性を生み出します。
実行すると、i1
とi2
が同じアドレスを取得したことに注意してください:
サイズ0x70
を除いて、ファストビンサイズのチャンクしか割り当てられず、通常の__malloc_hook
の上書きを防ぎます。
代わりに、0x56
で始まるPIEアドレスをファストビンの重複のターゲットとして使用します(1/2の確率)。
PIEアドレスが格納される場所の1つはmain_arena
で、これはGlibc内にあり、__malloc_hook
の近くにあります。
特定のオフセットのmain_arena
をターゲットにして、そこにチャンクを割り当て、__malloc_hook
に到達するまでチャンクを割り当て続けてコード実行を取得します。
Tcacheビンとヌルバイトオーバーフローを使用して、ダブルフリーの状況を達成できます:
サイズ0x110
のチャンクを3つ(A
、B
、C
)割り当てます。
B
を解放します。
A
を解放し、ヌルバイトオーバーフローを使用するために再度割り当てます。
現在、B
のサイズフィールドは0x100
であり、0x111
ではないため、再度解放できます。
サイズ0x110
のTcacheビンとサイズ0x100
のTcacheビンが同じアドレスを指しています。したがって、ダブルフリーがあります。
Tcache poisoningを使用してダブルフリーを利用します。
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、練習する:HackTricks Training GCP Red Team Expert (GRTE)