一、数据存储安全
主要从以下几个方面考虑
- Sandbox 数据存储
- Keychain 数据存储
- Console Log 数据
- Keyboard 缓存
1. Sandbox 数据存储
(1) Sandbox 文件存储结构
SubDirectory | Description |
---|---|
AppName.app | 存储 app 执行文件和静态资源文件,改文件夹为只读 |
Documents | App的配置文件等,该文件夹的内容会被同步到backup文件中 |
Library | Application support files |
Library/Preference | App specific preferences (plist files) |
Library/Caches | 缓存数据 (cache file and cookie file),该文件夹内的内容不会被同步 |
tmp | Temporary files that do not need to persist across successive launches of the application |
(2)Sandbox 文件导出和查看工具
iFunbox, iTools 等等
(3)Sandbox中存储的文件,主要有以下几种类型
a. Plist files
查看工具: Xcode(Mac),plistEditor(windows)
测试点:
- 文件中是否存储敏感信息,敏感信息是否加密
- 文件是否会被备份,备份泄露是否有风险
- 文件能否被用于跨过客户端的逻辑校验(如某个存储文件的内容是客户端用于判断用户是否登陆,测试将该文件导出,拷贝至其他设备,查看能否越过登陆校验)
b. sqlite
查看工具: sqlite manager
测试点:
- 文件中是否存储敏感信息,敏感信息是否加密
- 文件是否会被备份,备份泄露是否有风险
c. Cookie
查看工具:
BinaryCookieReader.py (用法: 将cookie文件导出到PC端,python BinaryCookieReader.py [cookies.binarycookies-file-path])
测试点:
- 查看Cookie是否长期有效(有效期不能短于登录cookie的有效期,SC为10小时)
- 敏感信息重点关注“登陆信息、用户身份信息、服务器SQL注入链接、管理员登陆账号密码”一类信息
2. keychain数据存储
(1)什么是keychain
Keychain is an encrypted container (128 bit AES algorithm) and a centralized Sqlite database that holds identities & passwords for multiple applications and network services, with restricted access rights. 虽然keychain的访问有权限控制,但是,在越狱的设备上,是可以查看到所有的keychain存储数据。所以在使用Keychain存储用户敏感信息(如 access_token, password等)时,最好还是要加密。
(2)怎么产看keychain中存储的数据
查看前提:
使用越狱的设备
- 将keychain_dumper文件通过iFunbox 拷贝到设备上
- ssh连接到设备
- chmod 777 keychain_dumper
- ./keychain_dumper
(3)怎么测试
- keychain中是否存储敏感信息,敏感信息是否加密
3. Console Log 数据
查看Log工具:
Xcode 或者 iPhone Configuration Utility
测试点:
- 程序是否将敏感信息打印出来
- 将设备连接PC机,通过Xcode或者 iPhone Configuration Utility查看device log
- 操作App,执行相关的功能,查看log中是否包含用户敏感信息
4. Keyboard cache
二、 数据通信安全
测试工具:
BurpSuite 安装和使用请参见http://docs.alibaba-inc.com:8090/pages/viewpage.action?pageId=238326793
测试步骤:
- 设备设置代理为BurpSuite代理
- 操作App,产生通信请求数据
- 在BurpSuite代理上查看所有的请求数据,用户敏感信息应该要用HTTPS 请求传送,并且不能够出现在URL中
三、 URL protocol handler / IPC
由于iOS sandbox的权限限制,进程间的数据通信是通过protocol的形式来实现的,实现Protocol的2个API方法为:application:openURL和application:handleOpenURL
测试点:
- openURL的方法实现中有没有对传入的URL参数做校验
- openURL有没有校验URL来源是否安全
四、 UIWebView
UIWebView是基于Webkit,和Safari和MobileSafari是使用同一个core framework的,所以App中的UIWebview 和浏览器一样,有可能存在XSS(Cross-Site Scripting)的风险.
测试点:
- 展示的UIWebView的内容是否存在用户输入的部分,如有,是否可以通过修改输入注入javascript脚本
- 展示的内容是否可能被攻击者篡改,返回含有注入脚本的内容。