独家分析:安卓“Janus”漏洞的产生原理及利用过程

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

近日,Google在12月发布的安卓系统安全公告中披露了一个名为"Janus"安卓漏洞(漏洞编号:CVE-2017-13156)。该漏洞可以让攻击者绕过安卓系统的signature scheme V1签名机制,进而直接对App进行篡改。而且由于安卓系统的其他安全机制也是建立在签名和校验基础之上,该漏洞相当于绕过了安卓系统的整个安全机制。

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

一旦攻击者将植入恶意代码的仿冒的App投放到安卓商店等第三方应用市场,就可替代原有的App做下载、更新。网友安装这些仿冒App后,不仅会泄露个人账号、密码、照片、文件等隐私信息,手机更可能被植入木马病毒,进而或导致手机被ROOT,甚至被远程操控。详情可以参考漏洞介绍预警文章

在第一时间监测到"janus"漏洞的情况后,顶象技术及时更新了"安全SDK"的防御策略,并率先发布了针对该漏洞的防护方案,以帮助广大用户防范基于该漏洞的攻击威胁。

分析显示,安卓5.0到8.0系统以及基于signature scheme V1签名机制的App均受"Janus"漏洞影响;基于signature scheme V2签名的App则不受影响。

安卓用户:

1、尽快升级到最新版安卓系统;

2、短期内,尽量到官方网站更新、下载App。

安卓开发者:

1、尽快将App APK(安装包)升级到最新的Signature scheme V2签名机制;

2、及时校验App APK文件的开始字节,以确保App是未被篡改;

3、顶象技术的"安全SDK"以更新防御机制,可以有效防护该漏洞。

"Janus"漏洞爆发原因是什么?

为了提升安卓系统的安全性,Google发布了新的签名认证体系signature scheme V2。由于,signature scheme V2需要对App进行重新发布,而大量的已经存在的App APK无法使用V2校验机制,所以为了保证向前兼容性,V1的校验方式的还被保留,这就导致了"Janus"漏洞的出现。

Google为什么发布signaturescheme V2呢?那就盘点一下,近年来安卓系统曾爆出的一系列安全问题吧。

这些年,安卓系统爆出的签名漏洞

"MasterKey"漏洞

"Janus"是一个签名与校验漏洞,其实,这不是安卓第一次爆出此类漏洞。在2013年 Black Hat上,Bluebox的安全团队公布了一个"MasterKey"漏洞。该漏洞影响包括当时最新的安卓6.0系统及以下所有系统。那么,这些漏洞是怎么形成的呢?

"MasterKey"漏洞原理是基于APK(ZIP文件格式)里面的多个ZipEntry实现的,具体如下:

  1. 向原始的App APK的前部添加一个攻击的classes.dex文件(A);
  2. 安卓系统在校验时计算了A文件的hash值,并以"classes.dex"字符串做为key保存;
  3. 然后安卓计算原始的classes.dex文件(B),并再次以"classes.dex"字符串做为key保存,这次保存会覆盖掉A文件的hash值,导致Android系统认为APK没有被修改,完成安装;
  4. APK程序运行时,系统优先以先找到的A文件执行,忽略了B,导致漏洞的产生。

修复方式:

禁止安装有多个同名ZipEntry的APK文件。

"9695860"漏洞

MasterKey漏洞爆出后没多久,国内的"安卓安全小分队"再爆出一个类似的漏洞。这个漏洞非常精巧:利用了Zip local file header在计算时候的一个整形溢出漏洞。

具体原因:

  1. 向原有的APK中的classes.dex文件B替换为攻击文件A,并添加一个大小为0xFFFD的extrafield;
  2. 将原始dex文件B去除头3个字节写入extrafield;
  3. Android系统在校验签名时使用的是Java代码的short,将0xFFFD以16位带符号整形的方式解析得到-3, 并解析出原始的文件B,Android认为程序APK无修改,正常安装;
  4. 系统在执行时使用C代码的uint16,将0xFFFD以16位无符号整形方式,得到攻击文件B。

这个漏洞的精巧之处在于,DEX文件以'dex'字符串开头,而classes.dex以这个字符串结尾,通过-3的值将这两个内容在文件中重叠起来,因此这也限制了"9695860"漏洞只能对classes.dex进行攻击。

"9950697"漏洞

在"9695860"漏洞爆出不久后,APK文件中被发现存在类似的整形溢出漏洞,这个比"9695860"漏洞更容易利用且可以攻击APK中的任意文件。

原因是安卓默认认为Zip中localfile header和central directory entry中的文件名长度和和extra的长度是一致的。安装过程中java代码在处理时出现溢出,读取到了正常的文件B,通过校验,APK正常安装。运行过程中,C代码处理时没有溢出,读取到了攻击的文件A。

Google发布了signature scheme V2签名机制

以上的一系列漏洞全部出在基于jarsigner机制建立起来的签名和校验机制signature scheme V1出现。Google也意识到了这套机制的缺陷,所以,发布了重新设计的Siginature scheme V2签名机制。

