通常可以查看具有 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包,看看是否会在沙箱中执行并使用沙箱权利?
答案 0 :(得分:2)
正在查找com.apple.security.app-sandbox权利是检查XPC服务是否使用App Sandbox的方法。尽管没有此权利,Safari Web Content流程显示为沙盒的原因是它不使用App Sandbox,而是使用OS X中底层sandbox facility的低级接口。在Web内容流程调用的早期WebKit的initializeSandbox()方法,它使用系统专用接口在运行时应用sandbox policy。因此,找出给定的XPC服务是否会创建沙盒进程与查找该服务是否将调用函数一样困难。但是,如果您对此类进程的限制感到好奇,则沙箱策略通常存储在系统某处的.sb
文件中。在这种情况下,它位于/System/Library/PrivateFrameworks/WebKit2.framework/Versions/A/Resources/com.apple.WebProcess.sb
。