Android应用安全
1.组件暴露:
像比如ContentProvider,BroadcastReceiver,Activity等组件有android:exported属性;
如果是私有组件 android:exported= “false”;
如果是公有组件 android:exported= “true” 且进行权限控制;
2.Log敏感信息泄漏:
3.权限申请
敏感权限调用
在Manifest文件中调用一些敏感的用户权限,敏感行为包括发送、拦截短信,读取、修改通讯录、通话记录,拨打电话,发送地理位置,使用摄像头,访问浏览器历史记录等。函数调用这些敏感行为,可能导致用户隐私数据泄露,钓鱼扣费等风险。
冗余权限
如果调用了非必须的权限,就会出现冗余权限,冗余权限可导致串谋攻击,串权限攻击的核心思想是程序A有某个特定的执行权限,程序B没有这个权限。但是B可以利用A的权限来执行需要A权限才能完成的功能。
4.代码混淆
Android平台的混淆原理是把代码中原来有具体含义的包名,类名,变量名,方法名等名称全部替换成按顺序排列的无意义的英文字母a、b、c;这样就算反编译出来的代码,也比较难理解;
Android中使用SDK中自带的Proguard工具,添加相应配置即可。
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
但是混淆后可能会造成编译不通过,需要在proguardFiles文件中进行混淆保护:
5.数据加密(对称和非对称加密)
6.应用加固
加固的原理是通过加密原应用的安装包中的dex文件...
7.网络安全
使用Https和ssl证书校验
8.数据存储
- 存储内容不要使用明文
- 代码中禁止硬编码重要信息内容
- 存储到手机内部存储上
- 慎重使用allowBackup属性,设置是否支持备份,默认值为true,如无必要,将值设置为false,避免应用内数据通过备份造成的泄露问题
9.业务漏洞
业务漏洞比如,未登录就允许调用支付等敏感接口,需要后台和app共同校验;