Siginature scheme V2 APK文件整个内容进行签名,目标是任何对APK的修改都会导致检验的失败。

目前signature scheme V2已经在安卓7.0系统及以上的版本中支持。

"Janus"漏洞的攻击原理、利用过程

攻击原理

1、安卓在4.4中引入了新的执行虚拟机ART,这个虚拟机经过重新的设计,实现了大量的优化,提高了应用的运行效率。与"Janus"有关的一个技术点是,ART允许运行一个raw dex,也就是一个纯粹的dex文件,不需要在外面包装一层zip。而ART的前任DALVIK虚拟机就要求dex必须包装在一个zip内部且名字是classes.dex才能运行。当然ART也支持运行包装在ZIP内部的dex文件,要区别文件是ZIP还是dex,就通过文件头的magic字段进行判断:ZIP文件的开头是'PK', 而dex文件的开头是'dex'.

2、ZIP文件的读取方式是通过在文件末尾定位central directory, 然后通过里面的索引定位到各个zip entry,每个entry解压之后都对应一个文件。

影响的范围

  1. 安卓5.0-8.0的各个版本系统;
  2. 使用安卓Signaturescheme V1签名的App APK文件。

**利用过程 **

1、攻击者可以向APK文件的开始位置放置一个攻击的DEX文件A;

  1. 安卓系统在安装时用ZIP的读取机制从末尾开始进行文件的读取,读取到了原始的APK内容,并且以V1的方式进行校验,认为这个文件是正常的,没有篡改,APK安装成功;
  2. 在运行时,Android的ART虚拟机从文件头开始读取,发现是一个DEX文件,直接执行,攻击文件A被最终执行。

带来的威胁

可以在没有apk所有者的证书的情况下对apk进行修改,并且绕过校验机制安装在用户的手机上,造成的可能后果如下:

  1. 对存储在原手机上的数据进行读取,例如金融类APP的银行密码、支付密码、token; 通信类APP的聊天记录、图片、通信录
  2. 对用户的输入做各种监听、拦截、欺诈,引导用户输入密码,转账。
  3. 利用这个漏洞可以更新Android的系统APP,从获得更高的系统权限,甚至root/越狱,为其他攻击做准备

顶象技术的防护及修复建议

顶象技术一直关注移动端、WEB端上的各类风险以及各平台的业务威胁。及时分析监测到漏洞和威胁,并做好针对性的防护措施,由此积累了大量与黑灰产对抗的实战经验。顶象技术将这些实战经验以"安全SDK"的产品方式共享给用户,从而帮助用户建立高效的防御体系,有效防御各类新型的、复杂的恶意攻击和威胁。

在第一时间监测到"janus"漏洞的情况后,顶象技术及时更新了"安全SDK"的防御策略,并率先发布了针对该漏洞的安全防护方案,以帮助广大用户防范基于该漏洞的攻击威胁。

安卓用户:

1、尽快升级到最新版安卓系统;

2、尽量到官方网站更新、下载App,短期内不用使用第三方安卓应用市场更新或下载App。

安卓开发者:

1、将App APK升级到最新的Signature scheme V2签名机制;

2、开发者及时校验App APK文件的开始字节,以确保App未被篡改;

3、使用顶象技术提供的安全SDK,以防范该漏洞的攻击。

顶象技术是互联网业务安全的引导者,致力于打造零风险的数字世界,成立于2017年4月,红杉资本中国基金成员企业。顶象技术拥有领先的风控技术和智能终端安全技术,其首创的"共享安全"理念已成为新一代安全产品的标准架构。通过全景式业务安全风控体系、无感验证、虚机源码保护、安全SDK等方案和产品,赋予电商、金融、IoT、航空、游戏、社交等企业提供BAT级的业务安全能力,让平台和用户免受薅羊毛、交易欺诈、账号盗用、内容被恶意抓取、系统和App遭破解等风险威胁。

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

相关推荐
selt7911 小时前
Redisson之RedissonLock源码完全解析
android·java·javascript
Yao_YongChao2 小时前
Android MVI处理副作用(Side Effect)
android·mvi·mvi副作用
两个人的幸福online2 小时前
cocos 使用 WebSocket(goEasy版)
网络·websocket·网络协议
非凡ghost3 小时前
JRiver Media Center(媒体管理软件)
android·学习·智能手机·媒体·软件需求
席卷全城3 小时前
Android 推箱子实现(引流文章)
android
齊家治國平天下3 小时前
Android 14 系统中 Tombstone 深度分析与解决指南
android·crash·系统服务·tombstone·android 14
白帽子凯哥哥3 小时前
如何从零开始搭建一个安全的渗透测试实验环境?
安全·web安全·网络安全·渗透测试·漏洞挖掘
爱宇阳4 小时前
Linux 安全加固:禁用 IPv6 ICMP 重定向
linux·安全·智能路由器
独行soc4 小时前
2025年渗透测试面试题总结-280(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
我也要当昏君5 小时前
计算机网络
计算机网络