关于APK包、Android架构等基础知识这里先不做介绍,直接介绍测试项和测试方法。
当前业界对APP的测试还未形成统一的测试标准,OWASP统计了十大移动风险项:
中文解释如下:
总结起来,移动端的安全威胁从三个不同环节进行划分,主要分为客户端威胁、数据传输端威胁和服务端威胁:
根据各层存在的安全风险总结出思维导图,几乎包含了业界的基础测试项:
数据传输层的测试方法和BS测试较为类似,但前提操作是使用Burp Suite抓取手机端的数据包,步骤很简单:
1) 将测试手机和装有BP的PC机置于同一局域网中:
2) 查看PC机IP地址,设置BP的代理如下:192.168.1.100:8080
3)手机端在WLAN中找到高级设置——>手动——>设置代理,输入IP:192.168.1.100和端口:8080
4) 这样手机端的流量走向就是:手机——>Proxy——>BP——>网关——>Internet,如果APP和服务器是经过https传输,在手机浏览器安装证书即可。
1)渗透测试
抓到流量之后,其实和BS系统的渗透就没有区别了,根据经验/checklist表进行依次测试。相对来说APP层面的web防御不会像传统的web项目防御得全面,可以针对容易爆发的漏洞进行测试,如Stored-XSS、未授权访问、信息泄露等等,这是通信层测试的重点。
2)访问控制
将BP中抓取到的URL地址在PC浏览器进行访问,如果可以正常显示,可能也算是一个访问控制问题,需要具体判断这是否算问题。
3)通信保密性
该项包括两个协议:HTTP和HTTPS,严格来说HTTP是不安全协议,容易遭到中间人攻击,若使用了HTTPS,绕过加密证书同样可进行此攻击,方法主要有四种:
a)使用BP自签名证书,被信任则可抓取数据包;
b)用户证书中添加自定义CA:Android 6.0(API Level23)及以下版本默认会信任用户添加的CA,若版本较高则可修改AndroidManifest.xml文件中‘platformBuildVersionCode’属性为23,重新打包。
c)Frida Hook:自定义CA若无法添加,说明应用程序可能使用了某种SSL绑定技术或采用了额外的SSL验证,使用Frida或xposed进行hook绕过,这两项技术不详述,分别可参考:
https://koz.io/using-frida-on-android-without-root/
https://vxposed.com/?from=singlemessage
d)逆向自定义证书的验证代码:应用若使用了自开发的SSL库,而不是直接使用系统库来处理SSL证书,则可通过反编译出java代码进行重构,这部分在后续更新中会详细阐述。