【问题标题】:Retrieving Sandbox entitlements from an XPC bundle从 XPC 捆绑包中检索沙盒权利
【发布时间】:2013-11-14 14:40:57
【问题描述】:

通常可以通过 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

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

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

【问题讨论】:

    标签: macos security sandbox osx-mavericks xpc


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这真的很有用。有没有办法将二进制文件与它将使用的 .sb 匹配?
    • 不,因为文件可以有任何名称。出于研究目的,它通常与进程名称有关。例如,storeagent 进程的 .sb 是 /System/Library/Sandbox/Profiles/com.apple.storeagent.sb。
    猜你喜欢
    • 2014-01-27
    • 2017-04-06
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多