zoukankan      html  css  js  c++  java
  • 分享: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 环境一片混乱,惨不忍睹。所以,如果想要保证你的应用没有安全漏洞,就要记住:永远不要相信外面的世界。

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

  • 相关阅读:
    UIControl IOS控件编程 及UITextField的讲解
    ViewPager实现页面切换
    HDU 3788 和九度OJ 1006测试数据是不一样的
    的基本原理的面向对象的--------单个程序员必须查看
    hdu1796 How many integers can you find
    Android数据加载和Json解析——蓝本
    设计管理员表;webservice用于网络安全的高端内提供服务的
    how tomcat works 札记(两)----------一个简单的servlet集装箱
    新秀学习Hibernate——一个简单的例子
    在cocos2d-x在CCTableView使用控制
  • 原文地址:https://www.cnblogs.com/ablansetaimeng/p/4600244.html
Copyright © 2011-2022 走看看