精華區beta Programming 關於我們 聯絡資訊
※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言: > > http://www.computerdiy.com.tw/modules/news/article.php?storyid=1281 > > http://www.hkepc.com/hwdb/e0celerondj-2.htm > > Intel Execute Disable Bit > 謝謝您的參考資料. > 就以前的 Virtual Memory mapper 的硬體保護, 設定某段 page 為 RW RO 或 XO > 本來就是可行的. 只是 buffer overflow attack 發生時, 就是因為 buffer > overflow 會造成 memory protection 產生 trap , 所以洩漏 stack 內的 > return-address 所在的 stack pointer. 這個位置被當跳板用來跳到原 data > buffer 內的某段預置碼. 讓 data area 的預置碼不能被執行, 應該是 AMD NX > 的主要訴求. 也就是某個記憶體區塊是 Non-eXexute 的 DATA ONLY . 但 OS 有 > 模組設定記憶體為 NX 就有模組能還原為 XO , 而基本上跳板並未能拆除, 如果 > 再找到系統內的模組能替其更正或搬移, 還是有可能被設定成可執行. 就 stack > 的 ret-address 言, 就相當於 jmp ret-address, 而這個 ret-address 指到的 > code area 仍會執行那段 code . 如果預置碼就在內應的木馬上, 還是能作用. > 這個理論上的不能, 可能不夠完整. > 對直接破門而入言, NX-dataonly 是有防護作用. 破解很容易, 例如解除 NX 的 function address 為 0x12345678 需要兩個參數 : segment, mode(1 or 0) stack segment 為 0x1111 把 return address 弄成 0x12345678, 再把 stack segment 和 0 丟進 stack 就可以把 stack 設成 executable 完全不準 data 當 code 用也還是很容易破, write to file 再 execute 都可以靠修改 stack 完成 RISC 參數通常放 register 反而安全一點 M$ 沒辦法除 bug 就弄些噱頭唬人 -- ┌─────KKCITY─────┐ ◢╱ 只要你通過身份認證 ~ ◥█ bbs.kkcity.com.tw 免經驗、五人連署即開班系板 └──From:59.120.53.7 ──┘ ◥╲ 趕快為班上設個秘密基地吧!