連結器與載入器與執行檔格式

藉由不讓記憶體分頁同時具備「可寫入」與「可執行」(W^X,寫入與執行分離),較容易防禦的攻擊為下列何者?

  1. A以暴力法逐一嘗試密碼的攻擊
  2. B傳送大量通訊使伺服器停擺的攻擊
  3. C將攻擊用的機器碼寫入堆疊等資料區域,並跳到那裡執行的攻擊
查看答案與解析

正確答案:C. 將攻擊用的機器碼寫入堆疊等資料區域,並跳到那裡執行的攻擊

以往的攻擊常利用緩衝區溢位將機器碼寫入堆疊,並讓返回位址指向那裡來執行。CPU的分頁表中有禁止執行的位元(NX位元等),只要作業系統將堆疊、堆積、.data設為禁止執行,並將.text設為禁止寫入,這種方法就行不通了。像JIT編譯器那樣在執行中產生程式碼的情況,則是切換寫入與執行的權限來使用。

  • A. 密碼的暴力破解與記憶體權限無關。
  • B. 通訊量造成的攻擊無法以記憶體權限來防禦。
  • C. 正確。可寫入的地方就不能執行。
練習這個領域 前往領域頁面

連結器與載入器與執行檔格式的其他題目

  1. 在Linux的共用函式庫中,將libfoo.so.1的「.1」這類soname的版本號碼調高,一般是在什麼時候?
  2. 在Linux上對執行檔使用ldd指令,可得知下列何者?
  3. 主要作業系統所使用的執行檔格式組合,下列何者正確?
  4. 當遞迴過深而超過堆疊的上限時,在Linux等系統上一般會發生的事,下列何者正確?
  5. 在C語言中,關於未寫初始值的區域變數與全域變數,開始使用時的值,下列何者正確?

這個領域的比較