我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何进行Janus安卓签名漏洞预警分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何进行Janus安卓签名漏洞预警分析

这期内容当中小编将会给大家带来有关如何进行Janus安卓签名漏洞预警分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

0x00背景介绍


2017年7月31日 GuardSquare向Google报告了一个签名漏洞并于当天收到确认。Google本月修复了该漏洞,编号CVE-2017-13156。

经过360CERT分析确认,该问题确实存在,影响较为严重。攻击者可以绕过签名验证机制构造恶意程序更新原有的程序。

0x01 事件概述


该漏洞产生的根源在于将DEX文件和APK文件拼接之后校验签名时只校验了文件的APK部分,而虚拟机执行时却执行了文件的DEX部分,导致了漏洞的发生。由于这种同时为APK文件和DEX文件的二元性,联想到罗马的二元之神Janus,将该漏洞命名为Janus漏洞。

0x02 事件影响


影响Android5.0-8.0的各个版本和使用安卓V1签名的APK文件。

0x03 事件详情


1.     技术细节

Android支持两种应用签名方案,一种是基于JAR签名的方案(v1方案),另一种是Android Nougat(7.0)中引入的APK签名方案v2(v2方案)。

如何进行Janus安卓签名漏洞预警分析

v1签名不保护APK的某些部分,例如ZIP元数据。APK验证程序需要处理大量不可信(尚未经过验证)的数据结构,然后会舍弃不受签名保护的数据。这会导致相当大的受攻击面。此外,APK 验证程序必须解压所有已压缩的条目,而这需要花费更多时间和内存。为了解决这些问题,Android7.0中引入了APK签名方案v2。在验证期间,v2方案会将APK文件视为 Blob,并对整个文件进行签名检查。对APK进行的任何修改(包括对ZIP元数据进行的修改)都会使 APK 签名作废。这种形式的APK验证不仅速度要快得多,而且能够发现更多种未经授权的修改。

如何进行Janus安卓签名漏洞预警分析        如果开发者只勾选V1签名不会有什么影响,但是在7.0上不会使用更安全的V2签名验证方式;只勾选V2签名7.0以下无法正常安装,7.0以上则使用了V2的方式验证;同时勾选V1和V2则所有机型都没问题。此次出现问题的是V1签名方案。简单地说,把修改过的dex文件附加到V1签名的apk文件之前构造一个新的文件,V1方案只校验了新文件的apk部分,而执行时虚拟机根据magic header只执行了新文件的dex部分。

如何进行Janus安卓签名漏洞预警分析

         我们来看一下已经公布的POC (https://github.com/V-E-O/PoC/tree/master/CVE-2017-13156)的原理。janus.py接受dex文件和apk文件作为输入,组合起来输出。

         读取dex文件:

如何进行Janus安卓签名漏洞预警分析

读取apk文件:

如何进行Janus安卓签名漏洞预警分析

      Apk其实就是一个zip。简单地说zip文件格式由文件数据区、中央目录结构和中央目录结束节组成。

如何进行Janus安卓签名漏洞预警分析

其中中央目录结束节有一个字段保存了中央目录结构的偏移。代码中搜索中央目录结束节的固定结束标记x06054b50定位到中央目录结构的偏移,将其加上dex文件的大小,因为我们要把dex文件插到apk前面。

如何进行Janus安卓签名漏洞预警分析

      接下来依次更新中央目录结构数组中的deHeaderOffset字段也就是本地文件头的相对位移字段。通过deHeaderOffset字段可以直接获取到对应文件的文件数据区结构的文件偏移,就可以直接获取到对应文件的压缩数据了。同样也是因为dex文件插在前面了所以直接加上dex文件的大小。

如何进行Janus安卓签名漏洞预警分析

最后更新dex部分的file_size字段为整个dex+apk的大小,使用alder32算法和SHA1算法更新checksum和signature字段。

如何进行Janus安卓签名漏洞预警分析

如何进行Janus安卓签名漏洞预警分析

下面做一个非常简单的测试。

在APK文件中写一个弹出Hello的toast,同时采用V1签名方案签名:

如何进行Janus安卓签名漏洞预警分析

安装到手机上:

如何进行Janus安卓签名漏洞预警分析

将编译好的apk解压得到dex文件,baksmali.jar反编译dex文件得到smali代码,将hello随便改成另外一个字符串:

如何进行Janus安卓签名漏洞预警分析

用smali.jar回编译成dex文件,使用提供的脚本把dex文件和原来的apk打包生成out.apk:

如何进行Janus安卓签名漏洞预警分析

安装到手机上成功通过了签名校验并且执行了修改的dex中的代码:

如何进行Janus安卓签名漏洞预警分析

在我android8.0没有打补丁的手机上如果采用了V2签名方案不受该漏洞影响,更新不了原来正常的程序:

如何进行Janus安卓签名漏洞预警分析

2.     补丁分析

补丁非常简单,强制校验了zip的frSignature:

如何进行Janus安卓签名漏洞预警分析

0x04 修复建议


开发者在开发应用程序时勾选V2签名方案

各厂商应及时发布补丁,确保用户尽快更新系统

用户应在正规的应用市场下载程序

上述就是小编为大家分享的如何进行Janus安卓签名漏洞预警分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何进行Janus安卓签名漏洞预警分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何进行Janus安卓签名漏洞预警分析

这期内容当中小编将会给大家带来有关如何进行Janus安卓签名漏洞预警分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。0x00背景介绍2017年7月31日 GuardSquare向Google报告了一个签
2023-06-19

如何进行Intel CSME 漏洞预警的分析

本篇文章为大家展示了如何进行Intel CSME 漏洞预警的分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。0x00 漏洞背景英特尔公布:在英特尔 CSME,英特尔服务器平台服务和英特尔可信执行引
2023-06-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录