我在一个垂直市场的 Mac 应用程序上工作,该应用程序使用 USB 加密狗来确保用户付费。它的成本足够高,需求也足够大,以至于“黑帽”试图破解加密狗方案,因此应用程序在运行时检查可执行文件和关键资源文件,如果有东西被篡改,程序将无法运行。
随着基于 PKI(公钥基础设施)的代码签名在 Mac 世界中变得越来越普遍,我正在考虑改用它来进行运行时验证,这将产生让 Gatekeeper 满意的良好副作用。
但是,Apple 的兴趣与我的兴趣大不相同。他们的重点是让用户满意,所以如果一个应用程序的签名不正确,Mac OS X 会简单地询问用户是否要运行它。我的重点是阻止破解者,所以如果我的应用程序的签名不正确,我根本不希望它做任何对最终用户有用的事情。
所以我希望我的应用程序能够在运行时使用 Apple 的签名验证它自己的可执行文件和资源。
此外,根据我对提供 Mac OS X 进行验证的库的阅读,它们只是对验证可执行文件的请求给出“是”或“否”的答案。令我震惊的是,这很容易以多种方式受到“黑帽”攻击 - 例如,可以简单地用总是说“是的,这是有效的”的工具替换 Apple 的工具,无论是在系统目录中还是通过更改这些工具的搜索路径。所以我认为将完整的签名验证代码集构建到我的应用程序中可能是一个好主意。
所以我有几个问题:
- 哪些 PKI 库/API 可用于让应用验证其自己的可执行文件和已使用 Apple 的协同设计系统签名的资源?
- 这些库有可用的源代码吗?
- 我对使用 Apple 随 Mac OS X 提供的 PKI 库的安全问题是否有效,或者它们是否比我想象的更安全?
- 有没有人愿意分享这种事情的经验?还有其他陷阱或提示吗?
提前感谢您对此的任何帮助。