今天的文章要介紹一種 Heap 攻擊的手法 - House of Spirit。它透過操作記憶體中的指標,在該指標指向的記憶體區塊被 free 前進行覆蓋。
在 House of Spirit 攻擊中,攻擊者的目標是利用偽造的 chunk 操控記憶體分配的行為,使得程式返回一個由攻擊者控制的記憶體區塊。這種攻擊技術依賴對記憶體中指標的修改,偽造的 chunk 可以位於堆區(heap)、堆疊區(stack)或其他任意記憶體區域。攻擊的核心原理是,透過覆寫將被釋放的區塊指標,讓系統釋放這個偽造的 chunk,並在之後的 malloc 分配中將這個偽造 chunk 重新返回。
首先,攻擊者會在記憶體中準備一個偽造的 chunk,並將其放置在適當的位置。為了通過堆管理系統的檢查,這個偽造 chunk 的 size 和下一個 chunk 的 size 必須正確設置,避免觸發系統檢查異常。例如,如果偽造的 chunk 大小符合 fastbin 的要求,那麼在釋放時,系統就不會檢測到任何異常。
接著,攻擊者會覆寫一個指向即將被釋放的 chunk 的指標,將其修改為指向偽造的 chunk。當系統執行 free 操作時,這個偽造的 chunk 會被當作合法的 chunk,並插入到相應的 fastbin 中。由於偽造的 chunk 在大小檢查上沒有問題,系統會將其視為有效且可重新分配的 chunk。
一旦偽造的 chunk 成功被釋放,攻擊者就能利用後續的 malloc 請求來獲取該 chunk。當程式試圖分配與偽造 chunk 大小相符的記憶體時,堆管理系統會從 fastbin 中返回這個偽造的 chunk。這樣一來,攻擊者就能控制 malloc 返回的記憶體位置,讓它指向攻擊者指定的記憶體區域,例如堆疊區或程式中的其他位置。
透過這種攻擊,攻擊者可以透過精確控制偽造 chunk 的位置和大小,取得程式中的敏感資料,進一步控制程式的執行流程。