pwn學習---保護機制

操作系統提供了許多安全機制來嘗試降低或阻止緩衝區溢出攻擊帶來的安全風險,包括DEP、ASLR等。在編寫漏洞利用代碼的時候,需要特別注意目標進程是否開啓了DEP(Linux下對應NX)、ASLR(Linux下對應PIE)等機制,例如存在DEP(NX)的話就不能直接執行棧上的數據,存在ASLR(PIE)的話各個系統調用的地址就是隨機化的。
在這裏插入圖片描述
解讀:
Arch: i386-32-little 平臺,i386,32位 小端模式(高高低低排列,高位在高地址,地位在低地址)
RELRO: Full RELRO – 重定向
RELRO會有Partial RELRO和FULL RELRO,如果開啓FULL RELRO,意味着我們無法修改got表
Stack: No canary found – 棧檢查
NX: NX enabled – 不可執行
PIE: PIE enabled – 地址隨機化

1、canary(棧保護)

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

2.FORTIFY

這個保護機制防止緩衝區溢出攻擊。gcc生成了一些附加代碼,通過對數組大小的判斷替換strcpy, memcpy, memset等函數名,達到防止緩衝區溢出的作用。

3.NX(DEP)

NX即No-eXecute(不可執行)的意思,NX(DEP)的基本原理是將數據所在內存頁標識爲不可執行,當程序溢出成功轉入shellcode時,程序會嘗試在數據頁面上執行指令,此時CPU就會拋出異常,而不是去執行惡意指令。
gcc編譯器默認開啓了NX選項,如果需要關閉NX選項,可以給gcc編譯器添加-z execstack參數。例如:

gcc -z execstack -o test test.c

在Windows下,類似的概念爲DEP(數據執行保護),在最新版的Visual Studio中默認開啓了DEP編譯選項。

4.PIE(ASLR)

一般情況下NX(Windows平臺上稱其爲DEP)和地址空間分佈隨機化(ASLR)會同時工作。內存地址隨機化機制(address space layout randomization),有以下三種情況

0 - 表示關閉進程地址空間隨機化。
1 - 表示將mmap的基址,stack和vdso頁面隨機化。
2 - 表示在1的基礎上增加棧(heap)的隨機化。

可以防範基於Ret2libc方式的針對DEP的攻擊。ASLR和DEP配合使用,能有效阻止攻擊者在堆棧上運行惡意代碼。

Built as PIE:位置獨立的可執行區域(position-independent executables)。這樣使得在利用緩衝溢出和移動操作系統中存在的其他內存崩潰缺陷時採用面向返回的編程(return-oriented programming)方法變得難得多。
liunx下關閉PIE的命令如下:

sudo -s echo 0 > /proc/sys/kernel/randomize_va_space

PIE有關的知識詳情:https://blog.csdn.net/counsellor/article/details/81543197

5、RELRO

設置符號重定向表格爲只讀或在程序啓動時就解析並綁定所有動態符號,從而減少對GOT(Global Offset Table)攻擊。RELRO爲” Partial RELRO”,說明我們對GOT表具有寫權限。
總之,需要執行
sudo -s echo 0 > /proc/sys/kernel/randomize_va_space//可選,
如果要關閉系統的ALSR功能就執行這個

gcc -no-pie -fno-stack-protector -z execstack -m32 -o exp1 exp1.c

objdump命令是用查看目標文件或者可執行的目標文件的構成的gcc工具。
詳情https://man.linuxde.net/objdump
-j name
–section=name 僅僅顯示指定名稱爲name的section的信息
-t
–syms 顯示文件的符號表入口。類似於nm -s提供的信息
objdump -t -j .text exp1//查看read程序的.text段有哪些函數

參考文章:

checksec及其包含的保護機制

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