超级安卓漏洞 “寄生兽”影响数千万手机应用

简介: 本文讲的是超级安卓漏洞 “寄生兽”影响数千万手机应用,一个被研究人员命名为“寄生兽”的安全漏洞影响市面上数以千万的APP,包括互联网巨头BAT等厂商的众多流行移动产品。

本文讲的是 超级安卓漏洞 “寄生兽”影响数千万手机应用,一个被研究人员命名为“寄生兽”的安全漏洞影响市面上数以千万的APP,包括互联网巨头BAT等厂商的众多流行移动产品。利用该漏洞,攻击者可以直接在用户手机中植入木马,盗取用户的短信照片等个人隐私,盗取银行、支付宝等账号密码等。

发现该漏洞的360手机安全研究团队VulpeckerTeam向安全牛表示,寄生兽属于APK缓存代码劫持漏洞,他们已经向补天漏洞响应平台提交了这个漏洞。目前补天已经将相关详情通知给各大厂商的安全响应中心(src),请各厂商及时自查和修复。

漏洞原理
由于安卓应用的升级都需要重新安装程序,为了避免频繁升级给用户体验和开发都带来了不便,所以现在市面上的app大都使用插件机制来做到无缝升级和扩展功能,APP只需要引入相应的插件文件即可完成升级。但这种做法却隐藏了不为人知的安全隐患。

VulpeckerTeam的安全专家黎博解释,APP插件机制的实现方式是把相关功能编写成单独apk或jar文件,然后在程序运行时用DexClassLoader函数动态加载,进行反射调用。由于安卓应用的代码缓存机制会优先加载运行APK的缓存代码odex,因此如果针对插件的odex文件进行攻击,开发者对于插件文件所做的各种保护都将失效。

安全人员检测了市面上一些用到插件机制的主流app,发现部分app对DexClassLoader的第一个参数的插件文件做了校验,在加载前对要加载的apk或jar做了签名或者MD5等校验。这在一定程度上保护了插件的完整性,防止了代码注入攻击。但是,几乎没有厂商对第二个参数的缓存文件进行保护,这就导致了新的攻击点的出现。

经过在安卓源码中的验证,攻击者需要修改odex文件中的两个参数crc及modWhen以实现恶意代码的注入。

image

上图dex_old是修改前的odex文件,dex_new是修改后的dex文件。两个文件的md5不一样,但是crc及modWhen却是一样的,这样就可以绕过DexClassLoader的校验。

APK缓存代码感染虽然危害很大,但是一般情况下,开发者都会将odex的缓存目录选在App的私有目录下,google官方文档也提示开发者,不要将odex的缓存路径选择在外部存储器(SD卡)上。所以,攻击者如果没有足够的权限是无法替换app私有目录下的文件的。

在之前安全牛报道过的三星输入法漏洞利 用中,攻击者用到了安卓zip解压缩的一个漏洞。可以遍历目,并在解压zip文件时以原app的权限覆盖任意文件。如果该app用到了插件机制,则对应的插件的odex文件也会被备份。攻击者可以先用adb backup备份用户数据,对备份下来的odex文件进行修改,然后用adb restore恢复回去,就可以替换掉正常的odex文件,造成代码劫持。

漏洞危害
安全人员测试了市面上几款主流的app,凡是用到了这种插件机制的app,都没有对DexClassLoader的第二个参数做校验,一旦攻击者将恶意代码注入APK的缓存代码(odex)中,开发者对apk/jar做的各种保护都将失效。而且这种攻击,APK自身很难发现,即使重启或关机,只要app一运行,恶意代码就会随之运行。

为了证明漏洞危害的严重性,安全人员选择了三类代表性的APP验证漏洞:

输入法类APP:搜狗输入法,百度输入法等
可感染代码输出logcat

浏览器类APP:UC浏览器等
替换支付宝SDK,盗取密码

通用类SDK:高德地图SDK,微信SDK等
感染代码输出logcat

高德地图漏洞利用视频

由于验证漏洞需要花大量精力,因此还需要各大厂商自查并修复。

