1.源码安全漏洞
1.1 代码混淆漏洞
当前APK文件的安全性是非常令人堪忧的。APK运行环境依赖的文件/文件夹 res、DEX、主配文件Lib 只有简单的加密或者甚至没有任何加密。诸如apktool这类工具可轻易将其破解,再配合其他例如dex2jar、jd-gui等工具基本可以做到:源码暴露、资源文件暴露、主配文件篡改、核心SO库暴露、暴力破解恶意利用等。因此需要对安卓代码进行代码混淆。
代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成无意义的单个或多个字母,如a,Ac,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。代码混淆并不能真正阻止反向工程,只能增大其难度。因此,对于对安全性要求很高的场合,仅仅使用代码混淆并不能保证源代码的安全,但是可以在一定程度上保护开发者的劳动成果。
1.2 Dex保护漏洞
Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,相当于安卓中的.exe文件,Dex为Android应用的核心,保护不当容易被反编译,暴露程序重要信息,面临被植入广告、恶意代码、病毒等风险。
另外当使用DexClassLoader加载外部的 apk、jar 或 dex文件,当外部文件的来源无法控制时或是被篡改,此时无法保证加载的文件是否安全。加载恶意的dex文件将会导致任意命令的执行。
1.3 so保护漏洞
so库一般是程序里面核心代码块,通过Android提供的NDK技术将核心代码用安全性更高的C/C++语言实现并提供给Java层调用来保证程序核心代码的安全。高性能的代码一般都会采取C/C++实现,通过Android的NDK技术来让Java层直接使用。其安全性相对于Java会高很多,相对于Java代码来说其反编译难度要大很多,但对于经验丰富的破解者来说,仍然是很容易的事,可以通过暴力破解或国外高价工具来将其破解。应用的关键性功能或算法,都会在so中实现,如果so被逆向,应用的关键性代码和算法都将会暴露。
1.4 调试设置漏洞
如果在AndroidManifest.xml配置文件中设置了application属性为debuggable=“true”,则应用可以被任意调试,这就为攻击者调试和破解程序提供了极大方便。如果开启,可被Java调试工具例如jdb进行调试,获取和篡改用户敏感信息,甚至分析并且修改代码实现的业务逻辑,例如窃取用户密码,绕过验证码防护等。
2. 组件安全漏洞
2.1组件导出漏洞
组成Apk的四个组件,Activity,Service,Broadcast Receiver 和Content Provider,如果设置了导出权限,都可能被系统或者第三方的应用程序直接调出并使用。组件导出可能导致登录界面被绕过、信息泄露、数据库SQL注入、DOS、恶意调用等风险。
2.2 Activity组件漏洞
Activity是Android组件中最基本也是最为常见用的四大组件之一,是一个负责与用户交互的组件。Activity组件中存在以下常见的漏洞。
(1)activity绑定browserable与自定义协议
activity设置“android.intent.category.BROWSABLE”属性并同时设置了自定义的协议android:scheme意味着可以通过浏览器使用自定义协议打开此activity。可能通过浏览器对app进行越权调用。
(2)ActivityManager漏洞
ActivityManager类中的killBackgroundProcesses函数,用于杀死