在知乎上看到了关于在Android上,有哪些常被利用的漏洞话题,上面有一些大神们的见解,小弟在这里总结一下:
下面是来自知乎上 Mingshen Sun 给出的见解
1. 应用反编译
漏洞:APK 包非常容易被反编译成可读文件,稍加修改就能重新打包成新的 APK。
利用:软件破解,内购破解,软件逻辑修改,插入恶意代码,替换广告商 ID。
建议:使用 ProGuard 等工具混淆代码,重要逻辑用 NDK 实现。
例子:反编译重打包 FlappyBird,把广告商 ID 换了,游戏改加插一段恶意代码等等。
2. 数据的存储与传输
漏洞:外部存储(SD 卡)上的文件没有权限管理,所有应用都可读可写。开发者把敏感信息明文存在 SD 卡上,或者动态加载的 payload 放在 SD 卡上。
利用:窃取敏感信息,篡改配置文件,修改 payload 逻辑并重打包。
建议:不要把敏感信息放在外部存储上面;在动态加载外部资源的时候验证文件完整性。
漏洞:使用全局可读写(MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE)的内部存储方式,或明文存储敏感信息(用户账号密码等)。
利用:全局读写敏感信息,或 root 后读取明文信息。
建议:不适用全局可读写的内部存储方式,不明文存储用户账号密码。
3. 密码泄露
漏洞:密码明文存储,传输。
利用:
4. 组件暴露 (Activity, Service, Broadcast Receiver, Content Provider)
漏洞:
5. WebView
漏洞:
6. 其他漏洞
Android 应用的漏洞大部分都是因为开发人员没有对输入信息做验证造成的,另外因为 Intent 这种特殊的机制,需要过滤外部的各种恶意行为。再加上 Android 应用市场混乱,开发人员水平参差不齐。所以现在 Android 应用的漏洞,恶意软件,钓鱼等还在不断增多。再加上 root 对于 App 沙箱的破坏,Android 升级的限制。国内的 Android 环境一片混乱,惨不忍睹。所以,如果想要保证你的应用没有安全漏洞,就要记住:永远不要相信外面的世界。
利用:软件破解,内购破解,软件逻辑修改,插入恶意代码,替换广告商 ID。
建议:使用 ProGuard 等工具混淆代码,重要逻辑用 NDK 实现。
例子:反编译重打包 FlappyBird,把广告商 ID 换了,游戏改加插一段恶意代码等等。
2. 数据的存储与传输
漏洞:外部存储(SD 卡)上的文件没有权限管理,所有应用都可读可写。开发者把敏感信息明文存在 SD 卡上,或者动态加载的 payload 放在 SD 卡上。
利用:窃取敏感信息,篡改配置文件,修改 payload 逻辑并重打包。
建议:不要把敏感信息放在外部存储上面;在动态加载外部资源的时候验证文件完整性。
漏洞:使用全局可读写(MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE)的内部存储方式,或明文存储敏感信息(用户账号密码等)。
利用:全局读写敏感信息,或 root 后读取明文信息。
建议:不适用全局可读写的内部存储方式,不明文存储用户账号密码。
3. 密码泄露
漏洞:密码明文存储,传输。
利用:
- root 后可读写内部存储。
- SD 卡全局可读写。
- 公共 WiFi 抓包获取账号密码。
4. 组件暴露 (Activity, Service, Broadcast Receiver, Content Provider)
漏洞:
- 组件在被调用时未做验证。
- 在调用其他组件时未做验证。
- 调用暴露的组件,达到某种效果,获取某些信息,构造某些数据。(比如:调用暴露的组件发短信、微博等)。
- 监听暴露组件,读取数据。
5. WebView
漏洞:
- 恶意 App 可以注入 JavaScript 代码进入 WebView 中的网页,网页未作验证。
- 恶意网页可以执行 JavaScript 反过来调用 App 中注册过的方法,或者使用资源。
- 恶意程序嵌入 Web App,然后窃取用户信息。
- 恶意网页远程调用 App 代码。更有甚者,通过 Java Reflection 调用 Runtime 执行任意代码。
6. 其他漏洞
- ROOT 后的手机可以修改 App 的内购,或者安装外挂 App 等。
- Logcat 泄露用户敏感信息。
- 恶意的广告包。
- 利用 next Intent。
Android 应用的漏洞大部分都是因为开发人员没有对输入信息做验证造成的,另外因为 Intent 这种特殊的机制,需要过滤外部的各种恶意行为。再加上 Android 应用市场混乱,开发人员水平参差不齐。所以现在 Android 应用的漏洞,恶意软件,钓鱼等还在不断增多。再加上 root 对于 App 沙箱的破坏,Android 升级的限制。国内的 Android 环境一片混乱,惨不忍睹。所以,如果想要保证你的应用没有安全漏洞,就要记住:永远不要相信外面的世界。
那么问题来拉,出现上述的漏洞应该怎么检测呢?
静态分析:利用apktool、dex2jar、jd-gui、smali2dex等静态分析工具对应用进行反编译,并对反编译后的java文件、xml文件等文件静态扫描分析,通过关键词搜索等静态方式将具有安全隐患的代码进行摘录并存入到检测平台后台,为后续的安全检测报告提供数据依据。
动态分析:对应用软件安装、运行过程的行为监测和分析。检测的方式包括沙箱模型和虚拟机方式。虚拟机方式通过建立与Android手机终端软件运行环境几乎一样的虚拟执行环境,手机应用软件在其中独立运行,从外界观察应用程序的执行过程和动态,进而记录应用程序可能表现出来的恶意行为。
人工检测:专业安全人员对待检测应用,对其进行安装、运行和试用,通过在试用过程中,逐步掌握应用的特点,并通过专业经验,来圈定检测重点。人工专业检测在涵盖基础检测和深度检测的全部检测项的同时,兼顾侧重点检测,给予应用更全面、更专业、更贴合应用的量身打造的检测服务。
当然了我们可以使用一些平台来检测我们的APP是否存在漏洞
爱加密app漏洞分析平台是免费的,网址是http://safe.ijiami.cn/,对于使用的教程可以去度娘上查看