前言
金融类APP的测试始终是一项挑战,尤其是在Android应用的防护策略日益完善,加壳和加固机制多样化的背景下,这种情况更突显了iOS APP测试的重要性。本文将以作者对金融类iOS App的一次渗透测试实践为基础,分享一些iOS App安全测试的方法和经验。
测试工具:越狱iPhone Frida BurpSuite Mitmproxy
绕过越狱检测
通过App Store安装APP,运行APP发现提示处于越狱状态并闪退。
这里有两个解决思路:
- 屏蔽越狱插件 or frida hook写绕过越狱脚本
- 通过AppstorePlus下载低版本APP程序
这里通过两种方式结合,下载安装安装低版本APP并加载屏蔽越狱插件成功运行该APP。
绕过证书固定
运行APP,设置BurpSuite代理发现抓不到包。
尝试启用SSL Kill Switch 2 插件以绕过该APP的证书固定。
重新点击运行APP并点击功能,通过设置代理成功抓到数据包。
追踪加解密函数
多次请求数据包发现请求和响应均为乱码,考虑传输数据包进行了加密。
解决思路:
- 砸壳,反编译源二进制程序,查找分析发包/加密函数
- frida-trace跟踪 sm2/sm3/sm4/aes/rsa等含有加密关键字的函数
这里使用了frida-trace跟踪,通过多次点击功能按钮确认使用了AES加密
frida-trace -UF -m "*[* *aes*:*]"
编写frida-trace脚本
打印参数值以获得其AES加密的key和iv
复制BurpSuite中数据包的HEX数据使用该key和iv进行解密尝试。
成功解密出明文数据。
Mitmproxy+BurpSuite 交互式数据传输
由于请求包与响应包均为加密数据包,使用Mitmproxy编写脚本,以方便BurpSuite进行测试。
Mitmproxy脚本调试通过后,即可结合BurpSuite进行双向加解密。
IPhone 设置代理7070端口
mitmdump -p 7070 -s up.py --mode upstream:http://127.0.0.1:8080 -k --ssl-insecure --no-http2
mitmdump -p 9090 -s down.py -k --ssl-insecure
BurpSuite监听8080端口,设置上游代理为9090端口
成功实现请求响应均为明文数据,可进行常规测试。
出洞
最后就是猎杀的时刻~