2009-12-07 94 views

回答

1

动态库共享相同的进程空间中调用应用程序,所以它绝对不是容易的(我认为不可能,也没有否认它到你的应用程序)。如果您可以将库封装到单独的应用程序中,那么AppArmor或SELinux可能会有所帮助,但总的来说:为什么要将不可信库加载到应用程序中?

您也可能会发现,寻找到如何铬涉及沙箱是有帮助的。

+0

@axa:我问这个问题的原因与我遇到的Chromium有关:Chrome上的扩展没有直接访问“exec”函数(或者至少我没有找到方法)。 – jldupont 2009-12-07 16:54:43

+1

请参阅http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox进行设计,并参阅http://src.chromium.org/viewvc/chrome/trunk/src/sandbox/linux/suid/了解Chromium的代码目前的沙箱。这可能会在未来被基于seccomp或SELinux的沙箱所取代。 – ephemient 2009-12-07 18:47:54

0

有可能是一些技巧,你可以做(​​例如,使用MMU映射包含EXEC()函数作为非可执行的C库的部分)可能会得到你想要的效果。

但是 - 因为动态库相同的进程空间内运行,你有什么是你可以做的,将永久禁用它的库无法撤消库。

+0

@Aaron:这是否意味着我可以*重新绑定*一些函数回到原来的* libc *? – jldupont 2009-12-07 17:15:44

+0

@jldupont - 我不确定你的意思。 – Aaron 2009-12-07 19:27:41

1

如果你是在Linux上,你可以做到以下几点:

实现高管的),你自己的版本(你想要什么(或不做),该做的系统(),要么和它LD_PRELOAD ,或将RTLD_DEEPBIND传递给dlopen()...这将导致链接器比libc提供的版本更喜欢这些方法的版本。

+0

+1:非常感谢...谢谢! – jldupont 2009-12-07 16:58:03

+3

尽管如此,该库可以使用裸系统调用,绕过您的替换。 – ephemient 2009-12-07 18:40:10

+0

非常真实......我不确定是否有办法让这种万无一失...我想如果你愿意做内核修改...... – dicroce 2009-12-08 19:15:35

2

使用AppArmor这一点。它允许专门减少应用程序可以执行的操作:可以读/写哪些文件,可以调用哪些OS功能,可以使用哪些网络服务。

这是一个有点难以安装,但您可以使用一个工具,它记录了运行你的应用程序需要的所有操作。运行后,您可以检查输出,稍微修改一下,然后使用它。

+0

+1:有趣......但我更关心图书馆方面。 – jldupont 2009-12-07 16:59:16