Tag: Owasp

适用于iOS的OWASP:M1-平台使用不正确,第1部分

此故事描述了iOS开发人员如何应对OWASP Mobile Top 10 2016中的M1类别漏洞。该类别涵盖了平台功能的滥用或平台安全控件的使用失败。 在第1部分中,我们将介绍Apple提供的加密工具以及iOS的其他一些与隐私相关的功能。 文件数据保护 Secure Enclave — A7和更高版本处理器中的协处理器,使用加密的内存和硬件随机数生成器为数据保护密钥管理和Touch ID提供加密操作。 UID —唯一标识符,融合到处理器和Secure Enclave中的AES 256位密钥,对于每个设备都是唯一的。 允许将数据绑定到设备。 文件系统上的所有文件均受数据保护技术保护(可用于文件和数据库API,包括NSFileManager,CoreData,NSData和SQLite): 每次在数据分区上创建文件时,Data Protection都会创建一个新的256位密钥(“每个文件”密钥),并将其提供给硬件AES引擎以对该文件进行加密。 每个文件密钥都用几个Data Protection类密钥之一包装(在Secure Enclave中),并与数据保护类的表示法一起存储在文件的元数据中。 所有文件的元数据都使用文件系统密钥加密,该文件系统密钥是在首次安装iOS或用户擦除设备后创建的。 删除此密钥,用户可以使所有文件不可解密。 数据保护类密钥受UID保护,对于某些类,还受用户密码保护 文件密钥永远不会暴露给处理器。 它们仅在跨系统运行时才用AES引擎和Secure Enclave已知的临时密钥包装。 应在项目设置(包括在权利中)中启用“文件数据保护”,但是默认情况下,对于所有应用程序,所有数据都会被加密,直到首次解锁。 钥匙串数据保护 iOS钥匙串 -存储在文件系统上的SQLite数据库,用于处理密码和其他简短但敏感的数据位。 securityd守护程序根据其“ keychain-access-groups”,“ application-identifier”和“ application-group”权利来确定每个应用程序可以访问哪些钥匙串项目。 从iOS9开始,钥匙串密码数据一直保存在Secure Enclave中(在iPhone 5S和更高版本上)。 钥匙串中有五组项目:通用密码,Internet密码,身份,证书和密钥。 除其他字段外,每个钥匙串项目均包含: 钥匙串组访问(kSecAttrAccessGroup) –允许开发人员的应用访问设备上共享的钥匙串项目; 应用程序必须共享可以在权利中设置的相同捆绑包种子ID。 数据保护等级 (kSecAttrAccessible)   —下一节将详细介绍。 iCloud钥匙串(kSecAttrSynchronizable)-允许用户在iOS设备和Mac计算机之间安全地同步其钥匙串项目,而无需将该信息暴露给Apple。 默认情况下,第三方应用添加的钥匙串项目不会同步。 该值应与兼容的数据保护类一起使用(一个不带… ThisDeviceOnly后缀)。 管理元数据,例如创建和上次更新的时间戳,版本号,使用保护类密钥包装的每个项目密钥, SHA-1散列的属性(例如帐户和服务器名称)用于查询项目而不解密每个项目 […]

适用于iOS的OWASP:M1-平台使用不正确,第2部分

此故事描述了iOS开发人员如何应对OWASP Mobile Top 10 2016中的M1类别漏洞。该类别涵盖了平台功能的滥用或平台安全控件的使用失败。 在第2部分中,我们将介绍其他iOS功能,这些功能可能会错误地破坏应用程序的安全性。 缓存的应用程序快照 从iOS 7开始,系统会在您的应用程序进入后台时获取并缓存用户界面的屏幕截图。 屏幕截图以.ktx(iOS9)或.png(iOS10)格式存储在Library / Caches目录中(该目录未通过iTunes或iCloud备份): (App Folder)/Library/Caches/Snapshots/com.bundle.id.of.your.app/ 接口快照映像可以包含敏感数据。 为避免泄漏,请使用图像视图覆盖它,清除文本字段,隐藏标签等。使用applicationWillResignActive(_:) to hide information并使用applicationDidBecomeActive(_:) to restore original view 。 今日扩展缓存(仅适用于iOS10) 如果您的应用程序具有“今天”扩展名,则它将在/private/var/mobile/Containers/Data/PluginKitPlugin/具有UUID命名的目录 与应用程序的快照不同,Today扩展通过在/Library/Caches/com.bundle.id.of.your.app.with.widget.suffix/Cache.db缓存最后一个相关数据来保留其状态。 自动更正和安全的UITextField UITextField符合UITextInputTraits协议,该协议具有以下属性: var autocorrectionType: UITextAutocorrectionType文本对象是否跟踪未知单词并向用户建议更合适的替换候选对象。 为了学习新单词,来自具有自动更正功能的文本对象的所有文本都缓存在路径/User/Library/Keyboard/dynamic-text.dat中 var isSecureTextEntry: Bool判断文本对象是否应禁用文本复制,隐藏正在输入的文本并防止文本被缓存。 为了防止将诸如用户名和密码之类的敏感信息存储在dynamic-text.dat中,如果文本不可见,则将UITextFields设置为isSecureTextEntry状态,如果文本可见,则将autocorrectionType关闭。 副作用是,iOS尝试自动更正其名称不会使您的用户感到困惑。 相信我,那真的很痛。 粘贴板 在某些情况下,用户不希望在应用程序外部访问复制到粘贴板的文本。 iOS10和macOS Sierra甚至可以通过“ 通用剪贴板传递”功能彼此共享剪贴板的内容,这可能会将用户数据泄漏到(可能是受到破坏的)设备。 UIPasteboard类允许创建应用内粘贴板。 要从Handoff中排除纸板,请使用localOnly选项调用setItems(_:options:)方法。 网络缓存策略 通过URLSession加载的任何HTTP和HTTPS请求都将由URLCache处理,后者提供内存和磁盘缓存机制。 缓存数据库存储在Library / Caches目录中(该目录未通过iTunes或iCloud备份): (App Folder)/Library/Caches/com.bundle.id.of.your.app/Cache.db URLRequest实例通过将缓存策略设置为NSURLRequest.CachePolicy值之一来指定如何使用本地缓存: useProtocolCachePolicy-默认 […]