House of Rabbit
必要条件
Fastbinのfdポインターまたはサイズを変更する能力:これは、fastbin内のチャンクの前方ポインターまたはサイズを変更できることを意味します。
malloc_consolidate
をトリガーする能力:これは、大きなチャンクを割り当てるか、トップチャンクをマージすることによって行うことができます。これにより、ヒープがチャンクを統合するようになります。
ゴール
重複するチャンクを作成する:他のチャンクと重なるように1つのチャンクを作成し、さらなるヒープ操作を可能にします。
偽のチャンクを作成する:アロケーターをだますために、偽のチャンクをヒープ操作中に正当なチャンクとして扱わせます。
攻撃の手順
POC 1: Fastbinチャンクのサイズを変更する
目的: fastbinチャンクのサイズを操作して、重複するチャンクを作成します。
ステップ1: チャンクを割り当てる
ステップ 2: チャンクを解放する
ステップ 3: チャンクサイズの変更
ステップ 4:
malloc_consolidate
をトリガーする
大きなチャンクを割り当てると、malloc_consolidate
関数がトリガーされ、fastbin 内の小さなチャンクがマージされます。chunk1
の操作されたサイズにより、chunk2
と重なるようになります。
統合後、chunk1
は chunk2
と重なり、さらなる悪用が可能になります。
POC 2: FD ポインタの変更
目的: fastbin の fd ポインタを操作してフェイクチャンクを作成します。
ステップ 1: チャンクの割り当て
説明: 2つのチャンクを割り当て、1つは小さく、もう1つは大きくして、フェイクチャンクのためにヒープをセットアップします。
ステップ2: フェイクチャンクの作成
ステップ 3: チャンク1を解放する
説明: chunk1
を解放し、それをfastbinリストに追加します。
ステップ4: Chunk1のFDを修正
説明: chunk1
の前方ポインタ(fd)をchunk2
内のフェイクチャンクを指すように変更します。
ステップ5:
malloc_consolidate
をトリガーする
再度大きなチャンクを割り当てると、malloc_consolidate
がトリガーされ、フェイクチャンクが処理されます。
フェイクチャンクはファストビンリストの一部となり、さらなる悪用のための正当なチャンクとなります。
要約
House of Rabbit テクニックは、ファストビンチャンクのサイズを変更して重複するチャンクを作成するか、fdポインタを操作してフェイクチャンクを作成することを含みます。これにより、攻撃者はヒープ内で正当なチャンクを偽造し、さまざまな形式の悪用を可能にします。これらの手順を理解し、実践することで、ヒープの悪用スキルを向上させることができます。
Last updated