应用审计指南
一. 概述
1.1 前言
提高安全测试的效率,配合业务方自查。在开发以及 QA 阶段就消除常见的安全 问题,提高安全审计的效率。
1.2 适用范围和对象
本文档用于 iOS 客户端的日常审计参考,提升安全审计的效率。
二. iOS APP 通用审计方法
2.1 静态检测
静态检测主要是指通过扫描工具对 IPA 文件进行静态扫描和检查,尽快发现可 能存在的安全隐患。
2.1.1 配置文件完整性
检测 Info.plist 和 embedded.mobileprovision 等配置文件中的关键项,判断 各项是否存在配置错误,缺失等。
测试点:
① 各项配置信息 人工审计,或通过静态审计工具获取配置文件的完整性信息,进 行核对。
2.1.2 二进制文件的安全性
检测二进制文件中的基本安全保护机制是否开启。
测试点:
① 是否开启 PIE ② 是否开启 ARC ③ 是否开启 Stack Canary
2.1.3 存在安全隐患的函数
检测 iOS APP 是否用到了存在安全隐患的函数
测试点:
① 纯 C 运行时库函数:如 gets,strcpy,vsprintf,memcpy 等。 ② 弱伪随机数生成函数:如 srand,random,arc4random 等。 ③ 弱哈希函数:CC_MD5,CC_MD4,CC_MD2 等。 ④ 弱加密算法:Rc4
测试方法: 通过静态检测工具或命令行工具,直接在二进制文件中搜索以上危险函数。
2.1.4 检测 URL
检测 iOS APP 中硬编码的所有 URL,检测其是否包含恶意或敏感信息。
测试方法: 通过静态检测工具或脚本,遍历出当前 APP 包含的所有 URL,查看 UR 中是否有 例如 password 等敏感字段。
2.1.5 第三方 SDK
检测第三方 SDK 是否存在安全隐患
测试方法:
① 通过获取第三方 SDK 的版本等信息,结合当前已经存在的一些 SDK 的漏 洞,检测当前版本是否是有风险有漏洞的。
2.1.6 敏感数据
检测敏感数据,包括但不限于 IPA 配置文件,IPA 中非必要的文本文件等是否 有敏感信息。
测试方法:
② 通过解压 IPA 文件,查看 Info.plist,以及是否有一些涉及敏感信息 的 txt 等文本文件内容。
2.1.7 冗余代码检测
检测方法:
③ 检测当前代码中存在的但是没有被使用的类和函数。
2.1.8 恶意软件
检测 IPA 文件中是否有被恶意软件或恶意 SDK 感染的风险。
检测点:
④ xcodeGhost ⑤ 有米 SDK 检测方法: ⑥ 通过静态扫描工具或以上恶意软件的标志,来判断是否感染病毒。
2.1.9 私有 api
检测当前 APP 中是否调用了苹果官方不允许使用的私有 api。
检测方法: ⑦ 人工审计或通过私有 api 的检测工具来进行。
2.2 动态检测
动态检测指 iOS APP 在运行时可能会存在某些安全隐患,弥补了静态审计的不 足,需要测试人员将 APP 安装在测试机上,进行常规操作后对产生的数据进行 分析,发现可能存在的更深层次的安全问题。
2.2.1 应用日志
检测 iOS APP 在运行时有无包含敏感信息的日志输出。
检测方法: ⑧ 通过 Mac 自带的控制台。 ⑨ xcode 自带的日志打印、 ⑩ 手机本地安装 syslog 日志收集工具。
2.2.2 网络请求
检测 APP 在网络请求中是否涉及到敏感未加密的参数以及一些常见的 web 漏 洞。
检测项:
11 OWASP TOP10 漏洞 12 敏感明文信息或敏感的弱加密信息
检测方法:
13 通过 Charles 等工具抓包,(有证书检测的,需要安装 ssl-kill-switch 插件),或通过动态审计工具拦截 APP 所有网络请求,检测是否有未加密的敏感 字段。 14 在用户登录、找回密码、注册等处,通过拦截修改返回包,检测其有无常见的逻辑漏洞。 15 通过在 web 请求页面输入文本的地方,通过构造 xss 代码,检测其是否 有 xss 漏洞。 16 通过抓包修改,构建 SQL 注入指令,来检测是否有 SQL 注入漏洞。 17 结合当前网络请求的签名验证情况,修改其网络请求参数,查看其是否 有越权漏洞。
2.2.3 后台快照
检测是否存在后台快照泄露敏感信息的情况。
检测方法:
18 在沙盒路径”Library/caches/snapshots”下,存放着当前 APP 切换进 程时当前界面的截图。在包含敏感信息界面切换后台,查看其保存的敏感截图。
2.2.4 数据存储
检测 APP 存储的敏感信息,例如沙盒目录、keychain 下面等。
检测方法:
19 在路径”/private/var/mobile/containers/data/application”下,存放当前所有 APP 的沙盒文件,在沙盒文件中,主要查看 Document 和 Library 目录下是否存 放一些含有敏感数据的 web 缓存、数据库文件,以及 plist 文件。
20 通过工具 keychain dump,可以把 keychain 中的数据 dump 下来,用来 检测是否在 keychain 中明文存储了密码账号等敏感信息。
21 检测沙盒文件中可以的敏感字段是否用到通用加密算法,以及秘钥是否 硬编码。
2.2.5 数据加密算法
主要检测涉及敏感信息的加密算法的安全性。
检测方法:
① 通过抓包等方法,找到加密参数,然后通过逆向分析等方法,检测是否 为弱加密算法。 ② 通过逆向分析等方法,检测其加密算法是否有硬编码秘钥的风险。
2.2.6 WebView&JS
原生代码通过注册接口提供 web 界面中的 js 调用,调用者可能存在问题。
检测方法:
③ 检测其 webview 是否有涉及敏感信息的接口,如发送短信、获取定位、 付款等。 ④ webview 加载第三方内容时,检测其是否对 native 接口的合法性做校 验。
2.2.7 权限绕过
APP 登录弱验证的问题 ,如果登录的基础采用读取沙盒内的问题件,就会在登 录等功能上有安全风险。
检测方法:
⑤ 通过文件查找的软件(pp 助手等),将 APP 的沙盒文件直接移植到另 一个手机上,查看其是否会自动登录,以此来检验 APP 是否设置合理的检验登录 标志。
2.2.8 旧数据未清除
用户登录 APP 后未清除旧数据,导致 APP 卸载,重新下载后还能继续保持登录 状态。
检测方法:
⑥ 登录 APP,然后直接卸载。 ⑦ 重新安装 APP,如果还能自动登录 APP,就存在安全隐患。 ⑧ keychain 中的密码等信息未清除,假设 APP 有手势密码等功能,用上 述方法,可直接读取手势密码进行登录。
2.2.9 功能性安全问题
APP 中如果有扫描二维码等功能,假设没有对特殊二维码做处理,就可能导致 扫描了畸形二维码而发生拒绝服务。
检测方法:
⑨ 扫描畸形或恶意构造的二维码,看是否做了处理。
2.2.10 解压缩问题
APP 中如果有对 rar、zip 等文件的解压缩功能,若未对特殊压缩包做校验,可 导致构造恶意压缩包直接覆盖本地文件。
检测方法:
⑩ 抓包,若发现请求中有下载 zip 等压缩文件,可直接构造恶意压缩包, 在指定路径直接覆盖原文件。
2.2.11 解析 word 字体
APP 中如果有对 word、pdf 等文档的解析功能,若开发人员未对要解析的文件 进行解析校验,可导致恶意文档文件执行的问题。
检测方法:
11 分析 APP,构造恶意的文档文件,看 APP 打开时是否出错。
三. 常见逆向工具使用
3.1 frida
是一款轻量级的 hook 框架,除了 frida 本身,还包含 frida-ps,frida-trace 等工具。
frida-ps 用来查看当前 pid 以及进程名
frida-trace 用来动态 hook 指定的类,打印函数调用栈。
frida 可以用来加载 js 脚本,hook 指定的类和方法,打印目标参数以及寄存器 里的值。
Frida-dump 可以在运行时 dump 解密后的内存,一般用来砸壳。 先在 Mac 上做端口转发
手机解锁,pc 端直接通过指令“dump.py <进程名>” ,进行脱壳
3.2 Cycript
可以打印当前 APP 的沙盒路径,UI 层级,动态修改 UI 界面等。
四. CheckList
4.1 静态检测项
1) 文件完整性
① 配置项缺失 ② 配置项错误
2) 二进制文件安全性
① 是否开启 PIE ② 是否开启 Stack Canary ③ 是否开启 ARC
3) 危险函数
① 危险的纯 C 运行时库函数 ② 弱伪随机数生成函数 ③ 弱加密函数 ④ 弱哈希函数
4) URL 检测
① URL 包含敏感信息 ② 恶意 URL
5) 第三方 SDK
① 第三方 SDK 是否存在安全问题 ② 是否有更新版本
6) 敏感数据检测
① 是否包含常量敏感字符串 ② 是否包含敏感类
7) 冗余代码检测
① 冗余类和函数
8) IPA 包文件检测
① 是否包含非必要的文本文件
9) 恶意软件感染
① 是否感染 xcodeGhost ② 是否包含恶意 SDK
10) 私有 api 调用
① 是否存在私有 api 调用
4.2 动态检测项
11) 日志输出
① 日志文件是否包含敏感信息
12) 网络请求
① 是否全部使用 https ② 是否做双向证书校验 ③ 网络请求中是否包含敏感未加密数据 ④ 是否含有 OWASP TOP10 漏洞
13) 后台快照
① 敏感页面是否做了处理
14) 数据存储
① 沙盒文件是否具有包含敏感信息的 db。Plist,web 缓存文件 ② keychain 有无明文存储敏感信息
最后更新于