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

news2025/7/21 1:00:53

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

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

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

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

timg.jpg

在第一时间监测到“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进行攻击。

2.png

“9950697”漏洞

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

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

3.png

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解压之后都对应一个文件。

4.png

影响的范围

  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大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1102386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红黑树与AVL树

文章目录 前言一、AVL是什么?二、AVL的插入与删除插入删除 三、红黑树是什么四、红黑树的插入与删除插入删除 五、红黑树与AVL树的对比 前言 红黑树与AVL树是数据结构中避不开的话题,也是面试中常问的问题。今天就把他们总结在一起。 一、AVL是什么&am…

基于ChatGPT的智能客服助手

导读1.应用场景与系统框图2.搭建基于ChatGPT的智能客服助手 2.1 ChatGPT原理2.2 Prompt设计3.智能客服系统二期优化之用户问题分类 3.1 Bert简介3.2 用户问题分类网络训练数据3.3训练分类模型4.智能客服系统三期优化之商详和质检项相关知识筛选5.总结6.参考文献 导读 传统客服…

Web自动化测试:测试用例断言!

运行测试用例时,需要判断用例是否执行成功,此时需要有一个我们期望的结果来进行验证。这里unittest中,如果一个case执行的过程中报错,或者我们判断结果不符合期望,就会判定此条用例执行失败,判断的条件主要…

leetcode3. 无重复字符的最长子串 [滑动窗口]

题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释:…

蓝桥杯每日一题2023.10.17

迷宫 - 蓝桥云课 (lanqiao.cn) 题目描述 样例: 01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001100110100101 01111011010010001000001101001011100011000000010000 0100000000101010001101000010100000101010101100…

视频批量添加背景图片教程,详细步骤一看就会

你是否曾经需要为多个视频添加相同的背景图片?或者你需要为一些视频添加自定义的背景来增强视觉效果?如果你遇到了这样的问题,那么有一个软件可以帮助你解决,那就是固乔剪辑助手。下面是一个简单的步骤指南,教你如何使…

如何快速定位BUG?BUG定位技巧及测试人员定位的N板斧

很多测试人员可能会说,我的职责就是找到bug,至于找原因并修复,那是开发的事情,关我什么事? 好,我的回答是,如果您只想做一个测试人员最基本最本分的事情,那么可以这么想。但是&#…

基于边缘网关构建水污染监测治理方案

绿水青山就是金山银山,生态环境才是人类最宝贵的财富。但是在日常生活生产中,总是免不了各种污水的生产、排放。针对生产生活与环境保护的均衡,可以借助边缘网关打造环境污水监测治理体系,保障生活与环境的可持续性均衡发展。 水污…

数据结构-----红黑树(全)

目录 前言 一、什么是红黑树? 二、为什么需要红黑树?(与AVL树对比) 三、红黑树的特性 四、红黑树的储存结构 五、节点旋转操作 左旋(Left Rotation) 右旋(Right Rotation) 六、…

警惕!又2本Hindawi期刊被剔除,Scopus期刊目录更新!(附下载)

【SciencePub学术】 01Scopus目录更新概况 此次Scopus期刊目录更新后,有5本期刊不再被收录(Discontinued titles September 2023),同上次更新时相比,此次又新增93本期刊(Accepted titles)进入Scopus数据库。目前Scop…

Intelijj中报java版本错误

这次编译一个半年没动过的老项目,报了几次版本错误,通过多次尝试最终解决掉了该问题 错误一:Diamond types are not supported at language level 6 错误背景 该错误出现在intelijj中,打开项目后,下面的代码的后一个…

红海云签约COMMUNE,新兴餐饮行业加速人力资源数字化转型

COMMUNE是一家连锁餐酒吧品牌,将酒水自选区、超级吧台与经典就餐区三大功能板块有机融合,创建“复合商超零售经典西式餐饮”模式,是面向新中产阶层消费客群的全时段餐酒吧。 近日,连锁餐酒吧品牌COMMUNE母公司极物思维集团与红海…

C++ Builder 将运行时需要的库打进运行的程序包

一、打开【工程】–【选项】–【Linker】-- 设置【Use dynamic RTL】为 False 二、打开【工程】–【选项】–【组件包】-- 设置【和运行时组件包一起编译】为 False

Apipost使用介绍

相信无论是前端,还是后端的测试和开发人员,都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致,导致协作低效、频繁出问题,开发测试人员痛苦不堪。 API管理的难点在哪? 开发人员在 …

Qt Creator编译含opencv的程序时报错libopencv_calib3d.so:-1: error: error adding symbols

错误信息: /home/lyc/Exe/opencv-3.4.16/opencv_install/lib/libopencv_calib3d.so👎 error: error adding symbols: File in wrong format 进入libopencv_calib3d.so所在的目录,利用file查看文件格式。 由于libopencv_calib3d.so最终软链接…

Nginx的代理和负载均衡

一、nginx的代理方式 1.1 七层代理 七层代理:基于http协议,对请求的内容进行处理,然后转发到后端服务器 七层代理是客户端请求代理服务器,由代理服务器转发客户端的http请求,转发到内部的服务器进行处理(服务器可以是…

搭建NGINX服务 如何统计网页访问量

一、搭建Nginx服务 搭建之前需要查看一下我们的内核数制 我们进行简单的内核优化 命令:ulimit -n 65535 安装Nginx服务 第一步 关闭防火墙和安全机制 systemctl stop firewalld #关闭防火墙 systemct disable firewalld #开机自动关闭防火墙 setenfor…

Netty-SocketIo 完美替换 nodejs 的 socketio

背景 前段时间接到一个任务,用Java重构一个nodejs项目,其中用到了websocket的功能了,在nodejs项目中用的是socketio框架来实现websocket的功能,前端对应的也使用了socketio jar包。 一开始对socketio的用法并不是很清楚&#xff…

Unity Ugui 顶点颜色赋值

一、效果图 如下图:图片和文字的颜色都可以渐变,透明度也可以渐变。 原理分析: 不管是图片Image或是文本Text,它们都是网络Mesh来渲染网格是由很多三角形组成,那么我们根据坐标修改三角形的颜色即可实现。 工程源码…

进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)

目录 目录 API 1.0 Arrays 类的说明 1.1 Arrays 类中的 toString() 静态方法 1.2 Arrays 类中的 copyOfRange(int[] original, int from, int to) 静态方法 1.3 Arrays 类中的 copyOf(int[] original, int newLength) 静态方法 1.4 Arrays 类中的 setAll(do…