到目前为止,我对整体安全方面的考虑很少,因为我一直只开发促销和不加批判的iPhone应用程序。
然而,目前,我正在开发一个Mac应用程序,需要更多关于此事,因为它处理敏感的用户信息。
虽然我知道我必须注意以物理形式(在磁盘上)保护数据,例如通过加密它,我想知道在正常使用应用程序的过程中它驻留在内存中是多么安全
因此我想知道:
只要它仅构建在NSTextField和Core Data等框架元素上,我的应用程序的安全性如何?
Cocoa输入元素对恶意攻击有多敏感?保护使用Core Data存储的已保存数据的最佳方法是什么?
答案 0 :(得分:6)
Objective-C是一种动态语言,这意味着可以在运行时替换类和类的特定方法。例如,这就是1Password插件进入Safari的方式,Dropbox可以在Finder中找到它。目前,恶意攻击者可能会使用低级别的mach_inject API或许多其他略高级别的方法(如SIMBL或OSAX注入)将代码加载到您的应用中。将代码加载到您的应用程序后,Objective-C的动态特性使理论上可以将NSTextField替换为攻击者选择的子类或类中的特定方法,包括侦听和存储用户输入。 NSTextField的安全版本是专为密码设计的,可能会对此有一些保护,但我没有找到相应的特定文档。 Security.framework和keychain API通常会对内存中的数据进行保护,并且它们不基于Objective-C,因此干扰它们会更加困难(尽管可能仍然存在)。
答案 1 :(得分:0)
为了增加mgorbach的答案(非常好),Core Data可以以四种形式存储数据:
.plist,二进制文件或SQLite都不安全。 .plist文件可以轻松读取。二进制文件将更加棘手,但AFAIK它不使用任何加密,任何Objective-C编码器都应该能够轻松提取其内容。 SQLite也不安全。 FireFox的SQLite Manager或Mac的Base等工具使得读取Core Data SQLite数据变得微不足道。
由于没有核心数据存储方法是安全的,最好的办法是在将数据提交到磁盘之前加密数据。
这不考虑任何内存中的攻击。当然,为了取得成功,系统通常必须以某种方式受到损害。
如果最终用户启用了FileVault(加密整个主文件夹),启用了安全虚拟内存,启用了防火墙,并且输入了强密码,那么它们对于许多攻击都是相当安全的。