想象一下,你现在是一个坐拥千万订阅者的知名 up 主。一天半夜三点,你收到了同为 up 主好朋友的夺命连环 call,说你的频道被「黑」了。
等你镇定下来、打开浏览器,你发现你的千万订阅频道的图标和名字,都被黑客改成了不知道哪来的商标,而且还在进行诈骗直播。你尝试夺回频道控制权却无果,最后呆坐在电脑前束手无策,只能眼睁睁地看着你的频道被站方直接封禁……
这就是 Linus Sebastian 在上周的遭遇。作为拥有 1500 万订阅者的 Linus Tech Tips 频道主理人和众多有影响力频道的创始人,无论哪一个频道被入侵,都有可能会给公司、众多观众乃至社会造成不可估量的影响。
夜里三点被迫起床和黑客斗智斗勇的 Linus 图源:视频截图
那么,在 Linus 的公司里,到底发生了什么?在发生入侵后的第二天,Linus 在他被找回的频道里向观众娓娓道来频道入侵事件的详细始末。从 Linus 的讲述中可以得知,黑客通过「伪名攻击」(impersonate attack,又称「身份伪造攻击」)手段,通过 Linus 的雇员的无心之举,成功入侵频道,进而进行加密货币诈骗直播。
想要讲清楚这种攻击的手法,我们可以从一个(假想的)酒吧说起。
▍脸盲的酒保,和明文的会员卡
我们假设你经常去一家酒吧,每天下班都过得去小酌一口。这里的酒保有脸盲症,每次跟他聊天都得说上很多背景信息,他才能跟上你的想法。但除此之外,这家酒吧卖的酒非常上乘,酒保也非常彬彬有礼,你也就将就在这里,作为下班后的去处。
有一天,这家酒吧突然宣布了一个优惠活动:可以一次性购买大量的酒,直接享受折扣优惠。这时候你问酒保:你不是脸盲吗?我在你这里存了酒,你怎么知道谁是谁呢?酒保嘿嘿一笑,拿出一个本子,说,你存了酒,我会给你一张会员卡。你下次把卡拿给我,我会在本子上划掉你的消费。
你一想,好像也没毛病,于是你当即下单,酒保也给了你一张会员卡。这张会员卡上写着酒吧的名字和地址,以及一个会员卡号。第二天,你去酒吧里,你把会员卡掏出来,酒保看到之后会心一笑,拿笔在本子上核对、涂画,然后就给你上了一杯酒。
脸盲还是别当酒保的好——扯远了
我们把故事先暂停在这里,回到相对更技术一些的讨论上来。我们使用互联网浏览器访问网页,所使用的技术叫做「超文本传输协议」(HTTP)。当初在设计这个协议的时候,设计者并没有考虑到网站与用户有交互行为的需求,因此 HTTP 就被我们称作是无状态的(stateless)协议——也就是在故事中的「脸盲的酒保」。
这在互联网网站被用于信息单向传输、还没有发展出用户交互的年代来说没有什么问题,那时候的网民浏览网页就是用来看看新闻。直到各种各样带有交互功能的购物、社交网络等网站的兴起,让「脸盲的酒保」犯了难:我给你上完酒(加载完网页),我就不认得你了,每次上酒还得问你一大堆东西,那可不成。
于是,Cookies——也就是上面这个故事里的「会员卡」——就呼之欲出了。这是一个从网景浏览器开始就拥有的技术,它的作用就相当于是在你的本地浏览器中登记网站地址和一些能证实你身份的信息(也就是会员卡上的酒吧名字和会员卡号)。
每次使用浏览器访问网络时,网站或多或少都会在你同意的前提下,向你的浏览器中写入 Cookies 信息,包括你的登录状态和行为轨迹都会作为 Cookies 被存储。这样,只要 HTTP 这位酒保随身带一个小本子(你可以理解为后端服务器的数据库),就能轻松辨别每一位顾客。
大概是这样的对等关系
说到这里,你可能要问:那这 Cookies 和老莱的频道被入侵,到底有什么关系呢?这就得说到这张「会员卡」的一大硬伤——本地明文存储,以及针对这个硬伤而出现的「伪名攻击」手法。
▍如何利用伪名攻击「偷酒」?
我们继续刚才那个故事:你刚到公司的时候,随手把公文包往桌子上一放,就去上了厕所,回来之后你也没有发现什么异常。直到晚上去酒吧喝酒的时候,酒保告诉你,你卡里已经没有存的酒了。
这不对啊,这卡里剩下的酒,少说还能喝一个月啊?你问酒保是不是看错了。酒保说,在一个小时前,你把这卡里剩下的酒划到了另外一个人那里。你看,我这本子上还登记着呢。
在你的不懈调查之下,你终于查清了事情的真相:原来,你的同事在趁你去上厕所的时候,从你(没有加锁的)的公文包里找到了你的会员卡,记下卡号,又找人按着卡号做了一张假的会员卡,并在一个小时前把你卡里的酒划给自己。由于酒保没有在会员卡上做任何的防伪措施,加上酒保本身就是个脸盲,当然不会知道把卡划掉的人不是你。
没错,现代浏览器的 Cookies 存储系统,实际上是一个没有加密的本地数据库。加上桌面端操作系统的沙箱机制不完善或经常被绕过,就导致浏览器的数据,实际上被放在「没有加锁的公文包」里。只要稍不留神,任何图谋不轨的人都可以在你的眼皮子底下,把你的公文包里的东西翻个底朝天,然后利用你的会员卡号来伪装成你进行操作。
还记得刚才说过,「登录状态」会作为 Cookies 存储吗?这个「登录状态」,实际上是在你登录之后生成一段随机字符串。服务器将这段字符串与你的账户联结起来,然后要求你的浏览器作为 Cookies 存储,之后,浏览器向服务器发送请求时,只需要携带这段随机字符串,服务器就能知道是谁在发起请求。
这段随机字符串的学名,就叫做「会话令牌」(Session Token)。也就是说,如果有人获得了你的会话令牌,理论上就获得了你的「登录状态」,以你的身份在网站上进行操作了。
你的会员卡还在,但是卡里管着的钱都没了
接下来,我们终于可以回到 Linus Tech Tips 入侵事件事发之初,看看到底发生了什么。据 Linus 自己的说法,他的某位雇员在查收一封商业合作邮件时打开了邮件里附加的文档,但电脑没有任何响应。实际上,这是一个伪装成正常 PDF 文档的恶意软件。
这个软件,背后是一组针对在 YouTube 上有影响力的创作者的黑客。通过向创作者们群发邮件,黑客就会寻找「不小心」打开他们的恶意软件的人,并通过由恶意软件盗取的会话令牌来获得创作者的 YouTube 频道控制权。由于会话令牌是在登录后分配的「登录状态」,因此伪名攻击并不需要破解用户的登录凭证,包括密码和验证码等,因为他们偷到的就是你的「登录状态」,所以这些凭证再安全也没有用。
▍妥善保管「会员卡」,从正确的上网习惯做起
了解整个入侵事件的来龙去脉之后,我想你也许已经了解这张不起眼的「会员卡」的重要性了。在日常的网上冲浪过程中,想要避免 Cookies 被盗取,最重要的就是养成良好的安全意识和安全习惯。
例如:
• 由陌生人发来的所有邮件(或者熟人发来的不明所以的邮件)中的附件或链接,一定不能直接打开,最好是通过杀毒软件进行扫描后再打开。
• 一定要先完整检查文件后缀名和网站域名,确认无误后再打开。
• 如果有条件,在虚拟机或 Windows 沙箱中打开这些可疑文件和链接。
• 最好将操作系统的「显示文件后缀名」选项打开——这样,伪装成普通文档的恶意程序就可以很轻松地「现形」。
• 不要在从搜索引擎随便搜出来的不知名的小网站中胡乱下载东西。
• 不要使用浏览器的密码保存功能——对,这些密码在浏览器里也会和 Cookies 一样,被保存进「没加锁的公文包」里。
当然,这些安全提示不仅是「基操」,网上也有大量的文章来教你如何操作,这里就不多展开,有兴趣的可以自行上网搜索。这里我们提及一些容易被忽视的文档安全问题。
现代常用的文档文件格式(例如 Word 和 PDF 等),或多或少都会带有交互功能。这些功能有时被称为「宏」,也有时直接叫 JavaScript APIs,等等,但它们都可以执行一些简单的交互操作。很多黑客也瞄准这一点,将恶意代码通过这些功能,写入看似正常的文档中,进而神不知鬼不觉地在你的电脑上安装恶意软件。
在通常情况下,这些交互功能在大多数软件中是被禁用的。这也是 Word 或 Adobe Acrobat Reader 等软件在打开一些文档时候,会在软件顶部弹出安全警告的原因——它们告诉你这个文档试图执行一些交互代码,且已被默认禁用。
但是,现实中有很多人,这些提示看都不看直接点「允许」,殊不知这样的操作会给电脑和个人数据安全带来极大威胁。
在各种软件发出安全提示时,请务必养成仔细阅读安全提示的习惯,了解允许和拒绝所带来的风险;即使要允许,也一定要确保来源可靠、可追溯,切勿当一个只会批、不会读的「批奏章皇帝」。归根结底,还是需要养成对应的意识和习惯,毕竟小心驶得万年船。
▍大公司,请把锅背好
现在大多数的社交媒体和网站,为了提升用户日常使用的体验,通常都不会制定「超时吊销登录令牌」的规定,也不会经常要求用户进行二次密码验证(即使是在修改敏感信息之前)。
这就为黑客进行伪名攻击提供不小的便利——毕竟,如果登录令牌会在很短的时间内或在异常使用时失效,或是修改频道标志、名称等敏感信息之前需要进行密码验证,黑客能对账户进行的破坏行为就会大大减少。
这一点在 Linus 的视频里也有提及:YouTube 的母公司 Google 好像并没有针对这类攻击,对 Google 账户的安全系统做出任何改良——早在 Linus 被攻击之前半年左右,中国大陆另一个有影响力频道「电丸科技」创始人 AK 也遭遇伪名攻击,攻击的方式、手法、目标与 Linus 的遭遇如出一辙;甚至现在去 YouTube 上以相关关键词搜索,还能搜索到对应的加密货币诈骗直播(以及创作者们的各种抱怨)。
从这一点来看,Google 没有理由不知道 YouTube 创作者们的频道现在处于不安全的状态下,而 Google 自己似乎在有意或无意地忽略了这些安全隐患。而要防止这些安全隐患,只需要几个简单的逻辑和存储,就可以完成。
所以,在此呼吁各路互联网公司,多在一些系统机制设计上,考虑到用户的账户和信息安全问题。
毕竟,「账户安全」这四个字很多时候并非只是鼓励用户拿到更高的「安全分」就能完成的;一些简单的机制设计,就能为用户的账户安全提升几个数量级,同时很多时候并不需要以牺牲用户体验为代价。
https://sspai.com/post/79066?utm_source=wechat&utm_medium=social
责编:北鸮