Android应用的安全隐患包括三个方面:代码安全、数据安全和组件安全。
1. 代码安全
代码安全主要是指Android apk有被篡改、盗版等风险,产生代码安全的主要原因是apk很容易被反编译、重打包。我们可以采用以下方法对apk进行保护:
1.1 代码混淆
代码混淆可以在一定程度上增加apk逆向分析的难度。Android SDK从2.3开始就加入了ProGuard代码混淆功能,开发者只需进行简单的配置就可以实现对代码的混淆。
1.2 Apk签名校验
每一个软件在发布时都需要开发人员对其进行签名,而签名使用的密钥文件时开发人员所独有的,破解者通常不可能拥有相同的密钥文件,因此可以使用签名校验的方法保护apk。Android SDK中PackageManager类的getPackageInfo()方法就可以进行软件签名检测。
1.3 Dex文件校验
重编译apk其实就是重编译了classes.dex文件,重编译后,生成的classes.dex文件的hash值就改变了,因此我们可以通过检测安装后classes.dex文件的hash值来判断apk是否被重打包过。
(1)读取应用安装目录下/data/app/xxx.apk中的classes.dex文件并计算其哈希值,将该值与软件发布时的classes.dex哈希值做比较来判断客户端是否被篡改。
(2)读取应用安装目录下/data/app/xxx.apk中的META-INF目录下的MANIFEST.MF文件,该文件详细记录了apk包中所有文件的哈希值,因此可以读取该文件获取到classes.dex文件对应的哈希值,将该值与软件发布时的classes.dex哈希值做比较就可以判断客户端是否被篡改。
为了防止被破解,软件发布时的classes.dex哈希值应该存放在服务器端。
另外由于逆向c/c++代码要比逆向Java代码困难很多,所以关键代码部位应该使用Native C/C++来编写。
1.4 逆向工具对抗
对apk进行重打包常用的工具是apktool,apktool对于后缀为PNG的文件,会按照PNG格式进行处理,如果我们将一个非PNG格式文件的文件后缀改为PNG,再使用apktool重打包则会报错。
以上是使用比较多的几种保护方法,单独使用其中一种效果不大,应该综合运用。
1.5 调试器检测
为了防止apk被动态调试,可以检测是否有调试器连接。在Application类中提供了isDebuggerConnected()方法用于检测是否有调试器连接,如果发现有调试器连接,可以直接退出程序。
1.6 加壳保护
使用加壳程序防止apk逆向是一种非常有效的方式,也是一个趋势。Jack_Jia在《Android APK加壳技术方案》一文中详细阐述了Android apk加壳原理以及几种加壳方案的具体实现。我们可以利用这几种方案对apk进行加壳。
不过这种加壳方式是在Java层实现的,被反编译的风险仍然很大。为了克服这个缺点,今后可以研究采用如下思路来进行保护:
将核心业务逻辑代码放入加密的.jar或者.apk文件中,在需要调用时使用Native C/C++代码进行解密,同时完成对解密后文件的完整性校验。如果需要更加安全的保护方法,可以考虑对so文件(Native C/C++代码编译得到的文件)进行加壳。Android so加壳主要需要解决两个问题:
(1)对ELF文件加壳;
(2)对Android SO的加载、调用机制做特殊处理。
这将是以后Android应用安全研究的一个方向。
2. 数据安全
2.1 存储安全问题
关于数据存储可能出现的问题包括如下几点:
(1)明文存储敏感数据,导致直接被攻击者复制或篡改。
将隐私数据明文保存在外部存储
将系统数据明文保存在外部存储
将软件运行时依赖的数据保存在外部存储
将软件安装包或者二进制代码保存在外部存储
全局可读写的内部文件存储
(2)不恰当存储登陆凭证,导致攻击者利用此数据窃取网络账户隐私数据。
解决方案:
对这些数据进行加密,密码保存在内部存储,由系统托管或者由用户使用时输入。
对应用配置文件,较安全的方法是保存到内部存储;如果必须存储到SD卡,则应该在每次使用前检验它是否被篡改,与预先保存在内部的文件哈希值进行比较。
应用如果需要安装或加载位于SD卡的任何文件,应该先对其完整性做验证,判断其与实现保存在内部存储中的(或从服务器下载来的)哈希值是否一致。
如果要跨应用进行数据共享,有种较好的方法是实现一个Content Provider 组件,提供数据的读写接口并为读写操作分别设置一个自定义的权限。
对于登录凭证的存储,使用基于凭据而不是密码的协议满足这种资源持久访问的需求,例如OAuth。
2.2 传输安全问题
• 不使用加密传输
• 使用加密传输但忽略证书验证环节
如开发者在代码中不检查服务器证书的有效性,或选择接受所有的证书时,这种做法可能会导致中间人攻击。
我们在对敏感数据进行传输时应该采用基于SSL/TLS的HTTPS进行传输。由于移动软件大多只和固定的服务器通信,我们可以采用“证书锁定”(certificate pinning)方式在代码更精确地直接验证服务器是否拥有某张特定的证书。
3. 组件安全
android应用内部的Activity、Service、Broadcast Receiver等组件是通过Intent通信的,组件间需要通信就需要在Androidmanifest.xml文件中配置,不恰当的组件配置则会带来风险。
可能产生的风险:
(1)恶意调用
(2)恶意接受数据
(3)仿冒应用,例如(恶意钓鱼,启动登录界面)
(4)恶意发送广播、启动应用服务。
(5)调用组件,接受组件返回的数据
(6)拦截有序广播
解决办法:
(1)最小化组件暴露
不参与跨应用调用的组件添加android:exported="false"属性,这个属性说明它是私有的,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。
(2)设置组件访问权限
对参与跨应用调用的组件或者公开的广播、服务设置权限。只有具有该权限的组件才能调用这个组件。
(3)暴露组件的代码检查
Android 提供各种API来在运行时检查、执行、授予和撤销权限。这些 API 是 android.content.Context 类的一部分,这个类提供有关应用程序环境的全局信息。
另外,Android应用也会存在很多传统web漏洞,比如SQL注入,xss漏洞等,代码级防止出现这些漏洞的方法与web应用防御方法相同。
ANDROID系统安全防御
1. 操作系统安全问题
Android root问题
系统漏洞,补丁更新不及时
认证机制问题
2. 系统安全解决方案
2.1 权限管理与隔离
对运行在Android系统上的应用程序进行权限的细粒度管理和隔离,防止越权行为的发生和滥用权限获取敏感数据。
可以采用MAC(Mandatory Access Control)强制访问控制模型实现。它是一个针对Linux的安全加强系统SELinux中使用的安全模型,即任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限。Google在Android 4.4上正式推出了一套以SELinux为基础的系统安全机制SEAndroid。所以如果我们要定制一个Android系统,可以采用具有SEAndroid安全机制的Android 4.4版本。
2.2 内核与应用层漏洞防护
增加补丁更新功能,如果发现漏洞,及时提醒用户进行系统补丁更新。
2.3 恶意程序检测与防护
建立一套恶意代码防护模型,对运行在Android系统上的恶意程序进行检测,抵御恶意代码的入侵。
2.4 数据安全存储与传输:
对Android系统上的数据存储和数据传输进行加密保护,保证终端上数据能够安全地使用。
分享到:
相关推荐
Android 应用安全实战:Frida 协议分析 Android 应用安全是目前智能手机安全中最重要的问题之一。随着智能手机的普及,Android 应用安全问题越来越受到关注。Android 应用安全不仅关系到用户的隐私和财产安全,还...
Android 应用安全加固关键技术研究论文旨在解决 Android 应用安全问题,通过设计防御方案,实现了一个针对 Android 应用程序的安全加固软件,该加固软件为 Android 应用程序提供透明的加固服务,实现应用程序的加壳...
对于防御策略,书中会讨论如何设计和实现安全的Android应用,包括使用安全编码实践、加密通信、数据保护、安全框架选择等。此外,还会讲解如何利用Google Play服务的安全功能,如 SafetyNet API 和 Google Play ...
面对恶意软件的威胁,Android 使用了一套应用程序安全框架来保护安全。本文以 Android 现有的安全机制为基础,通过研究当前安全机制的不足,分析恶意软件攻击的特点,提出了多个具体的安全扩展和保护方案,达到了较好的...
Android应用软件安全加固技术研究 Android应用软件安全加固技术研究是当前移动安全技术的热点之一。随着智能手机的普及和移动互联网的发展,Android应用软件已经成为人们日常生活中不可或缺的一部分。然而,随着...
### Android应用安全解决方案 在当前数字化时代,移动应用的安全性成为了企业和个人关注的重点。特别是对于政府机构或涉及敏感数据的应用而言,确保应用安全至关重要。本文将深入探讨Android应用安全解决方案中的...
Drozer,一款专为Android应用安全评估而设计的工具,正是解决这一问题的关键。本文将详细介绍Drozer的功能、安装过程以及如何利用它来检测和防止潜在的安全风险。 Drozer,源自“Android Exploitation for Fun and ...
【Android开发安全系列书籍(英文...通过阅读这些书籍,开发者和安全研究人员能够全面了解Android安全的各个方面,从而更好地设计、实现和维护安全的Android应用程序,同时也能提高对系统漏洞和攻击的识别和防御能力。
在Android软件安全与逆向分析的第五...这一章的内容旨在帮助读者建立对Android应用安全性的全面理解,并掌握逆向分析的基本技能。无论是为了开发更安全的应用,还是为了检测和防御恶意软件,这些知识都将提供宝贵指导。
《Android安全架构深究》是一本深入探讨Android操作系统安全性的专著。在移动设备日益普及的今天,Android...理解并掌握这些知识对于开发者和安全专家来说至关重要,能够帮助他们构建更安全的Android应用和系统环境。
在Android系统中,安全性和反编译技术是开发者必须关注的重要领域。Android作为一个开放源代码的移动操作系统,其安全性相对其他封闭...通过不断学习和实践,开发者可以有效提升Android应用的安全性,抵御潜在威胁。
本文将深入探讨Android应用的漏洞,以及如何进行有效的防御。 首先,我们关注的是“安全分析”。这包括对Android应用进行全面的代码审查,查找可能存在的安全漏洞,如权限过度授予、数据未加密传输、SQL注入等。...
8. **逆向工程与调试**:学习如何防止应用被逆向工程是提升应用安全性的一步,书中可能会介绍反调试技术和反编译技术。 9. **安全框架与库**:介绍了一些开源的安全框架和库,如TaintDroid、OWASP Android Security...
《Android软件安全与逆向分析》是一本深入探讨Android应用安全和逆向工程的专业书籍,旨在帮助读者理解和应对Android平台上的安全挑战。本书全面涵盖了从基础到高级的多个层次的知识点,包括但不限于: 1. **...
书中强调了安全编码的重要性,提供了许多开发安全Android应用的最佳实践,包括输入验证、资源管理、错误处理等,帮助开发者构建更健壮的应用。 七、安全测试与审计 最后,书中有专门章节介绍Android应用的安全测试...
Android 的分析与防御是指对 Android 系统的安全分析和防御,例如对恶意软件的检测和防御、对应用程序的安全审核等。对 Android 系统的安全分析可以使用各种技术,例如静态分析、动态分析等。对恶意软件的防御可以...
【Android平台WebView组件安全及应用加固研究】 在Android应用程序开发中,WebView组件是一个重要的组成部分,它使得应用能够加载和展示Web...同时,持续关注安全研究,及时更新加固策略,是保持应用安全性的关键。