犯二安全漏洞一览 | 翻译
从湾区日报看到这条,感觉很好玩,观众们也想看一份翻译的版本。就翻来啦。有些不合适的意译请见谅。翻译能力不好也请见谅。
*更新:修改部分译文并进行了一定程度上的意译。 *
- 原文:Reckon you've seen some stupid security things? Here, hold my beer...
- 作者:Troy Hunt,开发者,微软区域经理(Microsoft Regional Director)之一,获得过“微软最有价值专家”(MVP)奖项。顺便说一下,他还是HaveIBeenPwned的创建者,那是一个检测自己的账户信息是否被泄露的网站。
原文采用 CC BY 4.0 协议授权。图片存储于 https://sm.ms。
我的妻子 Lars Klint 某天发了这条推:
你的密码不是唯一的。
(via Twitter @LarsKlint)
我自然把这条转发了。因为——让我们面对这个现实吧:总会有点无法理解的破事。推上有一半人回复觉得这挺恐怖,也有一半人以严辞斥责这种漏洞。(因为他们没看出来这是个在 Reddit 上长久流传的笑话。)不过这种情况确实存在——有可能会发生这种问题。说真的,我见过挺多很蠢的安全人员做出的例子。上面那种东西就不只是“可信”的了,而且很可能已经出现在了正被一些人使用的服务中。你不信?现在来给你看一点。建议你先来一片速效救心丸。
“记住我”
让我们设想一下,你想做一个“记住我”的功能,你知道的,就是你选上一个框然后你下次访问这网站的时候就已经登陆了的那个意思。Black and Decker 是这么实现的:
是的,这就是个放在Cookie里的你密码的 base64 编码版本,而且....是的,它被不安全地附在每一个发送出去的请求中而且....是的,它没有被标记为“Secure”(Cookie 的 Secure属性,即此 Cookie 仅通过 HTTPS 传输,保证了在绝大多数情况下,其中的信息不会被第三方获取 - 译者注),所以就被以明文传输了。
有没有考虑到这事挺不好的?试试 Aussie Farmers 的实现,就在我刚才提到的那篇文章里:
哇哦,这很“安全”(Secure)啊!不过这仍然是一个在 Cookie 里的密码,而且仍然不是“仅HTTP”(Cookie 的 HTTPOnly 属性,即此 Cookie 不能通过客户端脚本访问,保证了在绝大多数情况下,其中的信息不会被恶意脚本获取 - 译者注)的。而且在它们的网站上还有反射型 XSS (XSS(Cross Site Scripting),即跨站脚本攻击。对于反射型 XSS 漏洞,骇客可以通过引诱用户点击其精心构造的链接,来窃取用户的数据 - 编者注)的威胁。而当他们了解到这种情况,他们是如何回复的呢?这让我想到了下一点...
公司的回应
从2013年开始,我就在忠心耿耿地做这个事,让 Aussie Farmers 了解这个安全风险。我也建议他们不应该把密码通过邮件(夹杂在一堆其它令人作呕的东西中)发送出去。然后我收到了来自一个职位是“市场经理”的人的回复:
目前我们还没有收到任何来自用户的关于通过邮件发送密码存在的安全问题的反馈,而且据我所知实际上我个人注册的 90% 的网站也都是这样做的。
这让我想到了这条来自 Oil and Gas International 的回复。我刚在某一天写的一篇关于我新的 HTTPS 课程的文章中引用了这个。这就是让他们感到非常闹心的地方,因为火狐现在开始就不安全的登录表单向用户发出警告了:
(如果你在用新版的火狐,你也可以体验到这种情况:试着登录一下你的网易邮箱。 - 译者注)
你们的 不安全的密码传输(和/或)登录 的提醒自动出现在了我的网站的登录框中。Oil and Gas International 公司并不想要这样的提醒,并且这种提醒也没经过我们的允许。请立即移除这个提示。我们有我们自己的安全系统,并且在超过15年中它从没被攻破。你们的提醒让我们的用户感到担心,并且对我们的经营也有损害。
他们的网站在不久之后,呃...不工作了(可能并不是因为 SQL 注入)(指对于数据库的攻击 - 译者注)。现在恢复了,不过我不知道他们有没有重置那个“15年”的纪录。
当我们在讨论这么点没意义的安全评论的时候,British Gas 曾经也有不太轻松的时候:
Pascal Hartig @passy @BritishGasHelp 禁止粘贴,也就意味着禁止使用密码管理器,并不是标准惯例。这是没有必要的而且是危险的。
British Gas Help @BritishGasHelp @passy 如果我们允许粘贴(密码)的话,我们会失去安全认证的。这会导致我们可以被“暴力”攻击。谢谢 ^Steve
(暴力攻击,即进行相当多次的密码组合尝试来侵入账户的行为 - 编者注)
另外即使我们在这样的高度上去找,也不容易找到一个 Tesco 这样的在 Twitter 上这么疯狂的公司:
不过,想要安全地重置密码也很难的!不是我瞎说,看看这条...
密码重置
一切都由这个引起:
Paul Sawers @psawers @BetfairHelpdesk 更改密码只需要用户名和出生日期是对的么?
现在你可能在想:“哦,你的用户名就是你的邮件地址,然后 Betfair 就会发给你一封Email 然后你就可以通过一个独一无二的链接来重置密码” - 但是看到这里你就会知道这太符合逻辑了(太不够安全了),以至于不应该被使用啊。但是令人惊奇的是, Betfair 实际上并不相信 Paul 的说法,于是我就做了一个视频来解释这事:
(视频略,https://www.youtube.com/watch?v=YjBBmfovL08。主要是验证了在 Betfair 可以只通过邮箱和生日来重置密码)
这视频(解释了这漏洞)就是它听起来的那样 - 如果你知道一个人的邮件地址和出生日期,你就可以把他的密码重置成任何内容。但是要利用这种漏洞也会有一点阻力,这种阻力来自于个人信息的交换:我猜想 Betfair 的客服一定是板着脸敲着键盘,而善良地提醒 Paul 如果他把他的邮件地址和出生日期透露给别人,他就违反了用户协议。
Paul Sawers @psawers @BetfairHelpdesk 你现在好像在回避这个问题啊 -- 一个人只需要用户名和出生日期(就可以重置别人的密码),这应该么?
Betfair客户服务 @BetfairCS 是这样的,但是他们需要从你那里得到这些信息,再说一遍,这是违反我们的协议的。
你现在知道他们真的需要什么了么?安全问题...
安全问题
我就把这条放这:
这是我见过的最烂的安全问题了。
(via Twitter @mariehuynh)
啥?这问题太笼统了?试试这个:
我刚上过的网站上设置的安全问题是:“你祖母的狗叫什么名字?” 我日。
(via Twitter @madpilot)
因为安全问题就是扯淡!我的意思是这几条相对更扯淡,但是总体上来说把一个恒久不变的数据,像是你母亲的娘家姓,或者是你第一辆车的型号,或者是短暂不变的数据像是你最喜欢的电影(作为重置密码的答案的想法)... 就是这个安全问题的想法就蠢到有资格在这篇文章中占有一席之地!让我们看点更疯狂的...
登录
你知道啥是困难的么?记密码。如果有个简单点的方法就更好了:
呃... 当真?这真是蠢到新新新高度。
(via Twitter @JAllmanTalbot)
然后在你说“但这只是一条推甚至都不一定是真的网页”之前,我得说这是真的,archive.org的网页快照在此:
在我们都疯了一样地说“密码必须死”之前,没人知道怎么做到这点。有许多技术解决方案但实际上没人想用。一个简单的事实是,我们拥有比过去更多的密码,但它们却不会被泄露。不过,我已经看过更烂的东西了...
物理安全
这真不是个放这个看起来比它本身更荒谬的标题的好地方。所以我就直接把例子举出来吧:
(HDMI线缆用于传输视频与声音 - 译者注)
你知道我写在这的这事么?试想,你不懂技术的朋友和亲人想把电视和DVD播放器连接起来。它们走到商店,选了两个 HDMI 线缆然后翻到盒子后面看。他们比较着参数 - 其中一个有病毒防护而另一个没有 - 他们会怎么做?!
现在,再来最后一点...
账户枚举
我想把最好的留在最后。这确实是最好的,因为这仍然是一个常见的很蠢的安全缺陷,不可思议地蠢。不过呃,至少他们正在修复了:
我们将要更改我们的登录系统。在此同时,用户仍然可以使用我们的快速结账功能。请保持对我们的关注!
(via Twitter @ Strawberrynet)
不算现在我写这篇文章的时间,那是8个月之前了。那么这个愚蠢的安全缺陷是什么呢?嗯想象一下:你访问 Strawberrynet 然后选了点不错的化妆品啊粉底啊什么的这种我没啥概念的东西放到购物车,然后点击结账按钮。你会看到这个:
所以你输入了一个Email地址 - 任何在这个网站上有账号的Email地址 - 之后你看到的就是,呃,其它某个人的个人信息:
等等 - 啥?!这完全就像是他们把个人数据交给任何有一个注册了的Email地址的人。有许多人都在用这个站因为它在前5000名最大的网站中。所以你可以访问上去,输入一位女性的姓名(这站点卖的大部分是化妆品)加上一个知名的电子邮件服务的域名,然后你就能看到了!然后为了防止你认为“呃这真是太可怕了”,嗯不,这实际上是一个功能:
请知悉在我们做过的调查中,大部分用户都喜欢我们没有密码的系统。用你的Email地址当做密码就足够安全了。
不这不安全!而且他们也不那么认为!我八月份的时候就写过关于网站枚举攻击的文章,在其中揭露了他们早期那条推的问题。他们看起来完全忘记了这个问题。我甚至自己创建了一个账号来了解这漏洞怎么利用:
(这个漏洞现在也还没被修复,各位可以去这个站点看看,随便选点什么然后结账,填上troyhunt@hotmail.com,然后你会看到有趣的一幕...)
我觉得我得再吃粒速效救心丸...
后记
此处黑一下 Markdown,也黑一下 MSDN。URL 里有括号的情况,除了转为 %28
、%29
,就没有别的优雅的办法了么?
感谢Hom提供的解决方案。顺便说一句,他也是引用 MSDN 出现的这个问题。