反编译保护测试
漏洞描述:测试客户端安装程序,判断是否能反编译为源代码,java代码是否存在代码混淆等保护措施,是否有对apk进行加壳。未作保护的java代码,可以轻易分析其运行逻辑,并针对代码中的缺陷对客户端或服务器端进行攻击。
修复建议:建议客户端进行加壳处理防止攻击者反编译客户端。
代码混淆防护测试
漏洞描述:查看反编译后的源代码,检测包名,类名是否被混淆成无意义的字符,未作保护的代码,可以轻易分析其运行逻辑,并针对代码中的缺陷对客户端或服务器端进行攻击
修复建议:建议混淆APK程序,包名、类名等都被混淆成无意义的a、b、c字符。
键盘劫持防护测试
漏洞描述:和PC端常见的木马类似,恶意程序可以对用户输入的敏感信息(主要是密码)进行窃听。
修复建议:尽量使用系统自定义的随机软键盘(而非系统输入法)来输入敏感信息。或者对Native层输入记录功能进行Hook。
随机分布软键盘使用测试
漏洞描述:尽量使用系统自定义的随机软键盘(而非系统输入法)来输入敏感信息,不使用随机分布软键盘,用户信息存在窃听风险。
修复建议:尽量使用系统自定义的随机软键盘(而非系统输入法)来输入敏感信息。
屏幕录像测试
漏洞描述:测试通过连续截图,是否可以捕捉到用户密码输入框密码,和输入记录类似,恶意程序可以对用户输入的敏感信息(主要是密码)进行窃听。
修复建议:在敏感信息的输入过程尽量避免视觉反馈,或者在操作系统层面对截屏相关功能进行Hook以阻止敏感信息输入期间其它程序的截屏操作。
安装包签名
漏洞描述:客户端未使用APP从属方证书进行签名,使用了,Debug证书、第三方(如开发方)证书,未使用v1+v2混合签名。
修复建议:客户端使用APP从属方证书进行签名,不要使用,Debug证书、第三方(如开发方)证书。
界面劫持防护测试
漏洞描述:APP应用存在钓鱼劫持风险。客户端是否存在Activity劫持风险。成功的Activity劫持将会替换客户端的启动界面,对用户产生很大的诱骗作用
修复建议:应用程序自身通过获取栈顶activity,判断系统当前运行的程序,一旦发现应用切换(可能被劫持),给予用户提示以防范钓鱼程序的欺诈。
关键数据加密和校验测试
漏洞描述:测试客户端程序提交数据给服务端时,密码、收款人信息等关键字段是否进行了加密,防止恶意用户嗅探到用户数据包中的密码等敏感信息。
修复建议:传输的敏感数据都进行加密处理。
应用权限安全
漏洞描述:被测系统客户端申请过多的高危权限,存在权限滥用的安全风险。 权限管理,一般指根据业务需求设置一组安全规则或者安全策略,用以规定APP可以访问而且只能访问被授权的资源。一个Android客户端程序有高达120多个不同类型的权限。如果不加以控制,客户端程序可以打开设备的任何数据,并可能导致数据被窃取、收发垃圾邮件和下载安装恶意软件等安全风险。具体而言,客户端程序申请过多的高危权限可能存在如下风险:获取敏感信息、消耗资费、控制手机设备、格式化外部存储设备和卸载文件系统等。
修复建议:应审查客户端所申请的权限是否为业务所需要,最小化申请权限。
数据备份配置
漏洞描述:谷歌2010年发布Android 2.2 Froyo系统后,引入一个了系统备份的功能,允许用户备份系统APP和第三方应用的apk安装包和应用数据,以便在刷机或者数据丢失后恢复应用。第三方应用开发者需要在APP的AndroidManifest.xml文件中配置 allowBackup 标志(默认为 true )来设置应用数据是否能能够被备份或恢复。当这个标志被设置为true时应用程序数据可以在手机未获取 ROOT 的情况下通过adb调试工具来备份和恢复。在接触用户手机的情况下攻击者可以在启动手机USB调试功能来窃取那些能够受到AllowBackup漏洞影响的APP数据,造成用户敏感信息泄露甚至财产损失。
修复建议:设置allowBackUp为false
不安全的自定义权限
漏洞描述:Android对一些访问进行限制,APP程序如果想要进行此类访问,则需要申请相应权限。这些权限分为四级,不同级别的权限对应不同的认证方式。
normal:低风险权限,只要申请了就可以使用,安装时不需要用户确认;
dangerous:高风险权限,安装时需要用户的确认才可使用;
signature:只有当申请权限的应用程序的数字签名与申明此权限的应用程序的数字签名相同时,才能将权限授给它; signatureOrSystem:签名相同,或者申请权限的APP为系统应用(在system image中)。
上述四类权限级别同样可用于自定义权限中。如果开发者需要对自己的应用程序进行访问控制,则可以通过在AndroidManifest.xml中添加<permission>标签,将其属性中的protectionLevel设置为上述四类级别中的某一种来实现。 被测系统客户端程序自定义权限的保护级别如果设置不当,或没有显示设置,可能会导致敏感信息泄露。
修复建议:最小化自定义权限
资源文件保护
漏洞描述:
Android中的资源主要分为两大类:
1.可直接访问的资源,
2.无法直接访问的原生资源。
直接访问资源可以使用R.进行访问,保存在res目录下,在编译的时候,会自动生成R.java源索引文件。原生资源存放在assets下,不能使用R类进行访问,只能通过AssetManager以二进制流形式读取资源。 资源文件保护不足,可能导致攻击者对被测系统客户端安装包反编译后,通过资源文件或者关键字符串的ID定位到关键代码位置,最终造成APP易被破解。
修复建议:对asset下的文件,在打包时进行保护,目前有两种方法:一类是对资源文件混淆保护,另一种则是对资源文件加密保护。
动态加载DEX文件
漏洞描述:
Android系统中的DexClassLoader可以在运行时动态加载并解释执行包含在JAR或APK文件内的DEX文件。外部动态加载DEX文件可能存在如下安全风险:
1.Android4.1之前的系统版本容许Android应用将动态加载的DEX文件存储在被其他应用任意读写的目录中,因此不能够保护应用免遭恶意代码的注入;
2.所加载的DEX易被恶意应用所替换或者代码注入,如果没有对外部所加载的DEX文件做完整性校验,应用将会被恶意代码注入,从而执行的是恶意代码。