關卡公司
已為 Glibc (ptmalloc)、uClibc-NG (dlmalloc)、gperftools (tcmalloc) 和 Google TCMalloc 準備了實現安全連結的補丁,並且還建議升級 Chromium 中的保護(在
自2012年以來,Chromium已經內建了MaskPtr保護技術,旨在解決相同的問題,但Checkpoint的解決方案表現出了更高的效能)。
建議的補丁已被批准在 8 月版本中交付
開發人員
安全連結會導致每次呼叫 free() 時執行 2-3 個額外的組譯指令,每次呼叫 malloc() 時執行 3-4 個指令。不需要運行初始化和隨機值產生階段。
安全連結不僅可用於提高各種堆疊實現的安全性,還可用於在使用放置在緩衝區本身旁邊的指標單鍊錶的任何資料結構添加完整性控制。此方法實作起來非常簡單,只需要新增一個巨集並將其應用於指向程式碼中下一個區塊的指標(例如,對於 Glibc
+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))
+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)
- 下一個p = p->fd;
+ nextp = REVEAL_PTR (p->fd);
...
此方法的本質是利用ASLR位址隨機化機制(mmap_base)中的隨機資料來保護Fast-Bins和TCache等單鍊錶。在將該值套用於指向清單中下一個元素的指標之前,它會執行遮罩轉換並檢查頁面對齊情況。此指標被「(L >> PAGE_SHIFT) XOR (P)」運算的結果替換,其中 P 是指標的值,L 是儲存指標的記憶體位置。
在系統中使用時
此方法可有效防止使用部分指標重寫(更改低位元組)、完全指標重寫(重定向到攻擊者的程式碼)以及更改未對齊位址處的清單位置的攻擊。作為一個例子,它表明在 malloc 中使用安全連結將允許最近阻止利用
來源: opennet.ru