解决方案
APK缓存劫持漏洞的核心有两点,一个是软件开发者没有考虑odex的安全问题,另一个是没有对zip解压缩时的恶意文件名做检测,所以防护上也应该从这方面做考虑。

•odex完整性校验

由于对odex一般是由系统(DexClassLoader)自动生成的,且odex与apk/jar是相对独立的,开发者事先无法知道odex文件的MD5等信息,所以很难通过MD5校验等手段保护odex的完整性;同时,系统的DexClassLoader函数只是校验了odex中的crc、modWhen字段,可以很轻易的被绕过。所以,目前对odex的防护只能由app自身来做,可以在每次运行DexClassLoader之前,清楚已经 存在的odex;另外,在odex第一次生成之后,存储odex文件的MD5值,以后每次调用DexClassLoader的时候都对odex文件进行 MD5校验。

•对劫持odex的攻击入口的修复

对zip解压缩的漏洞,只需要在调用 zipEntry.getName()的时候,过滤返回值中的”../”跳转符。对于引用的第三方的zip库也需要注意,可以用上面的测试用例测试一下第 三方库是否有zip解压缩的漏洞;调用DexClassLoader动态加载dex的时候,第二个参数不要指定在sdcard上;在manifest里指 定allowBackup=”false”。

原文发布时间为:七月 1, 2015
本文作者:Recco
本文来自云栖社区合作伙伴安全牛,了解相关信息可以关注安全牛。
原文链接:http://www.aqniu.com/industry/8371.html

相关文章
|
5天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
5天前
|
存储 搜索推荐 Java
打造个性化安卓应用:从设计到实现
【10月更文挑战第30天】在数字化时代,拥有一个个性化的安卓应用不仅能够提升用户体验,还能加强品牌识别度。本文将引导您了解如何从零开始设计和实现一个安卓应用,涵盖用户界面设计、功能开发和性能优化等关键环节。我们将以一个简单的记事本应用为例,展示如何通过Android Studio工具和Java语言实现基本功能,同时确保应用流畅运行。无论您是初学者还是希望提升现有技能的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧。
|
9天前
|
搜索推荐 开发工具 Android开发
打造个性化Android应用:从设计到实现的旅程
【10月更文挑战第26天】在这个数字时代,拥有一个能够脱颖而出的移动应用是成功的关键。本文将引导您了解如何从概念化阶段出发,通过设计、开发直至发布,一步步构建一个既美观又实用的Android应用。我们将探讨用户体验(UX)设计的重要性,介绍Android开发的核心组件,并通过实际案例展示如何克服开发中的挑战。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧,帮助您在竞争激烈的应用市场中脱颖而出。
|
8天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
16 1
|
10天前
|
算法 Java 数据库
Android 应用的主线程在什么情况下会被阻塞?
【10月更文挑战第20天】为了避免主线程阻塞,我们需要合理地设计和优化应用的代码。将耗时操作移到后台线程执行,使用异步任务、线程池等技术来提高应用的并发处理能力。同时,要注意避免出现死循环、不合理的锁使用等问题。通过这些措施,可以确保主线程能够高效地运行,提供流畅的用户体验。
24 2
|
12天前
|
安全 搜索推荐 Android开发
Android vs. iOS:解锁智能手机操作系统的奥秘####
【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
22 3
|
14天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
43 5
|
14天前
|
移动开发 Dart 搜索推荐
打造个性化安卓应用:从零开始的Flutter之旅
【10月更文挑战第20天】本文将引导你开启Flutter开发之旅,通过简单易懂的语言和步骤,让你了解如何从零开始构建一个安卓应用。我们将一起探索Flutter的魅力,实现快速开发,并见证代码示例如何生动地转化为用户界面。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将为你提供价值。
|
1月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
107 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
16天前
|
Web App开发 缓存 前端开发
拿下奇怪的前端报错(六):多摄手机webrtc拉取视频流会导致应用崩溃,从而无法进行人像扫描
本文介绍了一种解决手机摄像头切换导致应用崩溃的问题的方法。针对不支持facingMode配置的四摄手机,通过缓存和序号切换的方式,确保应用在特定设备上不会频繁崩溃,提升用户体验。