iOS安全攻与防(总篇)

iOS安全攻与防

  • 本地数据攻与防
  • https
  • UIWebview
  • 第三方sdk与xcode
  • 反编译与代码混淆
  • 越狱与反调试
  • 扫描工具fortify
  • 常见接口漏洞分析

本地数据攻与防

APP文件下的本地存储Documents、Library/Caches、Tmp
  • Documents: 保存应⽤运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。

  • tmp: 保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录。

  • Library/Caches: 保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据,比如网络数据缓存存储到Caches下。

如下图所示在越狱设备中,完全可以利用iTools等其他工具将这些数据导出。

图片1

防止数据泄露建议

1.对于主动存储在app内的重要的、有价值的、涉及隐私的信息需要加密处理,增加攻击者破解难度。

2.对于一些非主动的存储行为如网络缓存,涉及重要信息,做到用完即删。

数据库(sqlite)的安全问题

APP一般运用数据库存储一些数据量比较大,逻辑比较复杂的数据,方便我们使用和增加使用效率。数据库,一般存储在Documents路径下的特殊文件,格式一般为.db或者.sqlite,导出后使用特殊工具即可查看如DB Browser for sqlite 和 SQLiteStudio。

防止攻击者读取数据库的建议:

数据加密:
使用如AES256加密算法对数据进行安全加密后再存入数据库中。

优点:使用简单,无需第三方库支持。

缺点:每次存储都有加密解密过程,增加APP资源消耗。

整库加密:
可使用第三方的SQLite扩展库,对数据库进行整体的加密。如:SQLCipher,git地址

优点:对数据库整体操作,减少资源消耗。
缺点:需要使用第三库。

在创建数据库时,添加如下代码即可:

图片2

这时再打开数据库会弹出输入密码窗口,只有输入密码方可打开:

图片3

sqlcipher使用demo请参考:数据库sqlite3

KeyChain数据的读取

Keychain是一个拥有有限访问权限的SQLite数据库(AES256加密),可以为多种应用程序或网络服务存储少量的敏感数据(如用户名、密码、加密密钥等)。如保存身份和密码,以提供透明的认证,使得不必每次都提示用户登录。在iPhone上,Keychain所存储的数据在 /private/var/Keychains/keychain-2.db SQLite数据库中。如下图:

图片4

当我们打开这个数据库,会发现如下图中四个表:genp、inet、cert、keys

图片5

分别对应下图中的前四列,下图表示iOS系统的keychain 存储类型

图片6

数据库内数据,大多数是加密的,Keychain的数据库内容使用了设备唯一的硬件密钥进行加密,该硬件密钥无法从设备上导出。因此,存储在Keychain中的数据只能在该台设备上读取,而无法复制到另一台设备上解密后读取。

图片7

一旦攻击者能够物理接触到没有设置密码的iOS设备时,他就可以通过越狱该设备,运行如keychain_dumper这样的工具,读取到设备所有的Keychain条目,获取里面存储的明文信息。具体方法是通过ssl让mac连接iPhone,使用keychain_dumper,导出Keychain。具体步骤如下:

  1. 将手机越狱,通过Cydia(越狱手机都有,相当于App Store)安装OpenSSH。

  2. 在mac终端输入: ssh root@(手机IP) 然后会提示输入密码,默认为alpine

  3. 使keychain数据库权限可读:
    cd /private/var/Keychains/
    chmod +r keychain-2.db

  4. 下载工具Keychain-Dumper git地址

  5. 将下载的keychain_dumper可执行文件移到iPhone的/bin目录下

    • Ctrl+D,退出当前ssh连接

    • 输入命令:scp /Users/ice/Downloads/Keychain-Dumper-master/keychain_dumper root@(手机ip):/bin/keychain_dumper

  6. 添加执行权限: chmod +x /bin/keychain_dumper

  7. 解密keychain:/bin/keychain_dumper

最后输出如下图所示的手机应用内所有使用keychain的情况,下图展示的是一个用户存储的WiFi账号和密码。

图片8

综上可知,无论以何种方式在手机内存储数据,攻击者总是有办法获取到,只是不同的方式,攻击者获取的难度不一样,从这个角度来说keychain还是比较安全的存储方式,但是还是需要加密隐私信息。这也说明了我们对缓存数据加密的必要性。

剪切板的缓存

我们在

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值