1. 程式人生 > >RKP:Real-time Kernel Protection

RKP:Real-time Kernel Protection

三星核心保護措施RKP

看到一篇三星介紹自己的核心安全保護措施:
https://www.samsungknox.com/en/blog/knox-deep-dive-real-time-kernel-protection-rkp

簡短了解其的功能

在這裡插入圖片描述

基本功能就是防止核心程式碼被修改,防止核心的結構體被修改,防止記憶體控制流程。其是如何實現的?

那麼ROP和JOP的基本內容又什麼?

ROP:返回導向程式設計,實在核心開啟溢位保護措施的情況下利用漏洞的技巧。ROP將已經存在的程式碼塊拼接起來,拼接的方式是通過一個預先準備好的特殊的返回棧,裡面包含了各條指令結束後下一條指令的地址。
參考:

https://www.ibm.com/developerworks/cn/linux/1402_liumei_rilattack/index.html

含有漏洞的程式碼案列如下,我們來通過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 命令可以檢視設定好的執行引數。

參考:
https://bbs.pediy.com/thread-223798.htm