iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

前言

這篇來記錄一下今天學習的一些保護選項,包含編譯器的保護和 OS 的保護。

類別

記憶體位址隨機化

  • ASLR (Address Space Layout Randomization)
    • OS 層級的保護
    • 將 ELF 放進記憶體執行時發揮作用
    • library、heap、stack 這些部分會被隨機化(依照不同等級)
    • .text.data.bss 等等 section 不會被隨機化
  • PIE (Position-Independent Executable)
    • 編譯器的保護選項(-fPIE)
    • 在編譯檔案的時候就會發揮作用
    • 負責讓 .text.data.bss 等等 section 隨機化
    • 比 ASLR 晚出現
    • 如果用 PIE 編譯,但沒開 ASLR 也沒效果
    • 會讓 ROP 變難

雖然有點複雜,但可以看出兩者還是要搭配使用才能有最大的保護效果。

Stack 和 Heap 溢位保護

  • NX (No-Execute)
    • 編譯器的保護選項
    • 跟 Windows 的 DEP(Data Execution Prevention)類似
    • 需要硬體(CPU)的支援
    • 可以將某些記憶體區段標記為不可執行(只能放資料),即使成功寫入 shell code 也不能執行
    • 嘗試執行的話 CPU 會拋異常
  • Stack Canary
    • 編譯器的保護選項
    • 防止 stack overflow
    • 執行函數時會往 stack 中放入 cookie 資訊,函數 return 時會驗證 cookie
    • 這個 cookie 資訊被稱為 canary(典故可參考:"礦坑裡的金絲雀")
  • FORTIFY
    • 編譯器的保護選項
    • 檢查是否有 buffer overflow
    • 針對字串、記憶體操作的函數

工具

最後來介紹一下 Checksec 這個工具,它可以用來查看一個執行檔的安全屬性,也就是編譯時設定的保護選項。

Checksec: https://slimm609.github.io/checksec.sh/

另外 gdb-peda 中也有內建 checksec。


上一篇
Day 23. Pwn - 複習組合語言
下一篇
Day 25. Pwn - Buffer Overflow
系列文
進了資安公司當後端 RD 才入門資安會不會太晚了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言