我想在我的服务器上执行任意(潜在危险)的二进制文件。因此,我使用objcopy
将“main”符号重命名为“other_main”,以便我可以链接到我自己的小主函数中,该函数在调用other_main之前为RLIMIT_CPU
设置适当的值并切换SECCOMP
标志。到目前为止,我对这个解决方案非常满意。SECCOMP:如何模拟malloc,realloc和free?
现在的问题是,第三方程序代码可能包含一些对malloc的调用,可能会立即终止程序(sbrk不允许)。因此,我希望在设置应该由malloc/realloc/calloc/free使用的SECCOMP
之前预先分配一些合理大小的数组(例如20MB)。不幸的是,我不知道如何归档最后一步。我是否必须自己实施所有这4项功能?我怎样才能将自己的函数注入到stdlib中(例如,printf在内部调用malloc时会发生什么?)。
是否重命名符号realy作品?我真的不知道操作系统是如何处理被剥离的二进制文件的。 – 2012-07-13 20:34:09
重命名符号在这里工作正常。 objcopy似乎非常强大。你显然不允许去除二进制文件,但这对我来说不是问题,因为我自己编译二进制文件。这只是不可信的C代码。 – tux21b 2012-07-13 20:46:44
你能否为你的用户提供一个不同于你的操作系统库的C库(例如Newlib)?如果是这样,编写自己的'sbrk'(不能离开你的沙箱),然后malloc/realloc/calloc/free和朋友都可以工作。 – 2012-07-13 20:59:15