我正在閱讀關於嵌入式系統中的安全性,並且傳達了這樣的聲明:「Web瀏覽器的運行時棧不應該是可執行的。」我很清楚堆棧是什麼,它是如何工作的,但我很難理解它不是可執行的手段。這是否意味着你不應該能夠在運行時更改堆棧,或者什麼?運行時棧不應該是可執行的
1
A
回答
2
對於馮諾依曼體系結構(今天最常見),程序和數據存儲在同一個存儲器中。所以,必須對什麼是程序和什麼是數據進行區分。而且,如果沒有對執行什麼的控制,許多程序可以做惡意作業。防止惡意程序做壞事的一種方法是,在執行程序時,將代碼加載到只讀可執行內存區域中,並將堆棧中使用的可寫內存區域作爲無法執行的區域。
有一個叫做程序計數器的東西指向正在執行的當前指令。一個程序可能會改變它的值來指向堆棧並執行那些可以通過網絡接收到的嚴重指令,例如,通過訪問未經授權的人訪問您的機器。
此外,在Linux操作系統中,還有一個權限系統,允許您指定文件是否可以執行以及由哪些人執行。
此線程:Linux process memory scheme 有一個相當清晰的圖像顯示了進程的內存是如何組織的。只有包含代碼的文本部分是可執行文件(這意味着程序計數器只能指向該區域中的存儲單元)。
2
在與MMU架構中,存儲器區域可以具有屬性被標記爲可讀,可寫,和可執行。未標記爲可執行的區域只能用於數據 - 試圖將程序計數器設置爲並從該區域獲取指令將導致處理器異常。
一個常見的漏洞是用代碼和修改後的返回值強制堆棧上的緩衝區溢出,以便函數返回時跳轉到緩衝區溢出中的代碼。通過使堆棧不可執行,攻擊嘗試將失敗。
相關問題
- 1. Qpython - 運行腳本時不可執行
- 2. pushState執行時不應該到
- 3. (JAVA)Break命令在執行時不應該執行
- 4. 嵌套if/else,否則在不應該執行時執行?
- 5. 是否可以運行不可執行的npm腳本?
- 6. jQuery腳本運行時,它不應該
- 7. 代碼運行時它不應該?
- 8. JavaScript的執行程序運行時可執行的JAR文件
- 9. MPI for應該不平行執行,但他的身體是的
- 10. 是否可以在運行時修改可執行文件?
- 11. 可執行文件運行時
- 12. 在運行時生成可執行jar
- 13. 是不是應該爲單時間範圍運行(3,3,2)python
- 14. Firefox當它不應該執行時它應該
- 15. 蜂是不可執行的
- 16. 運行時錯誤運行堆棧,這可能是由於數組大小
- 17. 類是可運行的執行接口但不限定運行方法
- 18. Java運行時的.exec()不會打開可執行
- 19. jQuery的.validation()不執行像它應該
- 20. 運行時錯誤-f1.exe不存在或不是可執行文件
- 21. 是否可以在C#中運行時創建/執行代碼?
- 22. 織物SUDO運行時是否可以執行函數
- 23. 棧運行時錯誤
- 24. Facebook的JavaScript執行兩次,但應該只運行一次
- 25. 運行可執行文件不會執行任何操作
- 26. 執行IEnlistmentNotification時應該在哪裏執行操作?
- 27. info.plist中的可執行文件名稱應該是什麼?
- 28. 堆棧上的可執行Ada代碼
- 29. 流浪:可執行文件是不可執行的
- 30. 運行.sh腳本而不是可執行文件