ASLR 與 PIE 的同與異

對於 ASLR 和 PIE 一直沒有系統歸納,部分概念時常混淆,做個筆記記錄一下。

ASLR 是什麼?

ASLR 是 Linux操作系統的功能選項,作用於程序(ELF)裝入內存運行時。是一種針對緩衝區溢出的安全保護技術,通過對加載地址的隨機化,防止攻擊者直接定位攻擊代碼位置,到達阻止溢出攻擊的一種技術。

開啓、關閉ASLR

查看當前系統ASLR的打開情況:

sudo cat /proc/sys/kernel/randomize_va_space

ASLR 有三個安全等級:

  • 0: ASLR 關閉
  • 1:隨機化棧基地址(stack)、共享庫(.so\libraries)、mmap 基地址
  • 2:在1基礎上,增加隨機化堆基地址(chunk)

PIE 是什麼?

PIE 是 gcc 編譯器的功能選項,作用於程序(ELF)編譯過程中。是一個針對代碼段( .text )、數據段( .data )、未初始化全局變量段( .bss )等固定地址的一個防護技術,如果程序開啓了PIE保護的話,在每次加載程序時都變換加載地址,從而不能通過 ROPgadget 等一些工具來幫助解題。

開啓 PIE

在使用 gcc 編譯時加入參數-fPIE

PIE 開啓後會隨機化代碼段( .text )、初始化數據段( .data )、未初始化數據段( .bss )的加載地址。

總結

作用位置 歸屬 作用時間
ASLR 1:棧基地址(stack)、共享庫(.so\libraries)、mmap 基地址
2:在1基礎上,增加隨機化堆基地址(chunk)
系統功能 作用於程序(ELF)裝入內存運行時
PIE 代碼段( .text )、初始化數據段( .data )、未初始化數據段( .bss ) 編譯器功能 作用於程序(ELF)編譯過程中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章