GCC安全編譯項參考

PIE(ASLR) 代碼段、數據段地址隨機化

進程地址空間各區域隨機化的措施,稱之爲ASLR(Address Space Layout Randomization)。ASLR通過隨機放置進程關鍵數據區域的地址空間來防止攻擊者能可靠地跳轉到內存的特定位置來利用函數。現代操作系統一般都加設這一機制,以防範惡意程序對已知地址進行Return-to-libc攻擊。

-fpie -pie // 開啓PIE,此時強度爲1
-fPIE -pie // 開啓PIE,此時爲最高強度2 


CANARY 堆棧溢出保護

棧溢出保護是一種緩衝區溢出攻擊緩解手段,當函數存在緩衝區溢出攻擊漏洞時,攻擊者可以覆蓋棧上的返回地址來讓shellcode能夠得到執行。當啓用棧保護後,函數開始執行的時候會先往棧裏插入cookie信息,當函數真正返回的時候會驗證cookie信息是否合法,如果不合法就停止程序運行。攻擊者在覆蓋返回地址的時候往往也會將cookie信息給覆蓋掉,導致棧保護檢查失敗而阻止shellcode的執行。

-fno-stack-protector // 禁用
-fstack-protector // 開啓
-fstack-protector-all // 完全開啓 

 

NX(DEP) 堆棧禁止執行

NX(No-eXecute),基本原理是將數據所在內存頁標識爲不可執行,當程序溢出成功轉入shellcode時,程序會嘗試在數據頁面上執行指令,此時CPU就會拋出異常,而不是去執行惡意指令。

-z execstack // 禁用NX保護
-z noexecstack // 開啓NX保護 


RELRO  GOT寫保護

設置符號重定向表格爲只讀或在程序啓動時就解析並綁定所有動態符號,從而減少對GOT(Global Offset Table)攻擊。

-z norelro // 關閉
-z lazy // 部分開啓
-z now // 全部開啓

 

FORTIFY

fority用於檢查是否存在緩衝區溢出的錯誤

-D_FORTIFY_SOURCE=1 // 較弱的檢查
-D_FORTIFY_SOURCE=2 // 較強的檢查 常用函數加強檢查

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章