gpt4 book ai didi

objective-c - 以低权限运行 OSX 应用程序

转载 作者:行者123 更新时间:2023-12-03 16:37:57 25 4
gpt4 key购买 nike

我正在开发一个 OSX 应用程序。它没有沙箱(它是一个内部应用程序,可以防止沙箱运行)。

在某个时候,我的应用程序启动了 auxiliary application ,实际上只是一个命令行应用程序。我希望能够剥夺此应用程序除了将文件写入 TMPDIR 之外的任何操作。我正在尝试遵循 principle of least privilege .

我当前使用的代码是:

NSTask* task = [NSTask new];
NSBundle* thisBundle = [NSBundle mainBundle];
[task setArguments:@[a, b, c]];
[task setLaunchPath:[thisBundle pathForAuxiliaryExecutable:@"MyProgram"]];
[task launch];

这可以用 NSTask 实现吗?如果不是,我可以使用什么机制以非常低的权限启动 MyProgram?

最佳答案

最好的工具是 XPC。它在 10.7 中有点弱,但在 10.8 中却非常强大。它的全部目的是让您以这种方式分段程序,同时使 IPC 变得非常简单。一些文档:

10.8 中 XPC 的重大变化之一是添加了 NSSecureCoding。他们修改了编译器,将类信息注入(inject)协议(protocol)定义中,以便更安全地进行对象编码(marshal)。这意味着当您说 ObjC 协议(protocol)传递 NSString 时,它们实际上可以检查该对象是否是 NSString。 (在 10.8 之前,Protocol 对象中没有类信息。您只能检查参数是否应该是“对象”。)

谁在乎呢?好吧,假设我劫持了你的低权限任务并欺骗它返回一个 NSSomethingElse 而不是 NSString (也许我只是覆盖了 isa 指针修改其类)。假设 NSSomethingElse 有一个 length 方法,它对我作为攻击者做一些有用的事情。现在,当您的高权限任务调用 [returnedValue length] 时,它将运行错误的方法。或者,也许 NSSomethingElse 没有 length 方法,因此我可以强制高权限任务抛出“未实现选择器”异常,这对我来说可能很有用,因为出色地。使用NSSecureCoding,这种攻击更加困难。它可以内省(introspection)返回的对象,注意它不是 NSString,并拒绝将其返回给调用代码。

即使没有 NSXPCConnection 的优点,如果您的目标是 10.7+,我也建议使用 XPC 来完成此类工作。

关于objective-c - 以低权限运行 OSX 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12514056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com