Linux下程式的保護機制 checksec

2021-10-18 19:21:24 字數 1461 閱讀 3643

相信很多人,檢視程式資訊時會用到,checksec這個命令。它會給你返回如下圖的結果,但是很多最開始看到的人,很多都看不懂,如果身為小白的我,跟在大佬後面比葫蘆畫瓢,這樣用。這篇博文就是用來解釋下面資訊的,希望對你有所幫助,同時也是為了以後自己忘記可以回顧。

stack canray是專門針對棧溢位攻擊涉及的一中保護機制。由於棧溢位攻擊的主要目標是通過溢位覆蓋函式棧高位的返回位址,因此其思路是在函式開始執行前,即返回位址前寫入乙個字長的隨機資料(canary),在函式返回前校驗該值是否被改變,如果改變則認為是棧溢位,程式直接終止,以此來防止資訊洩露。

gcc預設使用stack canary保護,關閉方法編譯時加入「-fno-stack-protector」引數

alsr,全稱 address space layout randomization(位址空間分布隨機化)。目的是將程式的堆疊位址和動態鏈結庫的載入位址進行一定的隨機化,這些位址之間是不可讀寫執行的未對映記憶體,降低攻擊者對程式記憶體結構的了解程式。這樣,即使攻擊者布置了shellcode 並可以控制轉跳,由於記憶體位址結構的未知,依然無法執行shellcode。

aslr是系統等級的保護機制,關閉方式是修改/proc/sys/kernel/randomize_va_space檔案的內容為0

與aslr保護十分類似,pie保護的目的是讓可執行程式elf的位址進行隨機化載入,從而使得程式的記憶體結構對攻擊者完全未知。

gcc編譯時開啟pie的方法是新增引數 「-fpic -pie」,關閉的方法為「-no-pie」。

nx保護在window中也被稱為 dep,是通過現代作業系統的記憶體保護單元機制對程式記憶體按頁的粒度進行許可權設定,其基本規則為可寫許可權與可執行許可權互斥,基本規則是將資料所在記憶體頁標識為不可執行。開啟nx保護後,所有可以被修改寫入shellcode的記憶體都不可執行,所有可以被執行的**資料都不可被修改

gcc預設開啟nx保護,關閉方法是編譯時加入「-z execstack」引數

在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程式的常用保護機制

linux nx pie windows dep aslr dep是資料執行保護的英文縮寫,全稱為data execution prevention。資料執行保護 dep 是一套軟硬體技術,能夠在記憶體上執行額外檢查以幫助防止在系統上執行惡意 nx即no execute 不可執行 的意思,nx de...

程式保護機制

3.堆保護 nx 傳統的堆漏洞攻擊會覆蓋對塊首部,並檢視建立乙個偽造的塊,當記憶體釋放例程執行時可以使用該塊在任意記憶體位址處寫入任意4個位元組。具體為 4.dep nx dep data execution prevention 即資料執行保護,阻止存放在堆 棧或資料記憶體中的 執行,這一直以來都...

程式編譯保護機制

本篇文章主要內容摘選自 linux程式的常用保護機制 gcc 安全編譯選項 gcc安全保護機制,在本篇文章中,主要梳理彙總,便於以後查閱。gcc編譯器中的引數pie和pic都可生成位置無關的 pie主要用在可執行檔案上,pic用在共享庫上。cannary機制還會調整區域性變數的順序。如果陣列位址在其...