三星内核保护措施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 命令可以查看设置好的运行参数。