沙箱pwn

沙箱

就是把用户态和内核态相互分离开,让用户态的进程,不要影响到内核态,从而保证系统安全

prctl seccomp相当于内核中的一种安全机制,正常情况下,程序可以使用所有的syscall,但是当劫持程序流程之后通过exeve来呼叫syscall得到shell时seccomp边排上了用场,他可以过滤掉某些syscall,只允许使用部分syscall。

prctl函数

int prctl (  int option,    unsigned long argv2,   unsigned long argv3,    unsigned long argv4,unsigned long argv3)

第一个参数,就是它设置的模式

当第一个参数是 22

第二个参数为1的时候,表示允许的系统调用有read,write,exit和sigereturn;

当第二个参数2的时候,表示允许的系统调用 由  第三个参数  指向sock_fprog结构体定义,该结构体成员指针指向的sock_filter 可以  定义过滤任意系统调用和系统调用参数。 sock_filter结构体这里,就是我们要设置规则的地方。

当第一个参数是 38

表示禁用系统调用execve()函数,同时,这个选项 可以通过  fork()函数和  clone()函数继承给子进程。

BPF过滤规则

用到Seccomp-tools这个工具

BPF指令集简介

  BPF_LD:加载操作,BPF_H表示按照字节传送,BPF_W表示按照双字来传送,BPF_B表示传送单个字节。

  BPF_LDX:从内存中加载byte/half-word/word/double-word。

  BPF_ST,BPF_STX:存储操作

  BPF_ALU,BPT_ALU64:逻辑操作运算。

  BPT_JMP:跳转操作,可以和JGE,JGT,JEQ,JSET一起表示有条件的跳转,和BPF_JA一起表示没有条件的跳转。

从prctl函数开始学习沙箱规则 - Riv4ille - 博客园 (cnblogs.com)

例题(pwnable.tw —— orw)

用seccomp-tools 看一下它的过滤规则,可以发现,只有rt_signreturn,exit_group,exit,open,read,write这几个系统调用是可以被调用的。

 seccomp.h对prctl函数进行了封装,有了seccomp_init(),seccomp_rule_add(),seccomp_load()函数来进行沙箱规则的设置。

从prctl函数开始学习沙箱规则 - Riv4ille - 博客园 (cnblogs.com)

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值