首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让 iPhone “崩溃” 又有了新方法:只需要一个视频

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

原创
作者头像
腾讯玄武实验室
修改2017-08-09 09:37:58
1.6K0
修改2017-08-09 09:37:58
举报

作者:马彬

导语

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

一、 概述

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

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

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

二、 分析

1. 排查原因

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

[1502163029033_1720_1502163029863.png]
[1502163029033_1720_1502163029863.png]

进一步的使用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等等,中间还会有熵解码、帧内预测等各种复杂的流程,会导致非视频行业人员理解起来非常抽象和困难。

[1502163091679_1414_1502163092322.png]
[1502163091679_1414_1502163092322.png]

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

[1502163111978_932_1502163112748.png]
[1502163111978_932_1502163112748.png]

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刚刚推出,还有很多人未更新,这种危险的东西就不分享出来了。

[1502163153874_714_1502163154408.png]
[1502163153874_714_1502163154408.png]

三、 检测

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导语
  • 一、 概述
  • 二、 分析
    • 1. 排查原因
      • 2. 分析原因
        • 3. 将任意mp4畸形化
        • 三、 检测
        相关产品与服务
        检测工具
        域名服务检测工具(Detection Tools)提供了全面的智能化域名诊断,包括Whois、DNS生效等特性检测,同时提供SSL证书相关特性检测,保障您的域名和网站健康。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档