点播文件防盗链二三事

作者:杨洁勇

导语

视频点播为公司大部分流媒体和音视频相关的业务提供上传、存储和下载等需求。所有文件存储在相同的仓库,提供CDN下载服务的oc节点也是共用的,所以存在各个各样的盗链问题。

1、背景介绍

于所有业务的文件都存储ftn,并且下载时提供CDN下载服务的OC节点也是相同的,所以为了识别某个下载链接是那个业务的,我们提供给业务的下载链接都会有一个相应的host用于识别各个业务(没有带上或者带上的host在下载服务没配置,直接禁止访问)。

为了防止用户或者黑客获取到下载链接后恶意访问文件,每个下载链接的url中都会带上一个vkey参数,里面包含了当前这个链接访问文件名hash值、vkey的生成时间、vkey的有效时长、通过此链接下载文件是否进行限速,当然这一切都是以一个不公开的算法加了密的。服务端收到下载请求后会解密vkey,并且对信息进行校验,限速,通过进行下一步给客户端吐数据,如果校验不通过,直接返回403.。下载链接如下:http://ip (or 域名)/host/filename?vkey

2、问题描述

首先所有文件都存储ftn,并且下载时提供CDN下载服务的OC节点也是相同的,并且除了音乐业务有自己单独的一套vkey校验库外(音乐vkey也是个坑,下面描述),其他业务(包括腾讯视频)都是用同一套vkey校验库,这就为盗链的存在提供了巨大的隐患。

1、通用的vkey算法被破解,或者一些腾讯视频精品库(付费会员才能观看)的文件对应vkey被获取后非法盗用,这时,恶意用户就可以利用这些漏洞,盗播腾讯视频精品库等内容(音乐同理)。

2、由于所有文件都存储ftn,并且下载时提供CDN下载服务的OC节点也是相同的,所有恶意用户可以利用任意业务的host下载任意业务文件(只要能正确生成vkey或获取vkey)。

3、音乐vkey校验算法没有校验文件名,也就是说获取到音乐的vkey后,可以利用音乐host下载任意业务文件。

4、音乐的vkey校验算法除了没有校验文件名之外,其实跟通过算法相同,也就是说拿到通用vkey,可以利用音乐的host下载任意文件。

3、解决措施

1、针对vkey被破解方法,这个是一个效率与安全的博弈论。或许最简单的方法是用公私秘钥(或者AES),这时候客户端知道算法也无法伪造vkey,但是公私秘钥加解密和签名耗cpu,并且要全网部署相关秘钥,怎么防止全网几千台服务秘钥不泄露等问题。通过腾讯视频播放页面或者正确的秘钥,这个更是无法阻止了,因为客户端可以任意抓包,总能获取到的下载的url。实际上也无法完全禁止文件被盗播。

那么先解决重点问题,点播这边最大的问题就是腾讯视频的精品库被盗播,利用腾讯视频自己的host和相关vkey,多次盗播视频这个问题,DC和CDN(OC)全部对腾讯视频的host接入腾讯视频那边的异步盗链打击,防止恶意用户利用腾讯视频的host盗播精品库。具体参考文章视频防盗链阶段总结。

2、针对获取到vkey后,利用非腾讯视频的host访问精品库问题,这时候这些host都死非腾讯视频业务,不能接入腾讯视频的异步防盗链打击。但是,正是由于他们是非腾讯视频host访问腾讯视频业务文件,所有禁止他们访问腾讯视频文件或者让它们只能访问自己的业务文件就解决了问题。

个业务接入时,我们都会为业务提供一个业务id(大业务不止一个,可能有多个),在源站是,但是CDN oc节点上无法获取文件对应的bizid(DC能从ftn获取到文件相关bizid),也就无法限制host访问相关文件。无法识别bizid,有没有办法从文件名识别是否为腾讯视频的文件。其实,最后就是根据文件名的规则识别为腾讯视频文件,最后全网禁止非腾讯视频的host访问腾讯视频文件。 并且腾讯视频自己启用新的vkey校验库,独立一套校验库算法。

3、点播业务除了腾讯视频,还有两大业务,音乐和空间。前面说了音乐的vkey校验没有校验文件名,拿到一个合法(或者自己生成)音乐vkey,通过音乐就可以访问任意业务视频文件(当然访问腾讯视频文件已经被我们通过识别腾讯视频文件名禁止掉了)。这样音乐的host就可能被利用来播放空间的视频文件(特别是带颜色的小视频)。

