android应用面临的安全问题
1,病毒:一些恶意软件
2,关键信息泄露:虽然java代码可以做混淆,但是安卓的四大组件是依赖注入的方式,因此不能被混淆,而目前常用的一些反编译工具比如apktool能毫不费劲的还原java里的明文信息,native里的库信息也可以通过objdump或IDA获取,因此一旦Java或者native里存在敏感信息,基本上毫无安全可言。
3,app重打包:即通过反编译后重新加入恶意代码逻辑,重新打包一个apk文件。
4,进程被劫持:一般通过进程注入或者调试的方式来hook进程,改变程序运行的逻辑和顺序,从而获取程序运行的内存信息。hook需要获取root权限,或者跟被hook进程相同的权限,如果手机没有被root,被劫持的可能性还是比较小。
5,数据在传输过程遭劫持:一般来说是由于数据明文传输或者没使用https。
6,Webview漏洞:一般由于js注入
解决方法:
1,应用程序权限控制,通过控制应用程序的权限防止恶意应用对系统造成的破坏,采取的措施包括合理使用系统内置权限和应用程序自定义权限。
2,应用程序签名,才用数字签名为应用程序签名
3,应用加固,应用加固包括病毒扫描,放注入,防调试,防簨改四个模块。
4,静态代码分析,通过静态代码分析工具lint检测安全隐患,对代码进行优化
5,必要时为安卓设备安装防火墙,以防止远程网络攻击
6.数据存储加密,采用加密的方式保护应用程序敏感数据,如利用SQLCiper加密SQLite数据库
7,应用程序组件开发的安全要点,Activity、Service、Content Provider、Broadcase Receiver等组件在代码层面应采取的安全措施,他们每一个都可以通过隐式的Intent方式打开,所以这些组件只要不是对外公开的必须在AndroidManifest里面注明:exported为false,禁止其他远程访问我们的组件。对于要和外界交互的组件,应当添加访问权限的控制,还需要对传递的数据进行安全的校验。