iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
2
自我挑戰組

到處挖坑,現在該來還(填)願(坑)ㄌ !!!系列 第 28

『 Day 28』拜託別 Pwn 我啦! - Protection 保護機制

  • 分享至 

  • xImage
  •  

Protection 保護機制

Stack Canary

Stack Canary 的機制就是在 Saved RBP 前加上一個 Radom 值,若該值被修改,則會產生 Stack Smashing Detected 事件,並直接結束程式執行。

有 canary 的話不能蓋到 return address、rbp
https://ithelp.ithome.com.tw/upload/images/20191012/20115060EKLsurpoBp.png

主要防範 Buffer Over Flow 造成的延伸安全問題。

關閉方式:

gcc $Source -fno-stack-protector -o $Binary

DEP

全名為 Data Execution Prevention,又稱 NX (No eXecute)

  • 可以寫的,不可以執行。
  • 可以執行的,不可以寫。

主要防範 Shell Code 造成的安全問題。

關閉方式:

gcc $Source -zexecstack -o $Binary

ALSR

位址空間組態隨機化(ASLR, Address space layout randomization),主要是作業系統上對於 Process 的防護機制,會使每次執行 Stack、Heap、library 位址隨機化,進而達到一些保護效果。不過並非真正隨機,最後12bits 是固定的。

關閉方式:

# echo 0 > /proc/sys/kernel/randomize_va_space

PIE

全名為 Position-Independent Executable,主要影響的範圍為 Program Structure 的 Data、Code 段,讓該地方的記憶體位置隨機化,來增加被利用的難度。Ubuntu 16.04 預設關閉。

關閉方式:

gcc $Source -no-pie -o $Binary

RELRO (RELocation Read Only)

RELRO 全名為 RELocation Read Only。共有三種保護模式,分別為 No / Partial / Full。

  • No RELRO - Link Map、GOT 可寫
  • Partial RELRO - Link Map 不可寫、GOT 可寫
  • Full RELRO - Link Map、GOT 皆不可寫

主要適用於防範 Lazy Binding 所造成的延伸問題。

關閉方式:

gcc $Source -o $Binary            // 默認情况下,是 Partial RELRO
gcc -z norelro $Source -o $Binary // No RELRO
gcc -z lazy $Source -o $Binary    // Partial RELRO
gcc -z now $Source -o $Binary     // Full RELRO

參考資料


上一篇
『 Day 27』拜託別 Pwn 我啦! - 常見的工具 (下)
下一篇
『 Day 29』拜託別 Pwn 我啦! - Buffer Overflow
系列文
到處挖坑,現在該來還(填)願(坑)ㄌ !!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
黑糖不是碳
iT邦新手 5 級 ‧ 2019-10-26 10:28:17

我發現我圖中把 Canary 寫成 Candy 了! XD

糖果XD

我要留言

立即登入留言