针对这种情况,首先源站的可以获取到文件对应的bizid,发现通过音乐host访问非音乐文件(bizid),直接禁止访问。那么CDN的OC节点呢,实际上空间视频的文件命名上已经呆了bizid,所有OC节点也能根据文件名知道相关bizid,禁止音乐盗播空间视频。(现在我们接入的业务都是要求文件命名问 bizid_uuid,4位+32位,但是腾讯视频和音乐文件属于比较先接入业务,命名没根据这个规则了,所以才有了前面第2点,根据腾讯视频其他规则来限制他被其他业务host盗播)。

4、效果与进展

图1和图2为非腾讯视频vcloud添加vid+后缀做限制,不允许访问腾讯视频文件。图2波动由于5月6日禁用一些音乐回源host,盗链全部换到dl.stream这个host引起。图3是源站限制host只能访问其相关的bizid文件之后音乐回源(源站dchttp)host盗链流量掉底。

图1

图2

图3

5、后续措施

A业务的host去盗播B业务的文件,此时,如果能识别通过文件名获取到任意一个业务的bizid,就能禁止这种现象。如A业务文件能获取到对应bizida,现在A的host只能访问bizida的文件;如果如B业务文件能获取到对应bizidb,禁止bizidb文件被A业务host访问。但是,如果出现无法从文件名中直接获取任意一个业务的id,就无法通过bizid禁止这种不同业务之间的盗播。所以,在内存允许的情况下,在OC缓存节点的filemgr(文件索引管理中记录每个文件的bizid),就可以做到业务之间不相互盗播文件。

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

iPhone密码可被暴力破解?苹果回应:测试有误

自苹果公司2014年发布iOS 8系统以来,所有的设备都可收到加密保护,无法在没有密码的情况下访问设备。并且存在连续输入10次错误密码即抹除相应设备的功能。看似...

1310
来自专栏安恒信息

Intel CPU漏洞影响公告

针对近日在Intel CPU中曝出Meltdown(熔断)和Spectre(幽灵)两大新型漏洞之后,安恒信息安全研究人员第一时间就同Intel官方沟通确认,经过...

2787
来自专栏花叔的专栏

微震,你感受到了么?

当你看到这篇文章时,证明这是公众号平台自动推送的。 别误会,我说的微震,是指微信的小震荡。 什么意思? 先说说大家能感受到的,微信最近搞了3个事情: 群发文章可...

3759
来自专栏用户3254834的专栏

干货丨小程序功能解读白皮书(一)

在微信公众平台里,关于小程序的消息目前停留在8月10号,这次公布了支持查看”我的小程序”添加数据、插件支持快速更新、小程序流量主广告收入分成比例上调等能力开放,...

692
来自专栏企鹅号快讯

虚拟系统管理Kaseya VSA遭黑客滥用 受感染系统秒变门罗币挖矿机

“用指尖改变世界” ? 根据网络安全公司eSentire在本周二发布的调查报告称,自2018年1月19日起,黑客开始利用Kaseya VSA(虚拟系统管理)存在...

1925
来自专栏BeJavaGod

Shiro系列(2) - 权限模型以及权限分配的两种方式

顶级账户分配权限 用户需要被分配相应的权限才可访问相应的资源。权限是对于资源的操作一张许可证。给用户分配资源权限需要将权限的相关信息保存到数据库。 这些相关内容...

3014
来自专栏云计算D1net

如何用渗透测试计划锁定你的云?

渗透测试是一项旨在确定和解决任何黑客可能利用漏洞的IT安全性措施。就如同传统数据中心广泛采用这一测试方法一样,很多企业的IT部门也在他们的公共云计算环境中使用着...

2808
来自专栏PHP技术

Go语言六周年,2016年初发布Go 1.6

原文出处: Andrew Gerrand 译文出处:oschina 2009年11月10日,Go 语言作为开源项目正式发布。从那开始,已经有超过 780...

34615
来自专栏顶级程序员

Wi-Fi 爆重大安全漏洞,Android、iOS、Windows 等所有无线设备都不安全了

移动设备横行的时代,Wi-Fi 已成为现代人生活的必备要素之一。但近日有计算机安全专家发现,Wi-Fi 设备的安全协议存在漏洞,如今用于保护 Wi-Fi 网络...

3024
来自专栏Golang语言社区

Bowery为什么放弃Node.js,转向Go?

英文来自:Moving from Node.js to Go at Bowery   Go 语言自从面世就受到了很多开发者的欢迎,越来越多的项目基于 Go 语言...

5158

扫码关注云+社区