Linux下程序的保护机制(checksec)
Linux下程序的保護機制
前言
相信很多人,查看程序信息時會用到,checksec這個命令。它會給你返回如下圖的結果,但是很多最開始看到的人,很多都看不懂,如果身為小白的我,跟在大佬后面比葫蘆畫瓢,這樣用。這篇博文就是用來解釋下面信息的,希望對你有所幫助,同時也是為了以后自己忘記可以回顧。
Stack Canary
Stack Canray是專門針對棧溢出攻擊涉及的一中保護機制。由于棧溢出攻擊的主要目標是通過溢出覆蓋函數棧高位的返回地址,因此其思路是在函數開始執行前,即返回地址前寫入一個字長的隨機數據(canary),在函數返回前校驗該值是否被改變,如果改變則認為是棧溢出,程序直接終止,以此來防止信息泄露。
GCC默認使用Stack Canary保護,關閉方法編譯時加入“-fno-stack-protector”參數
ALSR
ALSR,全稱 Address Space Layout Randomization(地址空間分布隨機化)。目的是將程序的堆棧地址和動態鏈接庫的加載地址進行一定的隨機化,這些地址之間是不可讀寫執行的未映射內存,降低攻擊者對程序內存結構的了解程序。這樣,即使攻擊者布置了shellcode 并可以控制轉跳,由于內存地址結構的未知,依然無法執行shellcode。
ASLR是系統等級的保護機制,關閉方式是修改/proc/sys/kernel/randomize_va_space文件的內容為0
PIE
與ASLR保護十分類似,PIE保護的目的是讓可執行程序ELF的地址進行隨機化加載,從而使得程序的內存結構對攻擊者完全未知。
GCC編譯時開啟PIE的方法是添加參數 “-fpic -pie”,關閉的方法為“-no-pie”。
NX
NX保護在window中也被稱為 DEP,是通過現代操作系統的內存保護單元機制對程序內存按頁的粒度進行權限設置,其基本規則為可寫權限與可執行權限互斥,基本規則是將數據所在內存頁標識為不可執行。開啟NX保護后,所有可以被修改寫入shellcode的內存都不可執行,所有可以被執行的代碼數據都不可被修改。
GCC默認開啟NX保護,關閉方法是編譯時加入“-z execstack”參數
RELRO
在Linux系統安全領域數據可以寫的存儲區就會是攻擊的目標,尤其是存儲函數指針的區域。 所以在安全防護的角度來說盡量減少可寫的存儲區域對安全會有極大的好處.
GCC, GNU linker以及Glibc-dynamic linker一起配合實現了一種叫做relro的技術: read only relocation。大概實現就是由linker指定binary的一塊經過dynamic linker處理過 relocation之后的區域為只讀.
設置符號重定向表格為只讀或在程序啟動時就解析并綁定所有動態符號,從而減少對GOT(Global Offset Table)攻擊。RELRO為” Partial RELRO”,說明我們對GOT表具有寫權限。
總結
以上是生活随笔為你收集整理的Linux下程序的保护机制(checksec)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Jarvis OJ - PWN]——T
- 下一篇: [Jarvis OJ - PWN]——[