iOS本地数据存储安全

iOS本地数据存储安全

移动APP通常会在设备本地存储一些数据,这可以为程序执行、更良好地性能或离线访问提供支持。由于移动设备使用地越来越广泛,设备失窃的风险也越来越大,因此不安全的本地数据存储已成为移动APP安全的主要威胁之一。

攻击者可以通过一些方式获取到存储在iOS设备上的敏感信息,主要有以下方法:

  • 恶意程序
    借助iOS系统的安全弱点,攻击者可以设计出一种远程偷取iPhone上文件的恶意程序。

  • 备份
    当iPhone连接至iTunes后,如果iPhone信任了所连接的电脑后,iTunes将自动对设备上的所有数据进行备份。通过备份,敏感数据也将会保存到电脑上。因此,攻击者如果可以接触到那台电脑,则可以通过备份文件读取到敏感信息。

  • 物理接触
    用户iPhone的丢失或被盗非常常见。在这两种情形下,攻击者都将可以物理接触到设备,并读取设备上存储的敏感信息。

在iOS上,移动APP可以将信息输出或存储到以下一个或多个文件中:
* Plist文件
* SQLite数据库文件
* Keychain文件
* 缓存文件
* 日志文件

Plist文件

功能模块介绍

属性列表(Plist,Property List)是一种结构化的二进制格式文件,包含了内嵌键值对的可执行bundle的基本配置信息。Plist文件主要用于存储App的用户设置及配置信息,例如,游戏类App经常会在Plist文件中存储游戏等级和分数信息。一般来说,App会将存储用户数据的Plist文件保存在“[App home目录]/documents/”目录下。Plist文件可以是XML格式或二进制格式。

风险描述

Plist文件主要用于存储用户设置及App的配置信息,但App可能使用Plist文件存储明文的用户名、密码或其它一些个人敏感信息。而保存在Plist文件中的二进制格式文件数据则可以使用Plist文件编辑器(如plutil)进行查看或修改,即使在一个没有越狱的设备上,plist文件也可以通过工具iExplorer获取。对于以编码、未加密或弱加密形式存储的敏感信息就可能会导致敏感信息泄露了。

WordPress的iOS版App曾经就在Plist文件中存储了明文的用户名和密码,如下图所示,后来WordPress紧急修复了它。

图 1.    明文存储用户名及密码

安全方案

1) 尽量不要在iOS设备的Plist文件中保存敏感信息(如证件号、银行卡号、详细住址及其各对应的编码格式等);
2) 对于有些APP功能需求,如果一定需要在iOS设备本地保存敏感信息,则可采用iOS提供的加密接口(如CommonCrypto)进行安全加密后保存。

SQLite存储

功能模块介绍

SQLite是一种自包含、可嵌入、0配置的SQL数据库引擎的跨平台C库文件。它的表、触发器和视图整个数据库都包含在一个硬盘文件中。SQLite数据库提供了所有标准的SQL结构,包括select、insert、update和delete。创建SQLite数据库文件时,可以添加任意文件后缀,也可以不添加后缀,常见的后缀一般有“.sqlitedb”和“.db”。APP一般会将其保存在“[App home目录]/documents/”目录下。由于SQLite的轻便、稳定和小巧,它已成为一个在iOS设备上存储数据的优秀解决方案。

风险描述

信息泄露

iOS自带的SQLite数据库没有内置的加密支持,因此,许多iOS APP会直接以明文格式将许多敏感数据存储在SQLite数据库中,除非APP自身对数据进行加密后再存储。例如,为提供离线的邮件访问功能,Gmail的iOS APP以明文方式将所有邮件存储在SQLite数据库中。一旦可以物理访问到设备或其备份文件,存储在SQLite中未加密的敏感信息容易被泄露。
如下图,某银行APP就将用户的登录手机号、登录密码、手势密码全部都以明文方式存在了客户端本地的SQLite数据库中。

图 2.    SQLite数据库明文存储用户名及密码

数据恢复

除上述提到的信息泄露途径外,SQLite的数据恢复同样也会导致信息泄露。在iOS中,恢复被删除的SQLite数据库记录比恢复被删除的文件更为容易。因为如果删除一条记录,SQLite仅会将该记录标记为已删除,但不会清除它们。只要SQLite数据库文件本身没被删除,数据库中被删除的记录则会一直保留在SQLite文件的未分配空间内,直到新的记录覆盖它们。

攻击者可以使用strings命令打印SQLite数据库文件中数据,这其中就包括了被删除的数据。以下为整个恢复过程的演示。
(1)创建一个名为messages.sqlite的SQLite数据库,并插入测试数据。

这里写图片描述
(2)重新连接数据库,删除几条记录,然

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值