※ 引述《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 》──┘ ◥╲ 趕快為班上設個秘密基地吧! ◢