您当前的位置:安全博客 > 安全漏洞 > APK 漏洞“黑影无处不在(Shadows Everywhere)”详解

APK 漏洞“黑影无处不在(Shadows Everywhere)”详解

阿里无线安全团队发表于2015年07月29日

       继上篇“Shadows Everywhere漏洞浅析,影响全部安卓用户”,Upgrade DOS可致数十亿Android设备瞬间变砖”,Apk升级漏洞Upgrade DoS详解”,Apk协作攻击漏洞'炸弹引爆'详解”,分别介绍了3种针对Android APK证书验证的攻击方法:证书欺骗(Certificate Cheater)、升级拒绝服务(Upgrade DoS)、炸弹引爆(Hide and Ignite)。接下来我们总结出了一套行之有效的攻击模式-Shadows  Everywhere,“黑影无处不在”意味着没有apk能够逃脱攻击,也没有apk是绝对安全的。利用它,我们能够攻击任意的合法APK,并且不改变其原始证书签名,进而能够进行正常传播和升级替代原官方原始应用。该漏洞能够轻易绕过Android的证书验证机制,进而实施代码攻击。

        本文已在BlackHat Mobile Security Summit London 2015大会上主讲,英文讲义可见https://www.blackhat.com/ldn-15/summit.html#what-can-you-do-to-an-apk-without-its-private-key-except-repacking。

       

1. Shadows Everywhere

       在引言的文章中,我们详细介绍了Android证书验证机制,并且给出了证书欺诈(图中绿色)、升级拒绝服务(图中黄色)、炸弹引爆(图中橙色)的技术细节。对于一个合法的完整的APK文件,其源文件Android Sources文件有数字摘要和数字签名来保证其完整性,但是/META-INFO文件夹中的内容没有采取任何的保护措施,图中所有用颜色标识的地方均可以被攻击者进行篡改。我们只要不触碰CERT.RSA中的证书公钥,以及其中的CERT.SF数字签名部分(当然这2者也保证了CERT.SF不能篡改),就可以对该文件夹做任意的恶意代码插入,并且能够保证插入代码后的apk能够正常安装,运行,而且可以和旧版本升级兼容。

       “Shadows Everywhere”是一种合作攻击模式,需要2个实体的相互协作:“Shadows” apk和“Igniter” apk。前者可以是任意的合法apk,例如从Google Play下载的合法应用,然后通过对/META-INFO文件夹的内容做修改/代码插入等操作,将隐藏代码“Shadows”包含其中;后者是攻击者构建的特定apk,将代码点燃器“Igniter”包含其中。需要指出的是,“Shadows” apk由于没有破坏其原始证书公钥和数字签名,它仍然可以和正常的合法应用一样安装,使用,乃至升级(包括从已有旧应用升级和升级到最新应用)。



        由于Android设计上的小缺陷,/data/app、/system/app、/system/priv-app这三个文件夹均提供了读权限给任意的用户,不需要root权限。因而,在同一个设备中,“Igniter” apk可以任意访问这三个文件夹里面的“Shadows” apk中的内容。这就使得,“Igniter” apk可以调用并执行“Shadows” apk中的隐藏代码。


协作攻击的特点是,当“Shadows” apk和“igniter” apk两者单独存在时,完全无害,大部分的安全软件根本无法察觉;而当两者碰在一起的时候,所造成的危害将是无法想象的灾难。


2. “Shadows Everywhere”攻击流程

       协作攻击步骤,可以分为3步:

2.1 将隐藏炸弹代码插入正常的apk中,使其成为“Shadows”藏身的apk。

2.2 通过正常的应用安装/升级过程,“Shadows” apk能够成功地打入移动设备内部,成为“in-device” apk。

2.3 通过第三方应用“igniter” apk,调用隐藏在设备中的“Shadows”,最终引爆整个设备,对手机/用户造成无法估量的危害。

大规模的攻击模式可以采取:

从Google Play上下载尽可能多的合法应用apk,然后往其中插入恶意Shadows代码。

将修改过的“Shadows” apk重新发布到第三方市场或是论坛上,尽可能地广泛和快速。

发布一款自己开发的正常应用,在主执行代码中添加一句“Shadows”点燃代码。

下面以Youtube为例,

正常的Youtube.apk中的/META-INFO文件夹:

将其安装进入设备,成功安装:

下面是我们插入“Shadows”后的Youtube.apk,插入了dex文件、甚至是apk文件:

在设备上已经有正常合法Youtube的前提下,仍然可以安装“Shadows” Youtube (若是设备上原本没有Youtube,更是可以直接安装,安装界面与上图正常Youtube的一模一样):


通过简单的POC,可以调用隐藏在Youtube中的“黑影Shadows”(这里以弹窗为例):


3. 漏洞危害与防护

       本文提出的是一种攻击模式,其危害与防护同“炸弹爆炸”漏洞。

       攻击者可以往任意的合法apk中(例如Youtube.apk, Twitter.apk等)插入恶意代码,并且不影响该apk的正常安装、运行与升级。然后,攻击者通过各种手段发布感染过的apk,假以时日,你的手机设备中可能会种满了各种各样的代码炸弹,而不自知,该过程可理解为“广撒网”;接着攻击者可以使用一款单独的点燃器apk,去引诱用户下载安装,去引爆手机中已被植入的代码炸弹,可理解为“多捞鱼”。

任意恶意代码可以植入apk中,通过安装/升级带入你的手机。

在没有“点燃”之前,代码炸弹能够填满你的手机,静静地等待“点燃器”的点火。你永远不知道你的手机中到底有多少不为人知的恶意代码。

“炸弹”和“点燃器”,单独存在时,两者都完全无害,因而可以躲过大部分的安全工具检测;但当两者碰到一起时,所产生的巨大危害是无法估量的。

本文中提到的“Shadows”,并不局限于具体的某一个或某一种木马病毒等,几乎可以囊括所有的恶意行为:隐私窃取、短信电话监听、密码账号盗取、网络钓鱼、远程执行、手机控制……

防范措施亦同“炸弹爆炸”漏洞:

普通用户:

      - 在安全的应用市场进行应用下载,防止恶意应用对系统漏洞的利用。
      - 对手机常作备份,若发生APP不能用等现象,可以通过安全备份进行恢复。
      - 尽量不要ROOT自己的安卓手机,ROOT之后,软件权限过大,可以直接利用漏洞。
      - 使用官方网站来升级系统应用。
      - 阿里钱盾提供了专业的木马/病毒检测,可以通过静态检测,有效地发现隐藏在apk中的恶意代码,在危险行为发生之前杜绝恶意代码

应用开发者:

- 为用户提供相对安全的升级通道。
       - 运用阿里聚安全的服务,防止自有开发的应用的升级新版本被篡改,被仿冒!

       Shadow Everywhere的更多详细细节,可见https://www.blackhat.com/ldn-15/summit.html#what-can-you-do-to-an-apk-without-its-private-key-except-repacking


                                                                                                                                       作者:肖鹏


安全漏洞