macOS安全机制Hardened Runtime(强化运行时)
macOS安全机制Hardened Runtime(强化运行时)

macOS安全机制Hardened Runtime(强化运行时)

Hardened Runtime(强化运行时)是 Apple 在 macOS 中引入的一项 安全机制,用于加强 App 的保护能力,防止被恶意注入、调试或篡改。

它是 App Notarization(公证)和沙盒(App Sandbox)安全体系的基础之一。凡是要进行公证或上架 App Store 的 macOS App,都建议开启 Hardened Runtime。

根据Xcode中的提示信息,可以了解到:

Hardened Runtime defends your application by preventing modifications to its code and provides fine-grained controls over what can run in your process. Hardening the runtime also prevents access to sensitive resources unless your application pre-declares its intent to use them, which reduces the attack surface by eliminating unnecessary access. These properties help prevent exploitation of your application and this capability is required for your app to be notarized.

翻译内容为:强化运行时 (Hardened Runtime) 通过阻止代码修改来保护您的应用程序,并对可在您的进程中运行的程序提供细粒度的控制。强化运行时还可以阻止对敏感资源的访问,除非您的应用程序预先声明要使用这些资源,从而通过消除不必要的访问来减少攻击面。这些属性有助于防止您的应用程序遭受攻击,并且此功能是您的应用获得公证所必需的

Hardened Runtime作用

开启 Hardened Runtime 后,macOS 会为应用添加以下保护:

1、防止调试:拒绝非开发者身份附加调试器。

2、禁止代码注入:防止第三方动态库注入应用。

3、安全运行环境:启用系统完整性保护和系统签名校验。

4、支持 App 公证:Notarization 要求必须开启 Hardened Runtime。

5、加强 App 沙盒可信度:可与 Sandbox 权限协同。

Hardened Runtime开启流程

在Xcode16中,新建的macOS应用程序默认添加Hardened Runtime。

如果你的项目中没有添加Hardened Runtime,则需要点击项目名 – TARGETS – 应用名称 – Signing & Capabilities,点击“+ Capability”按钮,选择Hardened Runtime。

Hardened Runtime功能

Runtime Exceptions(运行时例外)

1、Allow Execution of JIT-compiled Code:允许执行运行时即时编译(JIT)的代码,例如浏览器或虚拟机中的 JIT。

2、Allow Unsigned Executable Memory:允许创建未签名的可执行内存区域(风险较高,一般不推荐)。

3、Allow DYLD Environment Variables:允许通过环境变量(如 DYLD_INSERT_LIBRARIES)影响动态链接器行为;开发调试常用,正式发布时应关闭。

4、Disable Library Validation:允许加载未签名或第三方开发者签名的动态库;适用于插件架构,但可能降低安全性。

5、Disable Executable Memory Protection:关闭对可执行内存的保护,用于支持一些特殊用例,如旧式代码注入等。

6、Debugging Tool:允许调试器附加到进程,适合开发阶段,正式发布时应关闭。

这些功能允许开发者在默认强化的基础上“放开”某些限制,适用于某些高级行为如调试、插件支持等。

Resource Access(资源访问权限)

1、Audio Input:使用麦克风采集音频。

2、Camera:访问摄像头。

3、Location:获取用户的地理位置。

4、Contacts:访问用户通讯录。

5、Calendar:访问用户的日历事件。

6、Photos Library:访问用户照片图库(注意隐私策略要求)。

7、Apple Events:允许使用 AppleScript 向其他应用发送 Apple Events,例如自动化控制 Finder、Safari 等。

这些对应的是希望访问用户设备中的敏感资源,需要在 entitlements 文件中声明,同时用户首次访问时系统会请求授权。

验证App的Hardened Runtime

在终端运行:

codesign -dv --verbose=4 /Applications/YourApp.app

输出如下:

Executable=/Users/fangjunyu/Desktop/ImageSlim.app/Contents/MacOS/ImageSlim
Identifier=com.fangjunyu.ImageSlim
...
Runtime Version=15.4.0  // Runtime Version

其中 Runtime Version 出现说明 Hardened Runtime 已启用。

Hardened Runtime未开启的风险

如果 .app 文件:没有开启 Hardened Runtime、没签名或签名后未公证。

macOS 会拒绝运行或弹出警告,并且

无法通过 Apple 公证服务(Notarization)。

用户双击启动可能收到 “App 已损坏” 或 “无法验证开发者” 警告。

总结

在开发测试的过程中,可以关闭部分限制以便调试(如启用 Debugging Tool)。

当发布到App Store或需要公证分发时,必须开启 Hardened Runtime,且尽量避免启用 Runtime Exceptions 中的危险选项,如 “Allow Unsigned Executable Memory”。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注