移动应用安全测试 概述 移动应用安全测试是确保移动应用安全性的重要环节。本技能提供移动应用安全测试的方法、工具和最佳实践,涵盖Android和iOS平台。 测试范围 1. 应用安全 检查项目: 代码混淆 反编译防护 调试防护 证书绑定 2. 数据安全 检查项目: 数据加密 密钥管理 敏感数据存储 数据传输 3. 认证授权 检查项目: 认证机制 Token管理 生物识别 会话管理 4. 通信安全 检查项目: TLS/SSL配置 证书验证 API安全 中间人攻击防护 Android安全测试 静态分析 使用APKTool:
反编译APK
apktool d app.apk
查看AndroidManifest.xml
cat app/AndroidManifest.xml
查看Smali代码
find app/smali -name "*.smali" 使用Jadx:
反编译APK
jadx -d output app.apk
查看Java源码
find output -name "*.java" 使用MobSF:
启动MobSF
docker run -it -p 8000 :8000 opensecurity/mobsf
上传APK进行分析
访问 http://localhost:8000
动态分析 使用Frida: // Hook函数 Java . perform ( function ( ) { var MainActivity = Java . use ( "com.example.MainActivity" ) ; MainActivity . onCreate . implementation = function ( savedInstanceState ) { console . log ( "[*] onCreate called" ) ; this . onCreate ( savedInstanceState ) ; } ; } ) ; 使用Objection:
启动Objection
objection -g com.example.app explore
Hook函数
android hooking watch class_method com.example.MainActivity.onCreate 使用Burp Suite:
配置代理
Android设置代理指向Burp Suite
安装Burp证书
常见漏洞 硬编码密钥: // 不安全的代码 String apiKey = "1234567890abcdef" ; String password = "admin123" ; 不安全的存储: // SharedPreferences存储敏感数据 SharedPreferences prefs = getSharedPreferences ( "data" , MODE_WORLD_READABLE ) ; prefs . edit ( ) . putString ( "password" , password ) . apply ( ) ; 证书验证绕过: // 不验证证书 TrustManager [ ] trustAllCerts = new TrustManager [ ] { new X509TrustManager ( ) { public X509Certificate [ ] getAcceptedIssuers ( ) { return null ; } public void checkClientTrusted ( X509Certificate [ ] certs , String authType ) { } public void checkServerTrusted ( X509Certificate [ ] certs , String authType ) { } } } ; iOS安全测试 静态分析 使用class-dump:
导出头文件
class-dump app.ipa
查看头文件
find app -name "*.h" 使用Hopper:
使用Hopper反汇编
打开app二进制文件
分析汇编代码
使用otool:
查看Mach-O信息
otool -L app
查看字符串
strings app | grep -i "password|key|secret" 动态分析 使用Frida: // Hook Objective-C方法 var className = ObjC . classes . ViewController ; var method = className [ '- login:password:' ] ; Interceptor . attach ( method . implementation , { onEnter : function ( args ) { console . log ( "[*] Login called" ) ; console . log ( "Username: " + ObjC . Object ( args [ 2 ] ) . toString ( ) ) ; console . log ( "Password: " + ObjC . Object ( args [ 3 ] ) . toString ( ) ) ; } } ) ; 使用Cycript:
附加到进程
cycript -p app
执行命令
[ UIApplication sharedApplication ] 常见漏洞 硬编码密钥: // 不安全的代码 NSString apiKey = @"1234567890abcdef"; NSString password = @"admin123"; 不安全的存储: // Keychain存储不当 NSUserDefaults defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:password forKey:@"password"]; 证书验证绕过: // 不验证证书 - (void)connection:(NSURLConnection )connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; } 工具使用 MobSF
启动MobSF
docker run -it -p 8000 :8000 opensecurity/mobsf
上传应用进行分析
支持Android和iOS
Frida
安装Frida
pip install frida-tools
运行脚本
frida -U -f com.example.app -l script.js Objection
安装Objection
pip install objection
启动Objection
objection -g com.example.app explore Burp Suite 配置代理: 配置Burp Suite监听器 移动设备设置代理 安装Burp证书 拦截和分析流量 测试清单 应用安全 代码混淆检查 反编译防护 调试防护 证书绑定 数据安全 数据加密检查 密钥管理 敏感数据存储 数据传输安全 认证授权 认证机制测试 Token管理 会话管理 生物识别 通信安全 TLS/SSL配置 证书验证 API安全测试 中间人攻击防护 常见安全问题 1. 硬编码密钥 问题: API密钥硬编码 密码硬编码 加密密钥硬编码 修复: 使用密钥管理服务 使用环境变量 使用安全存储 2. 不安全的存储 问题: 明文存储敏感数据 使用不安全的存储方式 数据未加密 修复: 使用加密存储 使用Keychain/Keystore 实施数据加密 3. 证书验证绕过 问题: 不验证SSL证书 接受自签名证书 证书固定未实施 修复: 实施证书固定 验证证书链 使用系统证书存储 4. 调试信息泄露 问题: 日志包含敏感信息 错误信息泄露 调试模式未禁用 修复: 移除调试代码 限制日志输出 生产环境禁用调试 最佳实践 1. 代码安全 实施代码混淆 禁用调试功能 实施反调试保护 使用证书绑定 2. 数据安全 加密敏感数据 使用安全存储 实施密钥管理 限制数据访问 3. 通信安全 使用TLS/SSL 实施证书固定 验证服务器证书 使用安全API 4. 认证安全 实施强认证 安全Token管理 实施会话管理 使用生物识别 注意事项 仅在授权环境中进行测试 遵守法律法规 注意不同平台的差异 保护用户隐私