RKP:Real-time Kernel Protection
三星核心保護措施RKP
看到一篇三星介紹自己的核心安全保護措施:
https://www.samsungknox.com/en/blog/knox-deep-dive-real-time-kernel-protection-rkp
簡短了解其的功能
基本功能就是防止核心程式碼被修改,防止核心的結構體被修改,防止記憶體控制流程。其是如何實現的?
那麼ROP和JOP的基本內容又什麼?
ROP:返回導向程式設計,實在核心開啟溢位保護措施的情況下利用漏洞的技巧。ROP將已經存在的程式碼塊拼接起來,拼接的方式是通過一個預先準備好的特殊的返回棧,裡面包含了各條指令結束後下一條指令的地址。
參考:
含有漏洞的程式碼案列如下,我們來通過ROP實際繞過NX:
void deja_vu() {
char door[8];
gets(door);
}
int main() {
deja_vu();
}
安裝gdb外掛gdb-peda方便除錯:
兩條簡單命令即可完成:
git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >> ~/.gdbinit
peda的一個實用命令checksec檢測安全保護。
peda的另一個實用命令searchmem用搜索記憶體
file 路徑 附加檔案
r 開始執行
c 繼續執行
step 單步步入
next 單步步過
b *地址 下斷點
enable 啟用斷點
disable 禁用斷點
info b 檢視斷點
del num 刪除斷點
x/wx $esp 以4位元組16進位制顯示棧中內容
stack 100 外掛提供的,顯示棧中100項
find xxx 快速查詢,很實用
s 按字串輸出
x 按十六進位制格式顯示變數。
d 按十進位制格式顯示變數。
u 按十六進位制格式顯示無符號整型。
o 按八進位制格式顯示變數。
t 按二進位制格式顯示變數。
a 按十六進位制格式顯示變數。
c 按字元格式顯示變數。
f 按浮點數格式顯示變數。
x/<n/f/u>
n、f、u是可選的引數。
b表示單位元組,h表示雙位元組,w表示四字 節,g表示八位元組
但是實際的組合就那麼幾種:
x/s 地址 檢視字串
x/wx 地址 檢視DWORD
x/c 地址 單位元組檢視
x/16x $esp+12 檢視暫存器偏移
set args 可指定執行時引數。(如:set args 10 20 30 40 50)
show args 命令可以檢視設定好的執行引數。