-
-
利用Android安装程序劫持漏洞植入恶意软件
-
发表于: 2015-3-29 00:12 1681
-
概要
我们在谷歌的Andriod系统中发现了一个普遍存在的漏洞,即”Android安装程序劫持”,预测影响了目前49.5%的用户。详情:
利用Android安装程序劫持,攻击者可以不需用户认可就把良性的Android应用程序修改或者替换为恶意软件。这些程序主要存在于第三方应用商店。
恶意应用程序可以可以进入任何一个设备,获得用户名、密码和敏感数据。
Palo Alto 网络曾与Google和各大厂商合作,例如三星和亚马逊等,通知他们关于他们设备的问题补丁和程序脆弱性。
介绍
2014年1月,我们在Android系统中发现了一个利用Time-of-Check对Time-of-Use的漏洞,攻击者可以劫持普通Android APK安装过程。这种劫持技术可以用于绕过用户视图,用任意权限传播恶意软件。这个漏洞可以用一个应用程序代替原有的应用程序,例如,如果用户安装一个合法版本的”愤怒的小鸟”,最后却安装了一个手电筒应用的恶意软件。我们利用这个技术进行Android安装程序劫持。我们已经和谷歌等制造商合作,为用户安装补丁。
漏洞描述
为了了解它是如何工作的,让我们先来看看如何安装的Android应用程序。 Android支持从谷歌商店,以及本地文件系统中安装的应用程序。用户在谷歌商店下载的Android包(APK)到文件系统中的受保护空间。第三方应用商店和移动广告库通常下载APK文件到未受保护的本地存储空间(例如/ SD卡/),并直接安装APK文件。这两种方法使用名为PackageInstaller的系统应用程序来完成安装。
在受影响的平台上,我们发现PackageInstaller有一个“Time of Check”到“Time of Use”的漏洞。通俗地说,这意味着APK文件可以在用户不知情的情况下被修改或安装。安装程序劫持漏洞只影响了没有被保护的空间,因为从Google应用商店的APK会被下载到受保护的本地空间。
让我们来仔细看看会发生什么。
Android系统中有许多方法来触发应用程序安装过程,例如,当用户点击一个下载APK文件,或者当用户从第三方应用商店中下载的应用程序时,或当用户点击一个由一个移动广告库主办的应用推广广告时。无论哪种方式的APK安装,它总是遵循相同的步骤:
首先,该系统服务PackageInstaller通过解析APK文件和检索该应用的关键信息来启动安装进程,例如,应用程序的名称,应用程序的图标,并请求应用程序的安全权限。如图1:
这就是“Time to Check”,因为它会验证用户想要安装的应用程序,并告诉用户安装权限,他们授权应用程序的执行。所有的Android应用程序均会执行此步骤,用户点击“下一步”来查看权限的完整列表,随后点击“安装”继续安装过程(如图1)。这个过程中存在一个漏洞,因为当用户查看此信息时,攻击者可以修改或更换后台安装包。验证AOSP Android操作系统的源代码,这表明受影响版本的PackageInstaller没有在“一次性使用”验证APK文件中。因此,点击“Time to Check”(即,点击“安装”按钮)后,PackageInstaller实际上可以利用一个完全不同的权限来安装不同的应用程序。
开发
此漏洞可以在多个方面被利用:
方法A:外部修改APK
攻击者可以使用一个良性的前瞻性应用程序来安装恶意软件。这种方法有几个阶段:
用户安装“应用程序X”,这似乎是合法的。这个应用程序不需要任何危险权限,即可以来自任何正常的应用程序商店。
之后,用户安装了一个来自合法的应用程序商店(如亚马逊的App Store)的程序,然后允许用户从本地文件系统中安装APK文件。当用户试图从该应用商店安装应用时,PackageInstallerActivity视图将被启动。
用户看到的应用程序来自第三方应用程序商店并且合法,接下来安装。我们称此下载“应用程序Y”。
步骤1中的应用——“应用程序X”检测PackageInstallerActivity已经启动,并检查“应用程序Y”的APK文件是否在未受保护的文件系统上。如果在一个公共文件系统安装(例如,在/ SD卡)应用程序,然后点击“应用程序X”,这个程序就被“应用Y”这个恶意软件覆盖了,而用户正在审查的权限屏幕。
点击“安装”后,PackageInstaller将安装“应用Y”APK这个恶意软件。任意代码不需要任何用户权限就已经安装在设备上了。
方法A中有一个棘手的问题:App X如何检测到PackageInstallerActivity已经启动。有两种方法:
App X可以监视logcat来检测该应用的安装以及获得的apk文件位置的信息来替换该文件。Android <4.1时非常简单。对于Android> = 4.1的情况,只有有root权限的设备才能访问logcat。
App X可以监测目录的位置,其中所述目标程序可以保存用于安装的APK文件的下载。例如,亚马逊Appstore7.5在目录中存储下载到SD卡上的无保护的APK文件。当用户从苹果商店下载应用程序的APK文件时,一个新的APK文件将出现在该目录中。App X不需要知道哪些文件该下载。安装图(图1)已经弹出文件到屏幕上供用户审查。因此,App X可以在那个时候用恶意程序替换此APK文件。 (请注意,亚马逊接到我们的报告后,修复了这个问题。)
方法B:自动修改APK
该漏洞可以利用同一个漏洞来掩盖应用程序需要什么权限。
受害者安装看起来合法的“应用程序X”。当用户使用的“应用程序X”时,它却提供下载了不合法的“应用程序Y”(例如,一个流行的游戏应用程序)。如果用户安装了该应用程序,PackageInstallerActivity视图将启动。
如以上所讨论的,“应用程序Y”的基本信息将显示在PackageInstallerActivity视图中。“应用程序Y”似乎并没有任何不寻常。事实上,下载“应用程序Y”不需要任何许可。
用户查看PackageInstallerActivity时,“应用程序X”已经被应用程序Y”恶意软件的APK文件”改写了。
用户点击“安装”时,将忽略请求的实际权限,并安装修改后的“Y应用程序”。
时间表
2014年1月:初步发现
2014年2月:漏洞报告给谷歌Android安全团队
2014年3月:漏洞报告给三星
2014年9月:漏洞报告给亚马逊
2015年3月:公开漏洞
赞赏
看原图
赞赏
雪币:
留言: