iOS应用安全概要

iOS应用安全概要

安全问题归纳

1.敏感信息泄露

用户名账户、密码;登入Token;密码锁等

问题点

  • 文件存储

    • 威胁
      • NSUserDefaults
      • 未加密的数据库形式
      • APP的数据目录访问权限
    • 审计方法
      • iFunbox等可访问文件系统的工具
      • PlistEdit、SqliteBrowser
    • 解决方案
      • 重要数据存储到Keychain中(iOS钥匙串Keychains安全机制参考:链接
        • Keychain实质上是一个安全的数据库
      • 数据库文件可设置sqlite key进行数据库加密
  • 网络请求

    • 主要考虑中间人攻击的场景
    • 威胁
      • 网络请求中可能包含敏感信息的数据(明文)
    • 审计方法
      • 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信息

Reference

[1] iOS应用审计,王兆威,https://www.ichunqiu.com/course/53965