我创建一个应用程序,登录到远程API没有实现的oauth2或其他类似的机制,我想知道,如果是合理安全的假设,密码将是安全的,如果存储在像应用程序的私有存储共享偏好或SQLite?
将密码存储在 Android/iOS App 自己的存储中是否安全?
OWASP 是一个为应用程序开发人员提供指导的组织,它有一些参考资料:
- 原来的手机十大2012不安全的数据存储的参考- https://www.owasp.org/index.php/Mobile_Top_10_2012-M1
- 更新后的 2014 年移动十大不安全数据存储参考 -- https://www.owasp.org/index.php/Mobile_Top_10_2014-M2
- 一份 iOS 开发者备忘单,它就应用程序的功能任务何时需要存储哪些类型的数据提出具体建议 -- https://www.owasp.org/index.php/IOS_Developer_Cheat_Sheet#Insecure_Data_Storage_.28M1.29
对于 Android,我可能会建议使用安全首选项而不是您建议的共享首选项,或者可能是cwac-prefs。在 Android Security Cookbook 一书中查看这些示例。
在 iOS 上,请务必阅读 iOS 应用程序安全一书,其中建议使用Lockbox将数据存储在 Keychain 中,以及添加和删除凭据的方法。如果您正在构建 iOS 移动应用程序,强烈推荐这本书。
如果您不喜欢或由于某种原因不能使用 Lockbox(或者只是想尝试不同的选项),那么请从这本书中查看这个想法,移动应用程序渗透测试:
利用 Apple 提供的不同选项,正如我们在第 2 章“窥探架构”中的钥匙串数据保护一节中所了解的那样。您还可以利用简单的包装器 PDKeyChainBindingController ( https://github.com/carlbrown/PDKeychainBindingsController ) 之一来保护钥匙串数据。但是,如果设备越狱,则钥匙串信息不安全。建议使用自定义加密技术来加密存储在钥匙串中的字符串。充分利用钥匙串服务 API ( https://developer.apple.com/library/mac/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html )。
本书还涵盖了与钥匙串中的凭证存储相关的另一个问题:
2015 年 6 月 18 日,针对 iOS 和 OS X 概述的密码窃取漏洞,也称为 XARA(跨应用程序资源攻击)破解了越狱和非越狱设备上的钥匙串服务。该漏洞类似于 Web 应用程序中的跨站请求伪造攻击。尽管有 Apple 的隔离保护和 App Store 的安全审查,但仍有可能绕过安全控制机制。它清楚地提供了保护操作系统和应用程序开发人员之间的跨应用程序机制的需要。在 XARA 研究之后一周,Apple 推出了安全更新。更多信息 请访问 http://www.theregister.co.uk/2015/06/17/apple_hosed_boffins_drop_0day_mac_ios_research_blitzkrieg/
并提供有关钥匙串本身的详细信息,如果有人使用越狱设备尝试访问它
iOS 设备中的钥匙串用于安全存储敏感信息,例如凭据,例如用户名、密码、不同应用程序的身份验证令牌等,以及连接(Wi-Fi/VPN)凭据等。它作为加密的 SQLite 数据库文件位于 iOS 设备上,位于 /private/var/Keychains/keychain-2.db
根据 Android 本机文档,提供的答案是错误的
一般来说,我们建议尽量减少询问用户凭据的频率——以使网络钓鱼攻击更加明显,并且不太可能成功。而是使用授权令牌并刷新它。
在可能的情况下,用户名和密码不应存储在设备上。相反,使用用户提供的用户名和密码执行初始身份验证,然后使用短暂的、特定于服务的授权令牌。
它在此处的培训文档中:
https://developer.android.com/training/articles/security-tips#UserData