iOS应用安全概要
iOS应用安全概要
安全问题归纳
1.敏感信息泄露
用户名账户、密码;登入Token;密码锁等
问题点
文件存储
- 威胁
- NSUserDefaults
- 未加密的数据库形式
- APP的数据目录访问权限
- 审计方法
- iFunbox等可访问文件系统的工具
- PlistEdit、SqliteBrowser
- 解决方案
- 重要数据存储到Keychain中(iOS钥匙串Keychains安全机制参考:链接)
- Keychain实质上是一个安全的数据库
- 数据库文件可设置sqlite key进行数据库加密
- 重要数据存储到Keychain中(iOS钥匙串Keychains安全机制参考:链接)
- 威胁
网络请求
- 主要考虑中间人攻击的场景
- 威胁
- 网络请求中可能包含敏感信息的数据(明文)
- 审计方法
- BurpSuite、Charles,观察APP网络请求
- 解救方案
- 禁止明文传输敏感数据,Hash加密
- 重要数据HTTPS传输
日志输出
- 威胁
- 一般不会有太大问题,但使用NSLog或第三方库Log中可能打印调试信息,日志中输出敏感数据或函数调用流程等,从而辅助了攻击者进行应用程序逆向,造成危害
- 审计方法
- idevicesyslog from libimobiledevice
- 解决方案
- 使用宏来控制开发版本和发布版本的日志输出
- 威胁
后台快照
APP被切换至后台时会保存当前界面的快照,若界面上包含敏感信息,可导致数据泄露
审计方法
- Library/Caches/snapshots中的快照图片
解决方案
- 程序别切换至后台时,通过UIApplicationDelegate进行处理
- TODO,模糊化处理; e.g. signal
2.数据加密
问题点
- 加密算法
- 威胁
- 加密算法自身安全性问题(自定义的简单加密算法或RC4)
- 审计方法
- 对APP进行逆向,分析对加密功能的类或方法的调用流程等
- 解决方案
- 尽量避免使用自定义的加密算法
- 使用AES、DES等算法 ?TODO存疑,iOS最流行使用什么?
- 使用非对称加密,但不能一概而论TODO
- 威胁
- 算法关键数据
- 威胁
- 算法KEY生成或存储方式不当,可逆向获取
- 对称加密的KEY硬编码与程序中。可能会造成横向越权。
- 审计方法
- 逆向分析、审计本地文件是否存放相关数据
- 解决方法
- 以设备相关的信息作为基础(保证鉴权和独一)生成KEY。e.g. IDFV TODO 链接
- 威胁
3.网络交互
中间人攻击
问题点
HTTP&HTTPS
- 敏感信息HTTP传输,存在MITM风险
- HTTPS传输,但在APP中未进行服务器证书校验,同样可能存在MITM风险
审计方法
- Burpsuite,Charles
解决方案
- 使用HTTPS时,客户端必须进行服务端证书校验
- 在无法使用HTTPS传输吗,只能使用HTTP的情况下,HTTP要避免明文加密,在必要的情况下使用非对称加密
web View & JavaScript
通过JS调用APP的原生接口
来源
- UIWebView & WKWebView & WebViewJavascriptBridge
威胁
- WebView注册获取信息(GPS)的接口,恶意网页通过JS调用获取信息
- WebView注册的Native接口实现有缺陷,调用恶意JS代码导致APP崩溃
审计方法
- 逆向APP,分析相关的类方法调用,测试注册的接口
解决方案
- 使用Safari来打开链接
- 尽量不要为JS注册获取敏感信息的接口
- 使用WebView加载页面并设计JS调用时,对调用的接口进行检查,设置调用的黑/白名单
4.第三方库
第三方库存在的安全隐患。TODO去看一些存在问题的第三方库的报告。
AFNetworking
低于2.5.3版本存在安全隐患
通过加载dylib对AFNetworking进行测试
FFmpeg
- 低于2.8.5版本存在文件读取漏洞
解决方案
- 实施更新第三方库
- 或者实施跟进修补方案
5.Bug
拒绝服务
- 扫描畸形二维码,导致APP崩溃
功能逻辑
- APP原有旧数据存储于Keychain,卸载后未完全清除,重新安装后直接登入成功,绕过了登入
安全审计辅助工具
工具实现
- Hook关键点 TODO学习HOOK概念,iOSHOOK技术,对比Android HOOK技术
- NSData
- NSFileManager
- 经常用于存储临时数据
- 拦截所有的文件读写,判断是否有敏感数据
- sqlite3
- NSUserDefaults
- CCHmac, CCHash
- CCCrypt
- 明文
- 使用的算法
- iv
- Key
- 结合以上进行重要数据流程判别
- …
- 记录相关数据
- 敏感数据检查
- 比如对JSON文件
- 网络请求中大量存在JSON数据,可以进行拦截检查
- e.g. cookie信息
- 比如对JSON文件
Reference
[1] iOS应用审计,王兆威,https://www.ichunqiu.com/course/53965