专栏首页腾讯玄武实验室的专栏让 iPhone “崩溃” 又有了新方法:只需要一个视频
原创

让 iPhone “崩溃” 又有了新方法:只需要一个视频

作者:马彬

导语

一则新闻“ iOS 又曝新漏洞,播放特定视频导致自动关机 ”在媒体上广泛传播,实际上玄武实验室在10月15日就发现了该视频样本,在深入分析后,我们在微信后台对能够触发这种漏洞的恶意视频进行检测和拦截,保护了大量用户免遭攻击。

一、 概述

11月23日,一则新闻“iOS又曝新漏洞,播放特定视频导致自动关机”在媒体上广泛传播。任何苹果设备在播放某个视频后,就会在几秒内卡死,无法响应任何操作,持续3-5分钟后整个系统自动重启。由于从iOS 5到最新的iOS 10.1系统都会受到影响,且部分媒体贴出了恶意视频样本,一时间这个恶意视频被通过各种渠道大范围传播。

我们实验室在10月15日捕获了该恶意视频样本。经过深入分析,我们写出了针对该漏洞的检测工具,并通过我们实验室和微信安全中心的相关合作项目,在微信后台对该恶意视频进行检测和拦截,保护了大量用户免遭攻击。

苹果在刚刚发布的iOS 10.2中除修复我们实验室报告的8个漏洞之外,也已经修复了该漏洞,因此在这里分享一下我们对这个问题的研究。

二、 分析

1. 排查原因

我们拿到的样本是一段秒拍的视频,自然首先想到可能是秒拍的问题或者人为的利用iOS 0day构造传播。考虑到视频中嵌有作者信息,因此我们找到视频的作者,用该作者的其他视频进行播放测试。在作者发布的仅有的3个视频中,均使用同样的视频模版,视频长度也几近相同。我们进行对比播放后,发现只有样本视频会crash,其他视频均播放正常。考虑到视频样本在秒拍上的转发量较小,因此排除人为构造的情况。

进一步的使用010editor对比两个mp4文件,除了Duration字段和mdat(编码后的视频数据区)内容区别外,其他文件头字段内容均相同。因此排除了视频文件格式的问题,我们基本确定问题出在iOS的硬解码处理上。

2. 分析原因

为了分析清楚问题原因,我们对H264的文档进行了非常艰苦的学习。

在H.264中,图像以frame为单位进行组织,即我们平时所说的“帧”。每一个frame的数据可以分为多个slice(片),片分为I片、B片、P片,slice header和data通过NAL进行封装。一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像,H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。每一个slice又由多个MB(宏块)组成,一个宏块由一个16×16亮度像素和附加的一个8×8 Cb和一个8×8 Cr彩色像素块组成。如下图所示,视频数据经过层层编码成为了mp4文件中的mdat数据,因此h264的解码也要经过frame decode、NAL decode、Slice decode、MB decode等等,中间还会有熵解码、帧内预测等各种复杂的流程,会导致非视频行业人员理解起来非常抽象和困难。

在熟悉了H264编码相关知识后,我们发现问题可能出在视频样本的第126帧,对应的数据如下图。其中”00 00 00 C5“代表了NAL单元的长度,”05“代表了第一个Slice 为IDR Slice,之后的数据为slice data。

H264解码时会进行宏块预测,在宏块预测的时候需要用到当前宏块左边、上左、上边,上右位置的宏块有关的信息,因此在预测前需要先填充这些信息。如果填充完成后没有对宏块是否可用检测,在不可用的block上进行帧预测,就会发生错误。

而该视频的第126帧数据的偏移0xED(11101101)和0xFF(11111111)两个字节恰好会导致解码过程出现上述错误。采用哥伦布编码方式对其进行解码运算后,对按照特定方式进行填充cache,进而导致top block不可用。通过010editor把ED和FF改为E0和00后, 我们将修改后的视频用iOS设备测试发现并不会crash,因此确认问题出现在ED和FF这两个字节。

