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系统上的数据存储和数据传输进行加密保护,保证终端上数据能够安全地使用。
- 浏览: 941273 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (832)
- 系统集成、架构 (116)
- 前端负载、开发、db (139)
- 监控与安全、性能 (70)
- Trouble Shooting (45)
- 管理哲学、业余提升 (9)
- 经典转载 (8)
- 主导过项目演示 (37)
- docker集群 (9)
- jvm 性能参数 (7)
- 监控平台 (28)
- 发布管理平台 (6)
- 日志平台 (53)
- Tools (36)
- shell & pytho &ansible自动化运维平台 (20)
- mongodb&nosql&db (32)
- system (12)
- kafa zk (11)
- python&nodejs (311)
- 数据平台 (5)
- PAAS (0)
- IAAS (0)
- SAAS (0)
- Go (2)
- kotlin (2)
- Redis学习笔记4-脚本、持久化和集群 (2)
最新评论
-
hsluoyz:
PyCasbin 是一个用 Python 语言打造的轻量级开源 ...
django guardian 对象级别权限设计 -
phncz310:
厉害了,我的哥
python黑魔法异常重试的次数,间隔的装饰器涵数 -
adamoooo:
Zabbix二次开发,可以试试:乐维监控www.91lewei ...
zabbix二次开发及app -
shi3689476:
你好,模块下载地址还能提供一下吗?
NGINX开发杀手锏-线程池 -
tobato:
Elasticsearch 和 Influxdb 为何选了El ...
elastic作数据源,对比kibana与grafana
发表评论
-
GOPS2016笔记思考
2016-04-16 22:07 943花了一天时间整理思路,把吸收知识吐出来, ... -
Linux PAM&&PAM后门
2016-03-17 18:11 9170x00 PAM简介 PAM (Pluggable Au ... -
自动立体化运维监控理念
2016-03-17 10:05 852场景 客户投诉有问题,于是研发测试运维开 ... -
读唯品会NoSQL平台自动化发展及运维经验分享
2016-03-11 10:05 1174看完后,点赞。 点子不错,基于 ... -
jvm调优其实就是对Young代的次数与时间调优
2016-03-10 10:07 642最近在做埋点 ... -
nginx配置lua模块和基于lua的waf三种方式
2016-02-24 09:40 1167nginx和lua都注重性能,使用lua扩展nginx大大增 ... -
使用ganglia监控hadoop及hbase集群
2016-02-15 08:44 781一、Ganglia简介 Ganglia ... -
如何深入理解 StatsD 与 Graphite ?
2016-02-02 18:35 632众所周知,StatsD 负责 ... -
curl方式实现zabbix以微信形式报警
2016-01-27 09:27 1293现实生产环境中,我们通常使用邮件和短信接受zab ... -
notify+rsync实时同步 百万级别文件
2016-01-27 09:12 1620背景 我们公司在用inotify+rsync做实时同步,来 ... -
报警监控平台之设计url回调webhook管理系统
2016-01-22 09:40 1302前言: 关于监控方面的回调,国内也有一些第三 ... -
创业型公司如何做好监控报警
2016-01-21 16:55 1289编者按:可靠稳定的产品背后需要有靠谱的监控报警框架 ... -
zabbix监控多JMX端口
2016-01-20 10:49 15761. 开启Tomcat JMX功能 CATALINA_OP ... -
JaCoCo:分析单元测试覆盖率的利器
2016-01-18 17:18 1127前言 随着敏捷开发的流行,编写单元测试已经成为业界 ... -
Zabbix 3.0 alpha6企业级分布式监控系统发布
2016-01-18 10:27 869Zabbix企业级分布式监控系统发布了3.0第六个alp ... -
Python日常巡检程序(daily-check)
2016-01-17 12:58 1183前言 在公司对于运维人员来说,巡检是日常例行的一件事。刚 ... -
接口安全调用该怎么做?签名?证书?服务安全?
2016-01-12 10:11 699在这个以“数据为生命”的时代,每一个开发商都尽可能的收集客户 ... -
从0到1构建美团压测工具
2016-01-10 10:10 770美团内部的RPC服务大多构建在Thrift之上,在日常开发服 ... -
针对不同主机使用不同 SSH Key
2016-01-04 09:38 958考虑到安全性和便捷性,相信大部分同学都已经习惯了 SSH k ... -
论客户端埋点
2016-01-04 09:24 915埋点的意义 用户数据 ...
相关推荐
面对恶意软件的威胁,Android 使用了一套应用程序安全框架来保护安全。本文以 Android 现有的安全机制为基础,通过研究当前安全机制的不足,分析恶意软件攻击的特点,提出了多个具体的安全扩展和保护方案,达到了较好的...
本书向读者展示了如何防御黑客对Android应用的攻击技术,书中讲述了他在数以百计的应用程序中亲自验证的安全技术示例,详细演示了黑客对应用程序攻击的过程,并给出了更安全的解决方案,这包括身份验证、网络、...
在靶场中,安全专业人员可以模拟攻击者的行为,发现系统和应用的漏洞,并进行渗透测试,从而及时修复和改进防御机制。同时,这也为防御方提供了锻炼机会,通过对抗攻击提高防御能力。 靶场的搭建还促进了团队协作与...
XSS问题源于某一个WEB站点或应用存在安全问题,但受同源策略的约束,攻击者只能访问存在漏洞的站点的回话信息,无法访问其他域的回话信息。 UXSS则主要源于浏览器或浏览器扩展程序的安全缺陷,不需要网站本身存在...
本系统通过主动防御技术设计黑白名单来自动拦截未知安全的访问进程,同时将这类访问请求反馈给用户,用户可自行选择是否放行或禁止,并可以将此类应用访问请求添加到黑白名单中。通过系统测试,得出本系统可以实现...
我们将Android应用,相关的API,及其与结构化异构信息网络(HIN)的丰富关系作为代表。然后我们使用基于元路径的方法来表征应用程序和API的语义相关性。我们使用每个元路径来制定Android应用的相似性度量,并使用多...
防御java崩溃可确保您的应用程序安全Android防御崩溃为了方便中国同学,提供了翻译文档如下:中文文档这是什么?这是Android中的一个崩溃防御库,可帮助您捕获意外的Java异常。 集成步骤1在您的项目中找到build....
「安全运营」DevSecOps在金融机构落地实践 - Android WEB应用防火墙 安全防御 恶意软件 渗透测试 安全管理
一种静态Android重打包恶意应用检测方法 安全架构安全开发 信息安全 安全实践 安全架构
微软深度防御安全模型7层安全防御.jpg 互联网企业安全建设思路.png 拒绝服务攻击与防御技术.png 人民银行“三三二一”总体技术框架.jpg 信息系统等级保护实施指南思维导图.jpg 逆向漏洞 MPDRR模型.jpg ...
:在Android应用开发中会遇到各种各样的安全性问题,开发者应该从宏观上了解应用开发中可能存在的各种安全隐患,积极采取适当的控制策略。同时,在实现过程中从细节上采取具体的安全措施,增强系统的防御功能。 没有...
摘要:Android应用本身的问题主要集中在4大组件上,通常是一些逻辑处理问题导致信息泄露、身份认证绕过等。从攻击角度举例,可以是:对某个模块进行漏洞挖掘的方法,对某个漏洞进行利用的技术,通过逆向工程破解程序...
「访问管理」威胁框架在端点主动防御和数据采集的应用_基于ATT&CK在端点防护的实践分享 - 漏洞分析 工控安全 渗透测试 应用安全 信息安全 Android
另类寻找Android恶意应用.pdf 基于软件无线电的短程无线攻击分析与防护对策.pdf 大型互联网企业安全建设的挑战、实践与思考.pdf 大数据安全新思路.pdf 密码芯片侧信道分析研究.pdf 拯救应急——传统应急响应...
Android应用漏洞挖掘.pdf 搞定网络协议之网络安全面试题.pdf 边界渗透中的小技巧.pdf 大规模分布式流量威胁分析与取证溯源.pptx 国内SRC漏洞挖掘的一些思路分享.pdf 红队视角下的防御体系构建.pdf 京东护网面试题...
6、深入Android可信应用漏洞挖掘 7、芯片安全和无线电安全底层渗透技术 8、USB FUZZ 工具前沿探索 9、车联网:站在研发视角挖漏洞 10、虚虚实实,深入研究汽车虚拟化技术 11、探索软件定义汽车的安全攻击面
在2015 IEEE安全和隐私(SP)研讨会上发表的“那是什么应用程序?Android用户界面中的欺骗和对策” 该存储库包含三个主要文件夹: ### paper纸张的pdf文件。 ### presentation在IEEE SP 2015上演示的幻灯片和...
摘要:为解决Android手机获取Root权限系统安全性的降低,非Root授权下Android手机安全应用防护效果不理想的一系列问题,研究了 ART 运行时工作原理、Java 反射机制和 AOP 原理,设计验证了一套免Root主动防御机制,...
卡巴斯基平板安全软件全面保护您的Android平板电脑及其存储的隐私信息安全,它提供的高级反盗窃功能,可以帮助您锁定和定位丢失或被盗的平板电脑、清除其中存储的个人信息,并可秘密拍摄窃贼的面部照片。此外,实时...