赛博红兔的科技博客

CyberHongTu shares news, insights, and musings on fascinating technology subjects.


我用弹幕封你号!程序员上演权力的游戏

想象一下,当你打开某个视频网站,想追番、查攻略、刷网课的时候。忽然精彩的视频消失了,迎面而来的是一行行醒目的弹幕“你的账号已经被封禁!!!!”是你的操作违规了?还是被黑客攻击了?可能你怎么也想不到你已经被一个讨厌你的程序员拖进了一场权力的游戏。

大家好,我是赛博红兔。这是不久前发生在某个一直亏钱却靠情怀支撑的视频网站上的一则真实新闻。为了保护大伙心爱的平台和所有当事人受害者还有Up我自己,这里我们隐去所有的隐私信息,就事论事地和大伙聊聊这场网络权力的游戏。一位网友近日发布的视频称自己的朋友被某个弹幕密度比观众脸皮还厚的视频网站前员工发生口水战。我就好奇深挖了一下,好像是关于这个游戏产生的分歧。我翻开他们的口嗨记录密密麻麻的,我横竖睡不着,仔细看了半夜,才从字缝里看出字来,满本都写着两个字——“环批”!然后,受害人就被恶意针对了,他的网页版被加载了恶意代码,原本正常观看的视频会被替换成空白的页面,并且出现了开头的“红灵入侵”事件。对方还曝出了用户的IP地址、网络服务类型和在该网站的浏览记录,这是要开盒的节奏啊。对方还扬言过几天连同他的客户端一起ban掉。

作为技术区Up,我当然主要从技术层面带大伙了解一下他的手法。看看他为什么这么嚣张?是技术的支配力还是权力的加持?我会讲得浅显易懂一些,没有前端技术相关基础的小伙伴们也可以放心服用,有什么地方讲得不好欢迎大伙讨论。其实这场权力的游戏没有什么魔法与龙。实际上,当事人的用户账号并没有被封禁,这只是该名员工在前端实施的恶意操作。据我分析,攻击者首先用JavaScript编写了一段类似这样的恶意代码,这段代码的主要功能是,把用户页面的内容换成“你的账号已经被封禁!!!!!”这样的提示,还阻止用户正常观看视频。

(document.body.innerHTML = `

    <div style=”color: red; font-size: 24px; text-align: center;”>

        你的账号已经被封禁!!!!!

    </div>`;)

然后,攻击者把这段代码放到了自己注册的一个域名上。这样,别人就可以通过这个 域名链接加载这到这段恶意代码了。接下来,攻击者在某个深夜靠鬼畜续命的视频网站前端代码里插入了一个 <script> 标签,专门用来加载他托管的恶意代码。当用户打开某个追番途中就能顺便学个编程的网站,浏览器会自动去加载这个恶意脚本,然后代码就会运行在用户的浏览器里。

(<script src=”https://www.jakobzhao.online/main.js“></script>)

大伙可能就要问了,攻击者是如何只对特定用户发起攻击的呢?我觉得这里可能有三种方法:

  1. 第一种可能是通过网络请求拦截来对特定用户进行攻击。通过浏览器提供的 API网络接口劫持网络请求,判断是否为目标用户的请求。打个比方,一家酒店的服务员特别讨厌一个客人叫张三。每次张三打电话需要服务的时候,服务员会先检查来电的房间号。如果电话是张三打来的,那么他就会挂电话,其他房间的电话还是会正常去接。这个只在特定行为触发时执行恶意代码,会极大减小对其他用户的影响。但是,需要非常了解前端请求逻辑还要有能够挂掉电话的高级权限。
  1. 第二种可能是使用服务器端也就是后端逻辑定向攻击,根据用户 ID 或者其他特征,只要用if语句,就能在生成页面时就决定只对特定用户嵌入恶意代码,而不是在所有用户的浏览器里执行。这个就像服务员不满足于挂张三的电话了,干脆直接在宾馆的后台系统动手脚。每次张三通过宾馆的主页投诉,系统都会自动跑一段逻辑:“if 用户是张三:把投诉消息扔到垃圾桶里。else:转给经理解决。”不过要做到这一点,服务员得是后台管理员,权限得高到飞起。
  1. 第三或者他也可以通过用户的特征信息(比如 Cookie)在前端来精确判断目标用户,同样可以用if语句。Cookie 中通常会包含用户的登录状态、用户ID等信息。这就好比张三气冲冲地跑到酒店前台投诉:“你们为啥封我号!”前台服务员抬头一看,“哎又是这个倒霉的张三啊!”还没等张三再开口,他就一脚把人踢出去了。这方法就只要有前端的权限就可以了。

结合这名前员工的简历和技术背景,兔哥觉得他最有可能用的是第三种方法也就是前端代码植入 + 定向攻击。有些人可能要问了:“等等,你咋知道这人的技术背景啊?”嗨,这个嚷嚷着要开别人盒的“高手”,自己马脚实在是漏得太多了,结果先被人给开了盒!刚才不是说受害用户的网页加载了个外部脚本吗?那个脚本的来源是一个非常“神奇”的域名。只要顺着这个域名一查,嘿!居然能查到是谁实名注册的!更有意思的是,翻这人的博客,他还大大方方贴着自己的简历,直接写明了他就在那个二次元和三次元用户和平共存的视频网站当前端开发工程师,专门负责弹幕引擎的开发和优化。哎,前端开发工程师?前端代码植入 + 定向攻击,这符合他的技术能力和权限。这个方法操作起来相对简单,只需在前端代码中添加 if 判断逻辑,就可以筛选出特定的目标用户。但是问题来了,有一定编程基础的朋友们都知道,工业级代码光是使用 if 语句是一个比较脆弱、危险的做法。因为所有用户都可能执行到这段代码,只是被条件筛选出来的用户才会触发攻击。一旦出现BUG或者意料之外的人为改动,这段无脑直接的代码可能导致整个视频网站大范围的误伤,诸位的网页都有可能被红灵入侵。其实说到这里,一个小小程序员的折腾还够不成太大的伤害。大型的互联网公司都会有代码审查和版本控制,像皇帝批奏折,得过“三审六问”,毕竟赏饭吃的算法和代码可不是谁想改就能改的。审查制度千挑万选,有PR审核、肩并肩审查、静态代码审查,而他只用自己审查。是的,自己编写自己审查自己提交,一些都是权力的游戏!他的傲慢就在于此。什么?你还在较真流程?别费劲了,全世界都是个大的草台班子,认真你就输了!

(if (userId === ‘123456’) { // 替换为攻击者的目标用户 ID document.body.innerHTML = ` <div style=”color: red; font-size: 24px; text-align: center;”> 你的账号已经被封禁!!!!! </div>`; })

事后,该用户和朋友在以电流声为灵感命名的平台上进行了投诉。目前,平台高度重视,成立了专门的调查小组。经过研究决定私下给用户打了个电话(播片)其实平台做得还是挺对的,我最想夸的一点就是他们没有背这口锅!毕竟,我们有一种传统文化,就是习惯性背锅,但实际上如果你细想的话,这事不是他们的错,完全是个别不听话员工淘气弄的,那就不要道歉。我们只承担我们能够承担的。对于客户来说,恶意代码删掉了,损失回档了,该看的视频都能看了,公司流量没有少,广告收入没受影响。您要是没什么别的想法,那就提前祝您新年快乐吧!



Leave a comment