老周不止一次的在公开场合说到,安全是360公司的底线,我们必须坚守。在360公司,有这样一支队伍,他们每天与时间赛跑,和黑暗势力进行着较量。在威胁面前,他们从不畏惧,在安全问题上,他们从不妥协。他们常说安全探索永无止境,做好企业安全、产品安全,就是在保护360所有用户的安全。但是安全从来都是越闭塞,问题越多,联动的力量越大,安全系数越高。
360安全应急响应中心(以下简称360SRC)平台上就聚集着众多有识之士,他们不仅安全能力出众,而且及其富有正义感。正是有他们在,我们才可以拥有更强大的力量来一起捍卫亿万互联网用户的安全。
很多人对SRC的运营感到好奇,今天我们就通过一个真实的安全应急事件为您解惑。
2016年5月6日 14:23 |
360SRC平台收到白帽子mango提交的名为《奇酷手机任意文件读取》漏洞,经mango测试发现奇酷手机受ffmpeg文件窃取漏洞影响,通过一段视频,就能获得手机中的文件内容,包括用户的通讯录,短信以及其他的敏感文件被远程盗取,泄露用户的隐私信息。
FFmpeg的是一种多媒体框架,支持解码,编码,转码,复用,解复用,流媒体,过滤器和播放几乎任何格式的多媒体文件。支持无数编码的格式,比如,HLS。
HLS(HTTP Live Streaming)是苹果公司开发的一种基于HTTP协议的流媒体通信协议。它的基本原理是把一个视频流分成很多个ts流文件,然后通过HTTP下载,每次下载一份文件。在开始一个新的流媒体会话时,客户端都会先下载一个m3u8(播放列表 Playlist)文件,里面包含了这次HLS会话的所有数据。
14:30 |
漏洞转交到负责Android系统安全研究的同事处根据漏洞描述进行验证。
负责验证的同事看到漏洞详情描述之后,表示这有可能是一个乌龙事件。
FFmpeg SSRF与本地文件读取漏洞最初是在国外漏洞平台曝光,去年在某CTF比赛中也被使用过。今年1月,官方发布了修复版本并公布了该漏洞。一方面手机系统应该早已更新到了新版本。另外,在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(' ')
- iflen(rets) == 0:
- continue
- r= []
- for_a in rets:
- if_a != "":
- r.append(_a)
- if'.rodata' not in r:
- continue
- rodata_type= 0
- ifr[1] == '.rodata':
- rodata_type = 3
- ifr[2] == '.rodata':
- rodata_type = 4
- ifrodata_type != 0:
- withopen(file_path,'rb') as f:
- f.seek(int(r[rodata_type],16))
- data =f.read(int(r[rodata_type+2],16)).replace('\0','\n')
- if 'detect bitstream' in data:
- rr = data.split('\n')
- if 'file,' in rr:
- print ‘not vul’
- else:
- print ‘vul’
经上面的扫描代码排查发现,手机系统并未及时更新至官方修复后的版本。同时也并未查到libffmpeg.so文件。
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
千里之堤,溃于蚁穴。感谢老天让我们有像mango一样的安全专家,为360产品安全保驾护航。也欢迎更多的安全专家和团队加入我们,因为我们相信:有你们,更安全。