分享:Android 应用有哪些常见,浅谈常被利用的安全漏洞?

首先,题主询问“Android 应用”的安全漏洞,说到 Android 应用的安全漏洞,如果抛开系统设计问题,其主要原因是开发过程当中疏漏引起的。但其实也并不能把这些责任都怪在程序猿头上。所以本答案也将会对 Android 系统设计以及生态环境做一些阐述。(如果想了解 Android 恶意软件的情况,那就需要另开题目了。)

1. 应用反编译
漏洞:APK 包非常容易被反编译成可读文件,稍加修改就能重新打包成新的 APK。
利用:软件破解,内购破解,软件逻辑修改,插入恶意代码,替换广告商 ID。
建议:使用 ProGuard 等工具混淆代码,重要逻辑用 NDK 实现。
例子:反编译重打包 FlappyBird,把广告商 ID 换了,游戏改加插一段恶意代码等等。

2. 数据的存储与传输
漏洞:外部存储(SD 卡)上的文件没有权限管理,所有应用都可读可写。开发者把敏感信息明文存在 SD 卡上,或者动态加载的 payload 放在 SD 卡上。
利用:窃取敏感信息,篡改配置文件,修改 payload 逻辑并重打包。
建议:不要把敏感信息放在外部存储上面;在动态加载外部资源的时候验证文件完整性。

漏洞:使用全局可读写(MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE)的内部存储方式,或明文存储敏感信息(用户账号密码等)。
利用:全局读写敏感信息,或 root 后读取明文信息。
建议:不适用全局可读写的内部存储方式,不明文存储用户账号密码。

3. 密码泄露
漏洞:密码明文存储,传输。
利用

  • root 后可读写内部存储。
  • SD 卡全局可读写。
  • 公共 WiFi 抓包获取账号密码。

建议:实用成熟的加密方案。不要把密码明文存储在 SD 卡上。

4. 组件暴露 (Activity, Service, Broadcast Receiver, Content Provider)
漏洞

  • 组件在被调用时未做验证。
  • 在调用其他组件时未做验证。

利用

  • 调用暴露的组件,达到某种效果,获取某些信息,构造某些数据。(比如:调用暴露的组件发短信、微博等)。
  • 监听暴露组件,读取数据。

建议:验证输入信息、验证组件调用等。android:exported 设置为 false。使用 android:protectionLevel="signature" 验证调用来源。

5. WebView
漏洞

  • 恶意 App 可以注入 JavaScript 代码进入 WebView 中的网页,网页未作验证。
  • 恶意网页可以执行 JavaScript 反过来调用 App 中注册过的方法,或者使用资源。

利用

  • 恶意程序嵌入 Web App,然后窃取用户信息。
  • 恶意网页远程调用 App 代码。更有甚者,通过 Java Reflection 调用 Runtime 执行任意代码。

建议:不使用 WebView 中的 setJavaScriptEnabled(true),或者使用时对输入进行验证。

6. 其他漏洞

  • ROOT 后的手机可以修改 App 的内购,或者安装外挂 App 等。
  • Logcat 泄露用户敏感信息。
  • 恶意的广告包。
  • 利用 next Intent。

7. 总结
Android 应用的漏洞大部分都是因为开发人员没有对输入信息做验证造成的,另外因为 Intent 这种特殊的机制,需要过滤外部的各种恶意行为。再加上 Android 应用市场混乱,开发人员水平参差不齐。所以现在 Android 应用的漏洞,恶意软件,钓鱼等还在不断增多。

再加上 root 对于 App 沙箱的破坏,Android 升级的限制。国内的 Android 环境一片混乱,惨不忍睹。所以,如果想要保证你的应用没有安全漏洞,就要记住:永远不要相信外面的世界。

最后推荐:爱加密漏洞检测(http://safe.ijiami.cn/) 服务可以一键找出APP潜在的漏洞和恶意软件存在的病毒;针对应用被劫持,爱加密提供多种加密项目和加密方式,解决进程和数据传输过程中可能存在的劫持风险。

时间: 2024-08-02 11:43:59

分享:Android 应用有哪些常见,浅谈常被利用的安全漏洞?的相关文章

转 Android开发学习笔记:浅谈WebView

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法: 第一种方法的步骤: 1.在要Activity中实例化WebView组件:WebView webView = new WebView(this); 2

Android应用安全开发之浅谈网页打开APP

一.网页打开APP简介 Android有一个特性,可以通过点击网页内的某个链接打开APP,或者在其他APP中通过点击某个链接打开另外一个APP(AppLink),一些用户量比较大的APP,已经通过发布其AppLink SDK,开发者需要申请相应的资格,配置相关内容才能使用.这些都是通过用户自定义的URI scheme实现的,不过背后还是Android的Intent机制.Google的官方文档<Android Intents with Chrome>一文,介绍了在Android Chrome浏览

mysql分享一:运维角度浅谈MySQL数据库优化

转于:http://lizhenliang.blog.51cto.com/7876557/1657465 1.数据库表设计要合理避免慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等 2.数据库部署 项目初期访问量不会很大,所以单台部署足以应对在1500左右的QPS(每秒查询率).考虑到高可用性,可采用MySQL主从复制+Keepalived做双击热备,常见集群软件有Keepalived.Heartbeat. 双机热备博文:http://lizhenliang.blog.51cto.

android App性能优化技巧浅谈

Android App性能优化,安卓App性能优化技巧,无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件开发公司以及广大程序员们头疼的一大难题.今天,就给大家提供几个提高Android App性能的技巧. 高效地利用线程1.在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受

Android开发学习笔记:浅谈显示Intent和隐式Intent

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/655132 Intent寻找目标组件的两种方式: 显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间.

Android开发学习笔记:浅谈WebView(转)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法: 第一种方法的步骤: 1.在要Activity中实例化WebView组件:WebView webView = new WebView(this); 2

Android v2.0 基本概念 - 浅谈

目录 Android框架 Linux Kernel 系统运行库 Libraries Android Runtime Application Framework Application Android框架 Linux Kernel Android核心系统服务基于Linux内核,如安全性.内存管理.进程管理.网络协议栈和驱动模型.内核作为一个抽象层,介于软件层和硬件层之间. 2.系统运行库   由'系统库'(Libraries)和'运行库'(Android Runtime)组成. 系统库(Libra

Android开发学习笔记:浅谈WebView

WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法: 第一种方法的步骤: 1.在要Activity中实例化WebView组件:WebView webView = new WebView(this); 2.调用WebView的loadUrl()方法,设置WevView要显示的网页:  互联网用:webView.loadUrl("http://www.google.com");   本地文件用:

Android Service(一)--浅谈Service

一.Service简介 service可以说是一个在后台运行的Activity,它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了,它要实现和用户的交互的话需要通过通知栏或则是发送广播,UI去接收显示.它的应用十分广泛,尤其是在框架层,应用更多的是对系统服务的调用.它用于处理一些不干扰用户使用的后台操作.如下载,网络获取.播放音乐,他可以通过INTENT来开启,同时也可以绑定到宿主对象(调用者例如ACTIVITY上)来使用.服务是一个应用程序组件代表应用程序执行一个长时间操作的行为,