6

到目前为止,我对整体安全考虑几乎没有什么顾虑,因为我一直在开发促销和不重要的 iPhone 应用程序。

然而,目前,我正在开发一个 Mac 应用程序,它需要对此事进行更多思考,因为它处理敏感的用户信息。

虽然我知道我必须注意保护物理形式的数据(在磁盘上),例如通过加密它,但我想知道在应用程序的正常使用过程中它驻留在内存中的安全性如何。

因此我想知道:
只要我的应用程序仅基于 NSTextField 和 Core Data 等框架元素构建,它的安全性如何?

Cocoa 输入元素对恶意攻击有多敏感?保护使用 Core Data 存储的已保存数据的最佳方法是什么?

4

2 回答 2

6

Objective-C 是一种动态语言,这意味着可以在运行时替换类和类的特定方法。例如,这就是 1Password 插件如何进入 Safari,而 Dropbox 就是如何进入 Finder 的。当前,恶意攻击者可能会使用低级别的 mach_inject API 或其他一些稍高级别的方法(例如 SIMBL 或 OSAX 注入)将代码加载到您的应用程序中。一旦代码被加载到你的应用程序中,Objective-C 的动态特性使得理论上可以用攻击者选择的子类或类中的特定方法替换 NSTextField,包括监听和存储用户输入。为密码设计的 NSTextField 的安全版本可能对此有一些保护,尽管我没有 t 找到了与此有关的特定文档。Security.framework 和 keychain API 通常确实可以保护您在内存中的数据,并且它们不是基于 Objective-C,因此要干扰它们要困难得多(尽管可能仍然有可能)。

于 2011-05-23T19:49:06.073 回答
0

添加到上面 mgorbach 的答案(非常好),Core Data 可以以四种形式存储数据:

  1. SQLite3 数据库(最常见)
  2. .plist 文件(例如 XML)
  3. 二进制文件
  4. 内存中(非持久存储)

.plist、二进制文件或 SQLite 都不安全。.plist 文件可以轻松阅读。二进制文件会比较棘手,但 AFAIK 它没有使用任何加密,任何 Objective-C 编码器都应该能够轻松提取其内容。SQLite 也不安全。诸如用于 FireFox 的SQLite Manager或用于 Mac 的Base之类的工具使读取 Core Data SQLite 数据变得轻而易举。

由于没有任何 Core Data 存储方法是安全的,因此最好的办法是在将数据提交到磁盘之前对其进行加密。

这没有考虑任何内存攻击。当然,要成功,系统通常必须以某种方式受到损害。

如果最终用户启用了 FileVault(加密他们的整个主文件夹)、启用了安全虚拟内存、打开了防火墙并设置了强密码,那么他们对许多攻击都是相当安全的。

于 2011-05-23T20:19:18.443 回答