pysandbox 的受限功能 (RF)
Restricted Function (RF) with pysandbox
我的问题和here and here完全一样。
我也在使用 simple2.py
对这个程序生成的可执行文件进行沙箱处理 test1.c
:
#include<stdio.h>
int main(){
puts("Hello World");
return 0;
}
我正在使用以下命令构建可执行文件:
gcc -static test1.c
之后如果我这样做:
ldd a.out
我得到输出:
not a dynamic executable
然而,当我运行 sample2.py 时的结果仍然是
result: RF
cpu: 0ms
mem: 952kB
我到底做错了什么?
我改这个:
x86_64=set([0,1,5,8,9,10,11,12,16,25,63,158,219,231])
为此:
x86_64=set([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])
在 sample2.py 中,它有效。
RF 结果代码很可能是由于文件操作的意外系统调用(即 SYS_open()、SYS_close()、SYS_stat() 等)。当 (1) 目标程序实际执行文件操作,和(或)当 (2) 它是动态 linked 并且需要在运行时加载 .so 库时,就会发生这种情况。由于你的目标程序没有调用文件操作,属于后一种情况。
然后,要解决 RF 结果,
statically link the target program to avoid dependencies on shared libraries; or,
extend the policy rules in the wrapper script to handle relevant SYSCALL / SYSRET events;
对于静态 linking 系统调用,我们使用 ex 0,1,2 的系统调用代码
3-sys_read
1-sys_exit
等等
浏览 link 了解更多详情
link 系统调用列表代码:
http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
我改这个:
x86_64=设置([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])
为此:
x86_64=设置([0,1,2,3,4,5,8,9,10,11,12,16,21,25,63,89,158,219,231,])
在 sample2.py 中,它有效。
修改后的 sample2.py 在我的 github 存储库 link 中可用:
https://github.com/palashmaran/libsandbox.git
我的问题和here and here完全一样。
我也在使用 simple2.py
对这个程序生成的可执行文件进行沙箱处理 test1.c
:
#include<stdio.h>
int main(){
puts("Hello World");
return 0;
}
我正在使用以下命令构建可执行文件:
gcc -static test1.c
之后如果我这样做:
ldd a.out
我得到输出:
not a dynamic executable
然而,当我运行 sample2.py 时的结果仍然是
result: RF
cpu: 0ms
mem: 952kB
我到底做错了什么?
我改这个:
x86_64=set([0,1,5,8,9,10,11,12,16,25,63,158,219,231])
为此:
x86_64=set([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])
在 sample2.py 中,它有效。
RF 结果代码很可能是由于文件操作的意外系统调用(即 SYS_open()、SYS_close()、SYS_stat() 等)。当 (1) 目标程序实际执行文件操作,和(或)当 (2) 它是动态 linked 并且需要在运行时加载 .so 库时,就会发生这种情况。由于你的目标程序没有调用文件操作,属于后一种情况。
然后,要解决 RF 结果,
statically link the target program to avoid dependencies on shared libraries; or,
extend the policy rules in the wrapper script to handle relevant SYSCALL / SYSRET events;
对于静态 linking 系统调用,我们使用 ex 0,1,2 的系统调用代码 3-sys_read 1-sys_exit 等等 浏览 link 了解更多详情 link 系统调用列表代码: http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
我改这个:
x86_64=设置([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])
为此:
x86_64=设置([0,1,2,3,4,5,8,9,10,11,12,16,21,25,63,89,158,219,231,])
在 sample2.py 中,它有效。
修改后的 sample2.py 在我的 github 存储库 link 中可用: https://github.com/palashmaran/libsandbox.git