web-dev-qa-db-ja.com

アドレス空間レイアウトのランダム化がOpen SSLのハートブリードの脆弱性に対して有効でないのはなぜですか?

ASLRはプロセスの主要なデータ領域をランダムに配置するため、ハートブリードで行われるようにバッファー上で連続して読み取るだけではエクスプロイトを達成するのに十分ではないと私は理解しています。

1
AOrona

ASLRは、プロセスメモリの重要な部分、つまりスタック、ヒープ、およびライブラリがロードされる場所のアドレスをランダム化し、特定のコードまたはデータ構造がどこにあるか予測できないようにします。しかし、ハートブリードを悪用するために、この種の知識はそもそも必要ではありません。

Heartbleedの脆弱性は、ヒープに既に割り当てられているバッファー内での境界外の読み取りに依存しています。これにはヒープのベースアドレスは必要ありません。必要なのは、機密データが依然としてヒープに配置されていて、新しく割り当てられたバッファーの背後に配置されていることだけです。 メモリ境界の推論:次のハートブリードの防止 から取得した画像は、問題を適切に視覚化しています。

Out of Bounds Read

この画像に関連して:Heartbleedの場合、TLSハートビートに割り当てられたバッファーは青いものでした。しかし、ハートビートリクエストで指定された要求サイズは、ハートビートリクエストの実際のサイズよりも大きく、ハートビートレスポンスはこの間違ったサイズを信頼していたため、OpenSSLは、元のハートビートリクエスト(青)のペイロードだけでなく、背後にあるデータも含めることになりましたヒープ上(赤)になり、機密情報が漏洩しました。これには実際の住所の知識は必要ありませんでした。

1
Steffen Ullrich