Objective-C中的NSBundle沙盒

时间:2012-03-12 04:44:43

标签: objective-c c cocoa posix nsbundle

奇怪的头衔,我知道。我真正要问的是“我可以为NSBundles创建一个TrustedBSD MAC框架或iOS沙箱吗?”我有一个非常动态的应用程序,可以随时将模块“插入”或“未插入”到“交换机”。操作它的用户在另一台计算机上,可能在数英里之外。用户无法知道配电板模块如何兼容,并且在没有配置时不会破坏系统。我知道iOS沙盒和TrustedBSD(以及Lion的Seatbelt.framework)可以为进程执行此操作,但是如何为捆绑代码执行此操作?

我想到的事情:

所有posix调用和ObjC消息传递的静态二进制分析(似乎不可能,因为二进制文件是......二进制,此时不是代码)。

在运行时跟踪ObjC消息并记录它们,在单个杂散调用后锁定模块。 (这不会影响POSIX调用或任何C调用,也不会组装,并且至少会有一个调用已经发送过。)

使用XPC创建沙盒外部进程并在那里加载模块,并使用PDO将交换机调用路由到该进程(非常可行,但我需要兼容雪豹)。

任何想法?我意识到捆绑一旦加载,最终会成为应用程序的一部分,因此这会进一步增加安全性实施的问题。

1 个答案:

答案 0 :(得分:1)

将捆绑包加载到流程中的那一刻,您可以完全控制流程。 (这是因为bundle甚至可以包含在初始化时运行的代码,甚至在你调用它的任何函数之前。)

在运行时跟踪消息毫无意义,因为恶意软件包可能会在消息发生之前禁用负责消息跟踪的代码。 (毕竟,它在相同的内存空间中运行,并且不需要使用任何ObjC消息来执行此操作。)

简而言之:不要加载你不信任的软件包。如果您必须使用不受信任的捆绑包,请使用某种形式的沙盒(无论是XPC还是其他东西)。