《2023Android客户端安全测试指南.docx》由会员分享,可在线阅读,更多相关《2023Android客户端安全测试指南.docx(71页珍藏版)》请在优知文库上搜索。
1、AndrOid客户端安全测试指南目录ANDROID客户端安全测试指南1一. 测试环境4二. 安全测试列表42.1 客户端程序安全42.1.1 安装包签名42.1.2 客户端程序保护52.1.3 应用完整性检测72.1.4 组件安全82.1.5 *webview组件安全92.2 敏感信息安全102.2.1 数据文件102.2.2 IOgCat日志122.3 密码软键盘安全性132.3.1 键盘劫持132.3.2 随机布局软键盘142.3.3 屏幕录像142.3.4 *系统底层击键记录152.4 安全策略设置152.4.1 密码复杂度检测152.4.2 帐号登录限制162.4.3 帐户锁定策略16
2、2.4.4 *私密问题验证162.4.5 会话安全设置162.4.6 界面切换保护172.4.7 Ul信息泄漏172.4.8 验证码安全性172.4.9 安全退出182.4.10 密码修改验证182.4.11 Activity界面劫持182.5 手势密码安全性192.5.1 手势密码复杂度192.5.2 手势密码修改和取消202.5.3 手势密码本地信息保存202.5.4 手势密码锁定策略212.5.5 手势密码抗攻击测试222.6 进程保护222.6.1 内存访问和修改222.6.2 *动态注入232.7 通信安全242.7.1 通信加密242.7.2 证书有效性242.7.3 关键数据加密
3、和校验272.7.4 *访问控制272.7.5 客户端更新安全性282.7.6 短信重放攻击282.8 业务功能测试28三. 测试项目风险定级30四. 合规性参考32五. ANDROlD应用分析335.1 APK解包335.2 逆向C1.ASSES.DEX335.2.1 反编译为java代码335.2.2 反编译为SmaIi代码345.3 处理ODEX文件355.4 反编译SO库365.5 处理XMl375.6 打包APK385.6.1 使用apktool打包small彳弋码385.6.2 签名和优化385.7 修改已安装APK405.8 内存获取C1.ASSES.DEX425.8.1 内存转
4、储425.8.2 ZjDrOid工具425.9 ANDRe)IDHOOK框架435.9.1 XposedFramework445.10 集成分析工具445.10.1 APKAnaIyser445.10.2 Eclipse485.10.3 Androiddebugmonitor515.10.4 apk编辑工具525.11 ANT编译源代码535.12 动态调试535.12.1 使用eclipse+ADT535.12.2 使用IDApro545.12.3 andbug调试545.13 ADBSHE1.l命令585.13.1 网络工具(root)585.13.2 进程查看和监视ps/top605.1
5、3.3 系统调用记录Strace615.13.4 事件操作getevent/sendevent615.13.5 截图工具Fbtool635.13.6 用户切换Run-as/su635.13.7 文件列举ISof645.13.8 数据库文件查看sqlite3645.13.9 日志查看Iogcat655.13.10 测试工具MOnkey655.14 ANDRoID彳弋理配置665.15 手机根证书安装685.16 DROZER组件测试工具695.17 ANDROlD代码分析726.1 Android组件功能相关代码726.1.1 Contentprovider72测试环境SDK:JavaJDK,A
6、ndroidSDK,工具:7zip,dex2jar,jd-gui,apktoo1.IDApro(6.1),ApkAnaIyser,Eclipse,dexopt-wrapper,010editor,SQ1.iteStudio,ApkIDEoapk工具:android组件安全测试工具,activity劫持测试工具,android击键记录测试工具,代理工具(proxydroid),MemSpector,HostEditoro-.安全测试列表注:下面的测试项目中标记的为可选测试项,在正式测试中可以不进行测试。2.1 客户端程序安全2.1.1 安装包签名检测客户端是否经过恰当签名(正常情况下应用都应该是
7、签名的,否则无法安装),签名是否符合规范。测试方法:如图,当输出结果为“jar已验证”时,表示签名正常。(下面的警告是因为签名密钥不在本地密钥库中)C:XDocuRentsandSettingsXAdnin1stratorJarsigner-verify,C三DocunentsandSettingsMtdnin1511%口10r、桌面。(11*0i(11)jarsigner-verify-verbose-certs*C:DocuncntsandSettingSAdmin桌面androiddkandsm&ShClIT.apk”sm2269SunJul2421三37三34CST2011reSZdr
8、awablcZand.JpgX.509,1.N.JsgnJC-DK证书的有妓期RiK-10-2上午4:22至16-9-8上午4三22J(CertPath未验证:PathdoesnotchainwithanyofthetrustanchorsSIn1223WedAug1021:58:46CST2011resZdrawabIeZic.app.pngX.509,CN-Andsen.C三DK【证书的有效期期1.8T0-2上午4:22至18-9-8上午4三22J(CertPath未验证:Pathdoesnotchainwithanyofthetrustanchors1威胁等级:若客户端安装包签名有异常(
9、例如签名证书为第三方开发商而不是客户端发布方),此时高风险;若无异常则无风险。2.1.2客户端程序保护1.反编译保护测试客户端安装程序,判断是否能反编译为源代码,java代码和so文件是否存在代码混淆等保护措施。未作保护的java代码,可以轻易分析其运行逻辑,并针对代码中的缺陷对客户端或服务器端进行攻击。测试方法:参考5.Iapk解包,5.2逆向classes.dex,将客户端apk文件中的程序代码导出为Java代码或SmaIi代码;或使用5.10.IAPKAnaIyser,直接打开apk文件。如下图所示,经过混淆保护的代码,其最明显的特征是大部分类和变量名都被替换为简单的abed字母。aam
10、b:RunnabteOa(Runnabfe):aameOnSerwCeCOnneCted(COmpcnertNagI6nr):voidOOnSerYiCODisconnected(CorrponertName):void7)aan0danob:ConteXtoc:1.dyoutInflater d:xjoe三long F:Stringog:Stng客户端程序可以把关键代码以JNl方式放在So库里。SO库中是经过编译的arm汇编代码,可以对其进行加壳保护,以防止逆向分析。参考5.1apk解包,打开apk文件。如果客户端程序使用了JNI技术,在libarmeabi”文件夹下会有相应的SO库文件,如
11、图所示:20C:DocumentsandSelUngsAdministratorOiandroidapkscoJ.50J653634692010-11-1217:34然后在代码中查找是否加载了S。库。例如JaVa代码:StaticSystemJoad1.ibraryCjn1.pin);system.load(H./libjni_pin2.soH)将加载Iibjni_Pin.so和Iibjni_pin2.so,So的导出函数则通过native关键字声明,如图所示:Ilpul)licclassMakeRldPinrcSystem.2ojd1.ibrry(jni-pin);PPUbIiCnative
12、byteHakeRldPin(StcingpacamStcing);publicnAtiveStringUnimplementedstElngFcoiaJNI();P对S。代码的分析,可参考5.4反编译SO库。威胁等级:若客户端进行加壳保护,此时认为无风险。若大部分代码(包括核心代码)经过混淆,此时低风险。若部分代码混淆,关键代码(加密或通信等)可以获知其关键代码,此时中风险。2.1.3 应用完整性检测测试客户端程序是否对自身完整性进行校验。攻击者能够通过反编译的方法在客户端程序中植入自己的木马,客户端程序如果没有自校验机制的话,攻击者可能会通过篡改客户端程序窃取手机用户的隐私信息。测试方法:
13、参考5.10.2Eclipse关于DDMS的文件操作和5.7修改已安装apk。推荐修改apk中assets目录下或res/raw目录下的文件。将修改后的apk文件导入至Jdataapp目录下,覆盖原文件,然后重启客户端,观察客户端是否会提示被篡改。*或在JaVa代码中查找是否包含校验功能。威胁等级:若应用完整性校验不使用MANIFEST.MF中的数据,且核心代码通过JNl技术写入f。库,同时于服务端进行相关校验,此时无风险。若应用完整性于本地进行验证而不存在其他问题或使用MANIFEST.MF中的数据作为验证凭证(有新文件时提示应用完整性验证失败),此时低风险;若在本地进行验证的基础上只通过MANIFEST.MF对客户端原有文件进行校验而忽略新增文件的检验,此时中风险;若未进行应用完整性校验此时高风险。2.1.4 组件安全测试客户端是否包含后台服务、ContentProvider.第三方调用和广播等组件,Intent权限的设置是否安全。应用不同组成部分之间的机密数据传递是否安全。测试方法:检查AndroidManifest.XmI文件中各组件定义标签的安全属性是否设置恰当。如果组件无须跨进程交互,则不应设置expor