2013-11-28 45 views
11

在Windows中使用EncodePointer/DecodePointer的好處是什麼?使用EncodePointer/DecodePointer的好處

MSDN說:
編碼全局可用的指針有助於防止它們被利用。 EncodePointer函數使用祕密混淆指針值,以使其不能由外部代理預測。使用的祕密EncodePointer對於每個進程都不相同。

現在的問題是:如果攻擊者在我的程序之外,那麼它的地址空間與我的地址空間不同,所以我的應用程序中的地址不可用。 如果它可以在我的地址空間執行一個代碼,它可以調用DecodePointer並使用該地址來調用編碼指針。

那麼這個函數的用法是什麼以及它們如何幫助我提高安全性?

+0

如果攻擊者不在您的程序之外,該怎麼辦?就像......歷史上的每一個攻擊者一樣? –

+3

@KerrekSB如果它在我的程序中?然後它可以簡單地在我的函數指針上調用** DecodePointer **,然後通常調用它。對解碼進行編碼的好處是什麼?就像調用沒有任何鍵的函數一樣簡單?什麼使得攻擊者無法調用** DecodePointer **? –

回答

10

您錯過了這個意圖,EncodePointer()可以防止惡意數據。在惡意代碼變得有害之前,它需要先開始運行。完成這些工作的基本方法是覆蓋函數調用的返回地址或覆蓋函數指針。程序本身現在通過分別從函數返回或通過函數指針調用來激活代碼。 EncodePointer保護函數指針,攻擊者無法猜測如何對其寫入的數據進行編碼,以便在程序的DecodePointer()調用它仍然指向他的代碼之後。

數據無法調用EncodePointer。

1

具有提升特權的攻擊者可以在您的過程中創建一個線程。內核代碼還可以將進程的部分虛擬地址映射到另一個用戶進程和/或系統進程。

使用EncodePointer將只會讓攻擊者有點難,但不能保證任何東西。