2

通常可以通过codesign命令行调用查看应用程序是否存在沙盒权利。例如,调用这个

codesign --display --entitlements :- /Applications/Notes.app/ | grep sandbox

将导致此输出

Executable=/Applications/Notes.app/Contents/MacOS/Notes
<key>com.apple.security.app-sandbox</key>

其中 com.apple.security.app-sandbox 键表示应用程序在沙盒中运行。

在 Mavericks 上,一些 XPC 帮助应用程序在 Activity Monitor 中显示为在沙箱中运行,但在它们上调用 codesign 并没有显示任何内容。Safari 的 XPC 帮助应用程序之一的示例:-

codesign -display --entitlements :- /System/Library/PrivateFrameworks/WebKit2.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent | grep sandbox

只返回这个: -

Executable=/System/Library/PrivateFrameworks/WebKit2.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent

我还尝试使用本文中描述的代码以编程方式检查捆绑包是否为沙盒,但同样返回未沙盒,即使活动监视器明确指出它是沙盒。

是否可以检查这样的 xpc 捆绑包,查看是否将在沙箱中执行并使用沙箱权利?

4

1 回答 1

2

查找 com.apple.security.app-sandbox 权利是检查 XPC 服务是否使用 App Sandbox 的方法。尽管没有此权利,但 Safari Web 内容进程显示为沙盒的原因是它不使用 App Sandbox,而是使用OS X中底层沙盒设施的较低级别接口。早期的 Web 内容进程调用 WebKit 的initializeSandbox( )方法,它使用系统私有接口在运行时应用沙盒策略。因此,确定给定的 XPC 服务是否会创建沙盒进程与确定该服务是否会调用函数一样困难。但是,如果您对此类进程的限制感到好奇,则沙盒策略通常存储在.sb文件在系统的某个地方。在这种情况下,它位于/System/Library/PrivateFrameworks/WebKit2.framework/Versions/A/Resources/com.apple.WebProcess.sb.

于 2013-11-15T00:06:55.297 回答