【发布时间】:2012-07-13 17:50:36
【问题描述】:
我想在我的服务器上执行任意(潜在危险)二进制文件。因此,我使用objcopy 将“main”符号重命名为“other_main”,以便我可以链接到我自己的小主函数,该函数为RLIMIT_CPU 设置适当的值并在调用other_main 之前切换SECCOMP 标志。到目前为止,我对这个解决方案非常满意。
现在的问题是,第 3 方程序代码可能包含一些对 malloc 的调用,这些调用可能会立即终止程序(不允许使用 sbrk)。因此,我想在设置 SECCOMP 之前预先分配一些合理大小的数组(例如 20MB),这些数组应该由 malloc / realloc / calloc / free 使用。不幸的是,我不知道如何归档最后一步。我必须自己实现所有这 4 个功能吗?如何将自己的函数注入到 stdlib(例如,当 printf 在内部调用 malloc 时会发生什么?)。
【问题讨论】:
-
重命名符号真的有效吗?我真的很想知道操作系统如何处理剥离的二进制文件。
-
重命名符号在这里可以正常工作。 objcopy 似乎真的很强大。显然不允许您剥离二进制文件,但这对我来说不是问题,因为我自己编译二进制文件。只是C代码不可信。
-
您能否为您的用户提供与您的操作系统库不同的 C 库(例如 Newlib)?如果是这样,编写自己的
sbrk(无法脱离沙箱)将非常容易,然后 malloc/realloc/calloc/free 和朋友都可以工作。 -
对不起。我想念您重新链接并创建新程序。
-
请注意,仅仅重命名
main可能不够——二进制文件可能包含在main之前运行的初始化程序。
标签: c linux gcc malloc seccomp