這系列好像說的有點久,前面講完基本原理和她的過程,然後有說到他基本沒保護
那今天就講一下在這機制下的攻擊,不過不會拿實例來講,比較像科普的概念來講
科普五個攻擊:
其實這攻擊就是 fastbin corruption attack
,也就是藉由竄改 fd 來達到
下下次 malloc 任意記憶體位置。
在 tcache 中也是一樣,可以去改 next pointer 來做一樣的事情
只是本來這攻擊只適用在 fastbin 上,在 tcache 中可以用到 small bin 上了
且因為保護沒有的關係,所以不用擔心 double free
也不用偽造 chunk 結構
這攻擊在 2005 年被提出來,簡單講攻擊方式是
如果今天你可以偽造一個 chunk ,而且這個 chunk size 必須是 fastbin 的
,然後你還要偽造 next chunk 的 prev_size 和 size ,
然後你還要想辦法 free 掉你偽造的 chunk ,這樣在下次 malloc 可以取得
偽造 chunk 的地址,這整個過程在現代的保護下要做到其實還蠻難的。
但在 TCache 下就不一樣了。
首先因為 TCache 把保護都拔掉的關係,所以就也沒啥要繞過的,
就只需要偽造一個 chunk 然後 free 掉後做malloc 就好。
那這攻擊本來僅能用在 fastbin 上面,現在也可以用到 smallbin 上面了
這攻擊在 heap 裡面算是很常見的攻擊,具體做法是
如果今天存在兩個相鄰的 chunk ,那你如果可以改掉第一個 chunk size 並改大,
這樣你在 free 掉她,然後再次 malloc 一個你偽造 size 的 chunk ,這樣你就可以取得相同的位址,
但因為 size 變大的關係,所以整個 chunk 涵蓋範圍也變大,就可以包含有第二個 chunk 造成
overlapping ,這樣就可以去改第二個 chunk 這樣。
那一樣在 TCache 把保護都拔掉下,使用上會更為簡單和容易。
當你在 malloc 時,如果你取得的 chunk 是從 smallbin 裡面拿到的話,
他會同時檢查底下還有沒有其他空閒的 chunk ,有的話會直接把他們補到 TCache 中,
然後這個過程會觸發 unlink ,但這邊的 unlink 是最原始的 unlink ,也就是跟
unsorted bin 上面的 unlink 是一樣的,所以可以做到跟 unsorted bin attack 一樣的效果。
前面有說 tcache_perthread_struct 這個結構管理了整個 TCache
那你可以利用任意漏洞來控任意記憶體位置,那如果你把你要控制的記憶體位置
設為 tcache_perthread_struct 的話,你就可以去控制整個 TCache ,
那就可以做到任何你想要做的事情,比如 malloc 任何大小的 chunk 都要用 TCache 。