【问题标题】:Mac OS X Code Signing and Executable ValidationMac OS X 代码签名和可执行文件验证
【发布时间】:2012-11-21 15:21:24
【问题描述】:

我正在开发一个垂直市场的 Mac 应用程序,该应用程序使用 USB 加密狗来确保用户已付费。它的成本足够高,而且需求也足够大,以至于“黑帽”试图破解加密狗方案,因此应用程序在运行时检查可执行文件和关键资源文件,如果有东西被篡改,程序将无法运行。

随着基于 PKI(公钥基础设施)的代码签名在 Mac 世界中变得越来越普遍,我正在考虑改用它来进行运行时验证,这将产生让 Gatekeeper 满意的良好副作用。

但是,Apple 的兴趣与我的兴趣截然不同。他们的重点是让用户满意,所以如果一个应用程序的签名不正确,Mac OS X 会简单地询问用户是否要运行它。我的重点是阻止破解者,所以如果我的应用有不正确的签名,我根本不希望它做任何对最终用户有用的事情。

所以我希望我的应用能够在运行时使用 Apple 的签名验证其自己的可执行文件和资源。

此外,根据我对提供 Mac OS X 进行验证的库的了解,它们只是对验证可执行文件的请求给出“是”或“否”的答案。令我震惊的是,这很容易以多种方式受到“黑帽”攻击 - 例如,可以简单地用总是说“是的,这是有效的”的工具替换 Apple 的工具,无论是在系统目录中还是通过更改这些工具的搜索路径。所以我认为将完整的签名验证代码集构建到我的应用程序中可能是一个好主意。

所以我有几个问题:

  1. 哪些 PKI 库/API 可用于让应用验证其自己的可执行文件和已使用 Apple 的协同设计系统签名的资源?
  2. 这些库是否有可用的源代码?
  3. 我对使用 Apple 随 Mac OS X 提供的 PKI 库的安全担忧是否有效,或者它们是否比我想象的更安全?
  4. 有没有人愿意分享这种事情的经验?还有其他注意事项或提示吗?

提前感谢您对此提供的任何帮助。

【问题讨论】:

  • +1 在版权保护游戏中,您需要成为“偷猎者,变身守望者”。看起来你自己从来都不是黑帽子。这是一个有趣的问题。
  • @trojanfoe:没错,我从来都不是黑帽子。
  • @trojanfoe:说到这……在保护代码不被修改或其他阻止使用 USB 加密狗的方法方面,我在这里是否缺少一些东西?
  • 我只是认为阻止破解者修改你的代码是不可能的,但你可以让它变得非常困难。然而,要做到这一点非常困难。
  • 我同意这是不可能的,但我只是想让它变得足够难,不值得打扰。就我的目的而言,如果磁盘上的可执行映像或密钥资源文件已从发布版本修改,则程序拒绝运行就足够了——因此,程序会根据其数字签名验证它们。如果一个破解者拉了一些更花哨的东西,比如代码注入,那是一匹不同颜色的马。

标签: xcode macos code-signing pki


【解决方案1】:

为了回答上面的 #1 和 #2,Apple 已将其用于创建和验证数字签名的代码开源为 libsecurity_codesigning。因此,开发人员可以将其构建到他们的应用中,让它验证自己的签名。

另外,这个库的 MacOS 版本可以由应用程序使用 - 但 API 是私有的,所以这是一个陷阱。有一个brief discussion at this link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多