2011-05-23 93 views
6

到目前为止,我对整体安全考虑事项几乎没有担心,因为我一直在开发促销和不加批判的iPhone应用程序。Cocoa UI和一般框架元素如何被保护免受恶意攻击?

但是,目前我正在研究一个Mac应用程序,这个应用程序需要更多关于此事的讨论,因为它处理敏感的用户信息。

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

因此,我想知道:
安全性如何我的应用程序,只要它是只在框架等元素的NSTextField和核心数据建?

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

回答

6

Objective-C是一种动态语言,这意味着可以在运行时替换类和特定的类方法。例如,这就是1Password插件如何进入Safari,Dropbox发现它进入Finder的方式。目前,恶意攻击者可能会使用低级别的mach_inject API或其他一些稍高级别的方法(如SIMBL或OSAX注入)来将代码加载到您的应用中。一旦将代码加载到您的应用中,Objective-C的动态特性使得理论上可以用攻击者选择的子类或类中的特定方法替换NSTextField,包括监听和存储用户输入。为密码设计的NSTextField的安全版本可能有一些保护措施,尽管我还没有找到具体的文档来说明这种情况。 Security.framework和Keychain API通常对内存中的数据有保护作用,并且它们不基于Objective-C,所以它很难(尽管也许仍有可能)干扰它们。

+0

有一个有趣的(双)插曲的深夜可可在客人讨论“黑客可可”。虽然他们没有完全讨论“安全性”,但是在这个平台上的代码加载工作很有趣:http://itunes.apple.com/us/podcast/late-night-cocoa/id213023580# – 2011-05-26 11:20:00

0

为了增加mgorbach的回答以上(这是非常好的),核心数据可以将数据存储在四种形式:

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

既不的.plist,二进制文件,或SQLite的是安全的。 .plist文件可以很容易阅读。二进制文件会更棘手,但AFAIK它不使用任何加密,任何Objective-C编码器都应该能够轻松地提取其内容。 SQLite也不安全。诸如用于FireFox的SQLite Manager或用于Mac的Base等工具使得读取核心数据SQLite数据变得微不足道。

由于没有核心数据存储方法是安全的,所以最好的选择是在将数据提交到磁盘之前加密数据。

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

如果最终用户启用FileVault(加密其整个主文件夹),启用安全虚拟内存,启用防火墙和强密码,它们可以合理安全地抵御多种攻击。

相关问题