本文主要是介绍iOS安全攻与防(总篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
iOS安全攻与防
- 本地数据攻与防
- https
- UIWebview
- 第三方sdk与xcode
- 反编译与代码混淆
- 越狱与反调试
- 扫描工具fortify
- 常见接口漏洞分析
本地数据攻与防
APP文件下的本地存储Documents、Library/Caches、Tmp
Documents: 保存应⽤运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。
tmp: 保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录。
Library/Caches: 保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据,比如网络数据缓存存储到Caches下。
如下图所示在越狱设备中,完全可以利用iTools等其他工具将这些数据导出。
防止数据泄露建议
1.对于主动存储在app内的重要的、有价值的、涉及隐私的信息需要加密处理,增加攻击者破解难度。
2.对于一些非主动的存储行为如网络缓存,涉及重要信息,做到用完即删。
数据库(sqlite)的安全问题
APP一般运用数据库存储一些数据量比较大,逻辑比较复杂的数据,方便我们使用和增加使用效率。数据库,一般存储在Documents路径下的特殊文件,格式一般为.db或者.sqlite,导出后使用特殊工具即可查看如DB Browser for sqlite 和 SQLiteStudio。
防止攻击者读取数据库的建议:
数据加密:
使用如AES256加密算法对数据进行安全加密后再存入数据库中。
优点:使用简单,无需第三方库支持。
缺点:每次存储都有加密解密过程,增加APP资源消耗。
整库加密:
可使用第三方的SQLite扩展库,对数据库进行整体的加密。如:SQLCipher,git地址
优点:对数据库整体操作,减少资源消耗。
缺点:需要使用第三库。
在创建数据库时,添加如下代码即可:
这时再打开数据库会弹出输入密码窗口,只有输入密码方可打开:
sqlcipher使用demo请参考:数据库sqlite3
KeyChain数据的读取
Keychain是一个拥有有限访问权限的SQLite数据库(AES256加密),可以为多种应用程序或网络服务存储少量的敏感数据(如用户名、密码、加密密钥等)。如保存身份和密码,以提供透明的认证,使得不必每次都提示用户登录。在iPhone上,Keychain所存储的数据在 /private/var/Keychains/keychain-2.db SQLite数据库中。如下图:
当我们打开这个数据库,会发现如下图中四个表:genp、inet、cert、keys
分别对应下图中的前四列,下图表示iOS系统的keychain 存储类型
数据库内数据,大多数是加密的,Keychain的数据库内容使用了设备唯一的硬件密钥进行加密,该硬件密钥无法从设备上导出。因此,存储在Keychain中的数据只能在该台设备上读取,而无法复制到另一台设备上解密后读取。
一旦攻击者能够物理接触到没有设置密码的iOS设备时,他就可以通过越狱该设备,运行如keychain_dumper这样的工具,读取到设备所有的Keychain条目,获取里面存储的明文信息。具体方法是通过ssl让mac连接iPhone,使用keychain_dumper,导出Keychain。具体步骤如下:
将手机越狱,通过Cydia(越狱手机都有,相当于App Store)安装OpenSSH。
在mac终端输入: ssh root@(手机IP) 然后会提示输入密码,默认为alpine
使keychain数据库权限可读:
cd /private/var/Keychains/
chmod +r keychain-2.db下载工具Keychain-Dumper git地址
将下载的keychain_dumper可执行文件移到iPhone的/bin目录下
Ctrl+D,退出当前ssh连接
输入命令:scp /Users/ice/Downloads/Keychain-Dumper-master/keychain_dumper root@(手机ip):/bin/keychain_dumper
添加执行权限: chmod +x /bin/keychain_dumper
解密keychain:/bin/keychain_dumper
最后输出如下图所示的手机应用内所有使用keychain的情况,下图展示的是一个用户存储的WiFi账号和密码。
综上可知,无论以何种方式在手机内存储数据,攻击者总是有办法获取到,只是不同的方式,攻击者获取的难度不一样,从这个角度来说keychain还是比较安全的存储方式,但是还是需要加密隐私信息。这也说明了我们对缓存数据加密的必要性。
剪切板的缓存
我们在
这篇关于iOS安全攻与防(总篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!