ParseDroid漏洞:针对Android开发者和安全分析人员

传送门

Apktool未正确解析XML导致的XXE漏洞分析

一、前言

Check Point研究团队在最近研究工作中发现了一些漏洞,任何单位或组织只要涉及Java或Android开发工作都可能受这些漏洞影响,攻击者可以利用这些漏洞来渗透这些目标

漏洞存在于开发者工具中,下载版及云服务版均存在这一问题。这些开发者工具的使用范围非常广泛。作为世界上最大的应用生态系统,Android应用使用的正是这类开发者工具。这些工具中包括所有Java或Android程序员用来生成应用的工具,也包括安全分析人员所使用的一些工具。

今年年初时维基解密公布了名为“Vault7”的一系列文件,从这些文件中,我们了解到CIA以及NSA正在利用各种公司产品中的漏洞来实施攻击,这些公司规模大小不一,遍布全球。今年年初时,我们也看到过与CIA有关的安全事件,当时CIA攻击了CCleanerNotepad++以及其他软件,目的是利用供应链渠道将恶意软件渗透到目标组织中,以收集相关企业及用户信息。

经过研究后,我们发现了某些安全漏洞,这些漏洞会影响最常用的Android IDE工具(如Google的Android Studio以及JetBrains的IntelliJ IDEA以及Eclipse产品),也会影响用于逆向分析Android应用的主流工具(如APKTool、Cuckoo-Droid服务等)。

我们可以利用这些工具来访问内部文件,大家可以观看下面这个视频了解利用过程。2017年5月,Check Point向APKTool开发者以及其他IDE公司报告了研究成果。随后,Google以及JetBrains验证并确认了这些安全问题,发布了相应补丁,成功修复这些漏洞。

视频演示:

http://v.youku.com/v_show/id_XMzIxMTc2ODMzMg==.html

二、技术细节:从XXE到RCE

我们第一阶段研究工作主要关注的是APKTool(全称为Android Application Package Tool)。

作为第三方Android应用最常用的一个逆向分析工具,APKTool可以用来支持自定义平台、分析应用程序、解码及重构应用资源等。

2.1 XXE漏洞

APKTool最主要的两个功能为:

1、反编译(Decompile)APK文件;

2、生成(Build)APK文件。

在研究过程中,我们发现这些功能中存在安全漏洞。

查看APKTool的源码后,我们找到了一个XML外部实体(XML External Entity,XXE)漏洞,APKTool所使用的XML解析器并没有禁用外部实体引用功能,因此在解析程序内部的XML文件时就会存在XXE漏洞。

存在漏洞的函数为loadDocument,APKTool两个核心功能(生成及反编译)中都会用到该函数。

这个漏洞会让APKTool用户操作系统中的文件暴露无遗,也就是说,攻击者可以利用XXE漏洞,通过恶意“AndroidManifest.xml”文件来窃取受害者主机上的任何文件,并将这些文件发送到攻击者控制的远程服务器上。XXE攻击可以导致各种安全风险,不单单局限于这种攻击场景。

为了让Android开发者及研究人员认识到该漏洞的严重性,我们将研究内容拓展到存在漏洞的XML解析器:DocumentBuilderFactory,这是APKTool项目中使用的解析器。

2.2 开发者工具中的漏洞

在后续研究中,我们发现其他项目所使用的XML解析器也存在漏洞。此外,我们发现用来开发Android应用的IDE工具也受这类漏洞影响,这些工具包括Intellij、Eclipse以及Android Studio。

当IDE加载Android工程中的恶意“AndroidManifest.xml”文件时,就会按照攻击者的指示,泄露攻击者所需的任何文件。

为了演示漏洞利用过程,我们将一个恶意项目库上传到GitHub,并将其克隆(clone)到某个Android Studio项目中。

带有XXE攻击载荷的恶意Github工程如下所示:

将其克隆到Android Studio中:

攻击结果:攻击顺利完成,受保护的文件现在已被窃取,发送到攻击者控制的服务器中,用户对整个过程毫无知觉,如下图所示:

此外,我们也发现了另一种攻击场景,实际环境中攻击者可以将包含XXE载荷的AAR(Android Archive Library)库注入到仓库中,借此大范围攻击Android开发人员。

比如,攻击者可以将被感染的AAR上传到公共仓库中(如中央Maven库),但在演示场景中,我们会将被感染的AAR上传到本地仓库中。当受害者从该仓库克隆被感染的AAR时,攻击者就可以从文件系统上窃取敏感文件,比如配置文件、源代码、公司保密数据等。

将恶意AAR上传到本地仓库:

将AAR添加到Android Studio工程中:

攻击结果:攻击顺利完成,受保护的文件现在已被窃取,发送到攻击者控制的服务器中,用户对整个过程毫无知觉,如下图所示:

对APKTool进一步研究后,我们找到了另一个漏洞,利用该漏洞我们可以在受害者主机上执行系统命令。

APKTool有一些高级用法,其中包括名为“APKTOOL.YML”的一个配置文件。

该文件中包含一个比较有趣的字段,即“unknownFiles”。用户可以在该字段中包含非标准的文件路径,APK重建过程中会将这些文件存放在合适的位置。这些文件存放在文件系统的“Unknown”目录中。

正常的“APKTOOL.YML”文件结构如下图所示:

通过操控“APKTOOL.YML”文件中“unknownFiles”字段所包含的文件路径,攻击者有可能能够将任意文件注入到文件系统上的任意路径(路径遍历攻击)。这是因为APKTool在处理过程中,并没有验证从APK文件中提取的未知文件所存放的具体路径。

实际上,只要能将任意文件注入到文件系统的任意路径中,攻击者就能达到远程代码执行(Remote Code Execution,RCE)目的,也就是说,只要APKTool用户或服务尝试解析攻击者精心构造的恶意APK文件,就容易受到RCE攻击影响。

在演示场景中,我们创建了一个Web网站,其功能与官方的APK在线解码器(https://apk.tools)类似。

APKTool会将恶意文件释放到服务器上的wwwroot目录中(这里我们使用的恶意文件为一个PHP web shell):

当使用修改后的配置文件来生成APK文件时,就会生成包含恶意文件的一个APK文件,恶意文件位于我们构造的异常路径中。

将该APK上传到我们搭建的演示站点后,攻击者就可以在这个服务器上执行系统命令。只要任何在线或者离线服务在后台使用APKTool来解码APK文件,攻击者就可以对这些目标发起攻击。

当然,除了RCE以外,该漏洞还可以配合各种攻击方法加以使用,我们演示的这种方法只是其中一个攻击场景。事实上,利用路径遍历方法,我们可以将任何文件复制到文件系统中的任意路径中,这也大大拓展了攻击面的范围及种类。

三、总结

本文演示的这些攻击方法适用于跨平台及通用场景,因为APKTool可以在各种操作系统上运行,如果APKTool在系统上不受任何限制,攻击者也可以借此攻击这些系统。

想精确估计这个开源项目的用户数量是不可能完成的一个任务。然而,我们知道这些用户中包含一些大型服务及企业(如https://apk.toolshttp://www.javadecompilers.com/APKToolhttps://www.apkdecompilers.com/http://undroid.av-comparatives.info以及Cuckoo droid等),我们联系了APKTool研发人员以及IDE公司,他们修复了所有安全问题,发布了更新补丁,更新了相应软件的版本。

(完)