【问题标题】:Separate sandbox for ios cocoa touch static libraryios cocoa touch 静态库的独立沙箱
【发布时间】:2016-11-14 14:48:53
【问题描述】:

我想创建一个静态库来执行一些安全敏感操作。对我来说重要的是,使用我的静态库的其他应用程序无法访问静态库的数据。

实际上,重要的是,我在运行时保存在磁盘和内存中的数据都不能通过主机应用程序访问。所以我的问题是如何为静态库提供单独的沙箱,以便主机应用程序无法访问这些信息。

我知道有一些安全敏感的库有.a 文件,我想知道它们如何为他们的应用程序提供安全性。这是paypal iOS SDK 的链接:

https://github.com/paypal/PayPal-iOS-SDK

更新

根据下面的开发者链接,我们可以在授权文件中使用沙盒密钥来启用沙盒。 它说iOS应用程序默认是沙盒的。 但是 iOS 静态库呢?它们是否也被沙盒化了?如果不是,我们如何进行沙箱处理?

https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/AboutEntitlements.html

更新

在Android OS中开发项目库时,可以在该项目的manifest中定义一个标签,强制Android OS将库代码运行到单独的进程中(顺便说一下宿主进程无法访问运行时库进程的内存)。所以我认为我们也应该在 iOS 上为这种行为提供一个等效的选项。

更新

请注意,即使在运行时,我们也希望针对宿主应用保护数据。通过反射访问 UI 元素的数据是一大问题。假设有人在 Paypal SDK 中输入其卡数据,并且主机可以通过反射访问输入的数据。然后主机应用程序的开发人员可以访问所有卡信息及其身份验证数据并将其用于他们的用途。

【问题讨论】:

  • iOS Security Enclave 有用吗? article, guide
  • 我不明白您的评论,请您详细说明一下吗?
  • iOS Security Enclave 可以为您生成一个安全密钥对,其私有部分永远不会离开 Security Enclave,但我认为这对您的情况有帮助。您可以将您的库包装在一个单独的应用程序中,该应用程序当然会被沙盒化,并使用custom URL scheme 在您的应用程序和库应用程序之间进行通信。
  • 请注意,background execution 存在限制,您可能不得不假装执行一项允许的后台活动。
  • @JoshSanford 我不想做任何后台操作,我只想找到一种方法,当用户按下主机应用程序中的按钮并打开我的库的视图控制器时,主机应用程序无法访问我的库在运行时保存的数据。一种方法是告诉操作系统在单独的操作系统进程(与应用程序主进程分开)中运行我的库数据。

标签: ios security cocoa-touch static-libraries sandbox


【解决方案1】:

库和框架属于托管应用。尤其是一个静态库的代码是包含在app的二进制里面的,没有分离。您也不能为库创建单独的沙箱。

您的静态库可以通过使用对称密钥加密磁盘上的文件来保护其数据。但攻击者可能会从您的库中提取密钥并解密数据。

【讨论】:

  • 那么向第三方开发者共享 .a 文件的 paypal 和其他金融公司如何提供所需的安全性?
  • 我不知道。我认为他们使用经过验证的方法(例如 TSL/HTTPS)与他们的服务器进行通信,并将私有数据放入钥匙串中。我知道他们没有自己的沙箱。链接静态库就像将 .o 文件添加到应用程序。 (注意:您使用名为 ar(1) 的工具创建静态库,archive 的缩写形式)。
  • 请注意,我们要保护主机应用程序的数据。如果我们将数据保存在钥匙串中,主机应用程序也可以访问它 - 当然主要问题不在这里,因为我们可以通过服务器的安全密钥对它们进行加密。主要问题是主机何时可以访问用户在第三个库 UI 中输入的内容。假设有人在 Paypal SDK 中输入其卡数据,并且主机可以通过反射访问输入的数据。
  • 我了解您的用例,但您无法保护数据免受主机应用程序的影响,因为主机应用程序和库之间没有分离。
猜你喜欢
  • 1970-01-01
  • 2019-02-21
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多