2014-04-21 64 views
1

我正在閱讀關於嵌入式系統中的安全性,並且傳達了這樣的聲明:「Web瀏覽器的運行時棧不應該是可執行的。」我很清楚堆棧是什麼,它是如何工作的,但我很難理解它不是可執行的手段。這是否意味着你不應該能夠在運行時更改堆棧,或者什麼?運行時棧不應該是可執行的

回答

2

對於馮諾依曼體系結構(今天最常見),程序和數據存儲在同一個存儲器中。所以,必須對什麼是程序和什麼是數據進行區分。而且,如果沒有對執行什麼的控制,許多程序可以做惡意作業。防止惡意程序做壞事的一種方法是,在執行程序時,將代碼加載到只讀可執行內存區域中,並將堆棧中使用的可寫內存區域作爲無法執行的區域。

有一個叫做程序計數器的東西指向正在執行的當前指令。一個程序可能會改變它的值來指向堆棧並執行那些可以通過網絡接收到的嚴重指令,例如,通過訪問未經授權的人訪問您的機器。

此外,在Linux操作系統中,還有一個權限系統,允許您指定文件是否可以執行以及由哪些人執行。

此線程:Linux process memory scheme 有一個相當清晰的圖像顯示了進程的內存是如何組織的。只有包含代碼的文本部分是可執行文件(這意味着程序計數器只能指向該區域中的存儲單元)。

2

在與MMU架構中,存儲器區域可以具有屬性被標記爲可讀可寫,和可執行。未標記爲可執行的區域只能用於數據 - 試圖將程序計數器設置爲並從該區域獲取指令將導致處理器異常。

一個常見的漏洞是用代碼和修改後的返回值強制堆棧上的緩衝區溢出,以便函數返回時跳轉到緩衝區溢出中的代碼。通過使堆棧不可執行,攻擊嘗試將失敗。

相關問題