3. 将任意mp4畸形化

上述视频样本是由于ED和FF两个字节导致的crash,那么是不是在任意帧内加入ED和FF两个字节就会触发漏洞呢?

答案是否定的。由上述分析可知,根本原因是MB中的top block或left block不可用才导致的crash,因此必须在熵解码时候对应的字节处修改,而且不一定必须修改为ED和FF两个字节。

将恶意视频的那一帧直接拷贝到一个正常的视频中也是不可行的,这是因为iOS视频解码部分还会对帧的长度进行判断,最重要的是解码过程中还要受SPS和PPS影响,当两个视频的SPS和PPS不同时,解码时就会有差异。

在研究中,我们写了一个自动化的工具,能够很快的将一个任意mp4变成攻击视频,而且不影响视频的播放画面。考虑到iOS 10.2刚刚推出,还有很多人未更新,这种危险的东西就不分享出来了。

三、 检测

基于上述分析,开发出100%检测率的工具并不困难。但由于恶意字节可能出现在视频的任意一帧中,因此检测工具需要逐帧解析,因而理论上如果要确保100%的检测率,就不可能实现很高的检测效率。于是我们基于实际运营中遇到的情况,针对流行样本变异规律,开发出了既能应对各种变种样本,又有极高检测效率的轻量型的检测工具,平衡了准确率和检测效率,取得了较好的效果。在开发机上基于1000个mp4文件作测试,平均每个检测时间0.003秒。以最大视频19M为例(微信最大支持20M),检测只需要0.22秒。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • IE 浏览器 DOM 树结构概览(下)

    DOM (Document Object Model)作为现代浏览器的基础,其设计和实现方式影响着整个浏览器的表现。对安全研究者而言,了解 DOM 的结构更是有...

    腾讯玄武实验室
  • 四个字节的安全 :一次固件加密算法的逆向分析

    这篇文章源自我们的一个检测项目,项目中我们需要对设备的固件进行分析,在整个固件分析的过程中我们克服了很多困难,最后完整解密了设备固件的内容,这里将相关的内容做个...

    腾讯玄武实验室
  • 深入解析 DLL 劫持漏洞

    2010 年 8 月,微软发布安全通报 2269637,同时网上公布了大量受影响软件的名字,DLL 劫持漏洞开始进入大家的视野。

    腾讯玄武实验室
  • 短视频源码是怎样一步步走到现在的?

    最早,短视频app仅作为工具性app出现在大众面前,后历经多年的发展,摇身一变,以一种多样性的形象展现于大众眼前,这其中,短视频源码有着怎么样的发展历程呢?让我...

    手机直播系统源码
  • 短视频背后的“长线”和“大鱼”

    孟永辉
  • 直播短视频系统开发,新系统开发需要哪些功能

    一个新的直播短视频系统开发需要伴随一些新功能和必备的功能,我们今天来说一下必备的功能都有哪些。

    yunbaokeji柯基
  • 如何做一个技术类的视频

    个人运营了一个技术类的视频网站大概有半年多时间了,目前原创代表作《腾讯云产品体验实战课》和个人生活类相关的视频等。 从一个小白到目前一个菜鸟也算有一些个人经验和...

    研究僧
  • 短视频源码开发为什么要接入SDK?有哪些优势?

    短视频行业的发展前景乐观是毋庸置疑的,整个短视频的市场规模一直在增长,网络数据显示2018年已经突破100亿大关,在2019年预测将超过200亿。那么,对于短视...

    布谷安妮
  • 短视频源码开发中,源码快速搭建,关键点无非就是这两个

    短视频的火爆基于他对于移动互联网时代用户触媒习惯的符合,另一方面,基于各类互联网平台的产品功能、用户群体以及短视频内嵌需求的差异性,也给予了“短视频+”不同的滋...

    布谷鸟小刘
  • 究竟是什么造就了抖音、快手的火爆?

    孟永辉

扫码关注云+社区

领取腾讯云代金券