前言
老周不止一次的在公开场合说到,安全是360公司的底线,我们必须坚守。在360公司,有这样一支队伍,他们每天与时间赛跑,和黑暗势力进行着较量。在威胁面前,他们从不畏惧,在安全问题上,他们从不妥协。他们常说安全探索永无止境,做好企业安全、产品安全,就是在保护360所有用户的安全。但是安全从来都是越闭塞问题越多,联动的力量越大,安全系数越高。
360SRC平台上就聚集着众多有识之士,他们不仅安全能力出众,而且及其富有正义感。正是有他们在,我们才可以拥有更强大的力量来一起捍卫亿万互联网用户的安全。
很多人对我们的工作感到好奇,于是我们试图通过一个真实的安全应急事件为您还原一个真实的工作内容。
2016年5月6日 14:23
360SRC平台收到白帽子mango提交的名为《奇酷手机任意文件读取》漏洞,经mango测试发现奇酷手机受ffmpeg文件窃取漏洞影响,通过一段视频,就能获得手机中的文件内容,包括用户的通讯录,短信以及其他的敏感文件被远程盗取,泄露用户的隐私信息。
FFmpeg的是一款全球领先的多媒体框架,支持解码,编码,转码,复用,解复用,流媒体,过滤器和播放几乎任何格式的多媒体文件。支持无数编码的格式,比如,HLS。
HLS(HTTP Live Streaming)是苹果公司开发的一种基于HTTP协议的流媒体通信协议。它的基本原理是把一个视频流分成很多个ts流文件,然后通过HTTP下载,每次下载一份文件。在开始一个新的流媒体会话时,客户端都会先下载一个m3u8(播放列表 Playlist)文件,里面包含了这次HLS会话的所有数据。
2016年5月6日 14:30
漏洞转交到负责Android系统安全研究的同事处根据漏洞描述进行验证。负责验证的同事看到漏洞详情描述之后,表示这有可能是一个乌龙事件。
FFmpeg SSRF与本地文件读取漏洞最初是在国外漏洞平台曝光,去年在某CTF比赛中也被使用。今年1月,官方发布了修复版本并公布了该漏洞。一方面360手机系统应该早已更新到了新版本。另外,在ffmpeg SSRF与本地文件读取漏洞爆发后,负责奇酷手机安全检测的同事就对所有的手机版本进行过逐一排查,但并未发现奇酷手机集成了libffmpeg.so文件。
但本着严谨认真的安全态度,同事还是做了再次验证和排查。
通过对比修复补丁发现,特征字符串为“file,”,在编译好的so文件中的rodata段中能搜索到字符串“file,”,证明此so版本为修复后的版本。具体的扫描代码如下:
command = '.rodata'
cmd = "readelf -S %s | grep 's%s'" % (file_path,command)
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
ret,err = process.communicate()
rets = ret.lstrip().split(' ')
if len(rets) == 0:
continue
r = []
for _a in rets:
if _a != "":
r.append(_a)
if '.rodata' not in r:
continue
rodata_type = 0
if r[1] == '.rodata':
rodata_type = 3
if r[2] == '.rodata':
rodata_type = 4
if rodata_type != 0:
with open(file_path,'rb') as f:
f.seek(int(r[rodata_type],16))
data = f.read(int(r[rodata_type+2],16)).replace('','n')
if 'detect bitstream' in data:
rr = data.split('n')
if 'file,' in rr:
print ‘not vul’
else:
print ‘vul’
经上面的扫描代码排查发现,360手机系统并未及时更新至官方修复后的版本。同时也并未查到libffmpeg.so文件。
2016年5月6日 14:59
我们开始与白帽子进行沟通,请白帽子将测试时用的文件打包发给我们,然后进行再次的复现排查。最后发现文件管理器apk打开文件夹后,文件夹里的恶意视频文件会自动触发,读取指定文件,并回传到服务器。
负责奇酷手机安全检测的同事对文件管理器apk进行了分析,并没有发现解析视频的模块。也查过调用的系统功能解析视频文件,在系统库中也并没有找到libffmpeg.so文件。无奈之下把/system/lib和/system/lib64文件夹下的所有so文件提取出来,逐个对每一个文件进行检查,到底要看看究竟是哪个文件集成了ffmpeg的功能。
经查后,果然发现了一些端倪,发现是libavdemuxer.so文件集成了libffmpeg的视频解析功能,并改名为libavdemuxer.so,而libavdemuxer.so集成的是ffmpeg的2.6.1版本,而此版本正受该漏洞的影响。果然“工业级代码”害死人。在此,我们强烈建议开发人员养成良好的安全开发习惯,规范命名。
最后确认该漏洞属于远程利用的信息泄露中危漏洞。同一时间,我们将问题反馈给业务线,让他们升级libavdemuxer.so所使用的ffmpeg版本,并通过OTA为用户升级。
如果您有使用ffmpeg的程序,请参照下面的版本进行升级:
FFmpeg 2.8.x系列升级至2.8.5或以上;
FFmpeg 2.7.x系列升级至2.7.5或以上;
FFmpeg 2.6.x系列升级至2.6.7或以上;
FFmpeg 2.5.x系列升级至2.5.10或以上;
或直接使用FFmpeg 3.0.x版本。
目前APPScan(http://appscan.360.cn/)已经支持对ffmpeg漏洞的扫描。
你以为剧情到这里就结束了?怎么可能,我们还要给提交漏洞的白帽子进行现金奖励。(360手机漏洞奖金细则:http://security.360.cn/News/news/id/68.html)而且“任性”的同事马上对行业安全情况进行了深入的分析。
通过对手机助手市场提供的124371款app扫描,发现受此漏洞影响的产品数量为6314款,占总数的5%。并对其中受影响的app所使用的ffmepg库文件做了个top10统计。
其中使用率最高的libeasemod_jni.so属于环信sdk所带的库文件,libcyberplay-core.so是百度开放云播放器的Android SDK。
通过深入研究发现,即使使用了低版本有漏洞的FFmpeg库文件,如果app业务功能中未涉及到HLS功能,将不会触发漏洞逻辑,避免了危害的发生。环信sdk就是这样的一种情况。
上图是受影响app分类top10。
感谢
再次感谢360SRC所有像mango一样的安全专家,也欢迎更多的安全专家和团队加入我们(http://security.360.cn/),因为我们相信:有你们,更安全。