我注意到,新的gmail登录名先询问用户名,然后在询问密码输入之前先确认该用户名是否存在。是否存在,以阻止尝试许多可能的用户名的攻击类别?

评论

尝试使用某些用户名注册不会显示相同的信息吗?

如果是电子邮件提供商,我相信已经可以通过向用户名发送电子邮件并查看发送的用户名(即使被标记为垃圾邮件)和退回的用户名进行了编号,因此问题不大。

通过telnet连接到gmail,然后尝试向随机ID发送邮件。您将轻松知道该ID是否存在。还有许多其他类似的方法可以知道ID的存在。

从可用性的角度来看,这种“常规智慧”完全是愚蠢的-我必须记住我使用了4或5个电子邮件地址中的哪个,并尝试使用大约十个左右的密码来进行登录?好吧,我要做的事情比尝试登录50次更好,所以我只需要再次重置密码即可。

完全同意史蒂夫的观点。需要更多地考虑安全性的可用性方面。没有它,用户将做出错误的安全决策,从而使他们的生活更轻松。我们的系统应该使他们的生活更轻松,以帮助他们做出良好的安全决策!我对这样的系统的另一个不满意之处在于,在登录时没有重复密码规则(长度,可接受的字符等);它是公共信息(注册时),那么为什么要让用户四处寻找呢?

#1 楼

对于较小的网站,您不希望允许黑客枚举您的用户列表,但是对于Google,该网站如此庞大,您可以假设几乎每个人都有一个或多个帐户。因此,在普遍存在的阈值之后,将风险降至最低。

对于大多数站点来说,不公开用户名是否存在仍然是一个好主意,但是需要权衡新用户注册过程的风险。您要防止的是一个自动过程来枚举您的列表。新的用户注册过程应包括某种形式的延迟或限制,以使脚本无法快速尝试使用用户词典。这通常是通过发送包含注册过程不成功的电子邮件来实现的。是的,仍然可以枚举,但是有一个延迟和一个额外的步骤。 Google是一项公共服务,用户名也是公共的(在帐户发送的每封电子邮件中均已公开)。另一方面,内部公司站点是私有的,只有现有员工可以访问,该站点是私有的,并且需要更严格的控制以防止枚举。

评论


实际上,用户名不会在电子邮件地址中披露。电子邮件地址可能显示为joe.bloggs@gmail.com,但该用户的用户名可能是j.oeb.loggs@gmail.com。使用Gmail,圆点在电子邮件地址中并不重要,但对于验证登录ID至关重要。

–安德鲁·利奇(Andrew Leach)
2015年5月9日12:35

@AndrewLeach如果我遗漏了点,Google可以让我登录,它们似乎也可以进行登录。

– Eric G
15年5月9日在16:27

@EricG然后就是...

– schroeder♦
2015年5月9日16:30

那已经改变了;他们曾经指出差异。也许人们无法应付与众不同的情况。在我看来,这是合理的,而且我不记得有关此更改的公告(但是我不认为他们会宣布降低安全性,即使最初只是出于默契而已。

–安德鲁·利奇(Andrew Leach)
2015年5月9日17:16

他们肯定也有可能(尽可能)检查这种自动枚举吗?如果“用户”尝试使用的用户名超过(很少)数量,则可以肯定他们不是真正的用户。

– OJFord
2015年5月10日下午2:26

#2 楼

Jeff Atwood在登录Discourse时,对这个话题有这样的说法:

这是在Discourse上进行长时间讨论的原因,该讨论涉及在用户进入时向用户显示是否有意义“忘记密码”格式的电子邮件地址,无论我们是否已记录该电子邮件地址。在许多网站上,以忘记密码的形式输入电子邮件地址后,您会看到以下消息:

如果帐户与name@example.com相匹配,您应该会收到一封包含以下说明的电子邮件:如何在短期内重设密码。

请注意此处的“ if”,这是对所有安全隐患的一种对冲,仅通过将其输入忘记的密码即可揭示网站上是否存在给定的电子邮件地址密码表。
我们对于为Discourse选择安全的默认值非常认真,因此,开箱即用时,您不会被垃圾邮件发送者利用,滥用或滥用。但是在经历了现实世界之后,“我们又在这里使用了哪封电子邮件?”我们自己在数十个Discourse实例上的登录状态,我们意识到,在这种特定情况下,用户友好比安全更重要。


评论


非常有趣的结论。基本上,他们宁愿自动应对无法记住他们使用哪个登录名的用户,也不愿保护其用户列表免遭暴力破解。我不能为他们说话,但这听起来更像是他们在说“最小化支持数量比确保安全更重要”。

–杰夫·梅登(Jeff Meden)
15年5月8日在20:40

降低支持量(通常)也通常对用户更友好-难以使用,以致大量用户需要联系支持,这与良好的可用性相反。

–约翰尼
2015年5月9日,0:10

安全不是要应用任意规则和最佳实践。它是在考虑提供实际服务的同时,了解所有控制措施和对策如何协同工作以及相对价值。如果您具有缓解控件来解决了解用户名的用处(例如,尝试登录的IP地址监视,失败的尝试锁定,将攻击者列入黑名单等),则用户名枚举的风险值将下降。

– Eric G
15年5月9日在16:25

@JeffMeden在这里看到了Tom Leek的答案-隐藏用户名提供的“安全性”充其量是最小的。

–詹森
15年5月12日在18:13

#3 楼

对于Gmail,您只需通过向@gmail.com地址发送电子邮件即可确定帐户是否存在。如果该邮件退回,则说明该帐户不存在。

许多电子邮件提供商都是如此。在此,用户名不被视为秘密。如果用户的电子邮件地址为foo@example.com,那么每个人都知道fooexample.com上拥有一个用户名为foo@example.com的帐户。如果有人发现bob@example.comnostringsattacheddating.example.org上有一个帐户,而鲍勃的妻子爱丽丝(Alice)可以尝试在网站上使用用户名bob@example.com进行注册,并告诉他们该用户名已被使用,则这是对隐私的严重侵犯。

请记住,电子邮件地址源于电子邮件提供商。如果已知eve@example.comexample.com拥有一个帐户,则不会丢失隐私,因为eve@example.com是谁的参考点。对于使用电子邮件作为用户名的另一个系统,情况并非如此-在非电子邮件网站上具有用户名mallory@example.com的用户将与在其他网站上注册的用户名相同。隐私可以保护Mallory拥有哪些帐户。

此外,泄露用户名可能对攻击者有用。这称为用户名枚举漏洞。如果攻击者知道存在哪些用户名,则他们可以进行密码猜测攻击。


作为攻击者,如果我可以使用您的登录名或忘记密码页面来
,请缩小我的列表。从10000个目标到1000个目标。


攻击者也可以通过网络钓鱼将系统用户作为目标。无法执行用户枚举的系统。例如,注册和忘记密码的过程是相同的。

步骤是:


系统要求输入用户名(电子邮件)在单个页面上,没有其他输入字段。
提交表单后,系统会要求用户检查其电子邮件帐户。
如果该帐户存在,则电子邮件包含密码重置链接。
如果该帐户不存在,则电子邮件包含签名-向上链接。

作为奖励,您在注册时已验证了他们的电子邮件地址,以防他们以后需要重置密码。任何错字都将意味着用户根本无法注册-这很好,因为用户不会意外使用已注册到其他电子邮件地址的帐户。

密码和注册链接包含加密安全的随机ID,因此在未收到电子邮件的情况下无法遵循它们。只有拥有该帐户访问权限的人才能知道用户名是否已注册(Bob最好对Alice保密,以免他的电子邮件和笔记本电脑密码-如果在Alice尝试尝试此过程的情况下,最好关闭任何通知声音,对于他来说,最好将其关闭我也是在同一房间)。

有关其他主题,请参阅我的其他一些答案: >在您的注册表格上使用“不再可用的电子邮件”功能是否安全?
电子邮件验证后是否应进行基于密码的登录?为什么?
忘记密码的最佳实践,可以泄露给定的电子邮件无效
在Web应用程序注册期间为用户生成密码是否安全?


评论


“对于Gmail,您可以仅通过发送电子邮件来确定帐户是否存在”:通常情况并非如此。如果您向不存在的地址发送太多电子邮件,则会被阻止。

– Nemo
16年8月2日在20:52

#4 楼

我敢肯定,这条规则是在“大铁”时代发展起来的,当时所有帐户都在大型公司或政府系统中。由于系统分发帐户名称,因此使用注册页面查找帐户名称不是问题。因此,保留帐户名称列表是可行且有用的。

现在我们正在处理自注册网站,因此无法对帐户名称列表保密。另外,无论如何,这些天来有这么多人公开其帐户名称。在这种情况下,试图隐藏事实是名称失败而不是密码是没有意义的。

#5 楼

知道存在或不存在哪个用户名并不重要,因为攻击者还可以从注册页面中对其进行检查。 Google不允许攻击者进行暴力破解之类的攻击来获取用户名列表。

评论


因此,从根本上说“登录时不返回用户不存在”的规则是神话吗?它曾经带来过安全方面的改变吗?

–ataftoti
15年5月8日在18:22

确实会带来安全差异。例如,我有一个人们登录的Jira实例。我为我的团队创建了帐户,这不是自我注册。因此,公开用户名的唯一方法是通过注册过程。一切都取决于可用性的权衡。在公共站点上,经常需要告诉人们用户名是否存在,但这并不意味着公开该信息就没有风险。设计师应了解自己所暴露的内容,并设置其他技术限制,以确保它不会导致广泛滥用。

– amccormack
15年5月8日在18:58

从登录页面进行检查的功能不是通用的。最佳做法是说即使该电子邮件已经存在,它也已发送到该地址,并提醒该人某人试图再次使用其帐户注册或只是不再发送该电子邮件。同样,区分电子邮件地址和用户帐户也很重要。诸如Internet银行之类的用户帐户通常是不公开的,因此应相对于根据定义必须是公开的内容进行保护。

– Eric G
15年5月9日在16:23

这种“常规智慧”主要是安全剧院。

–史蒂夫·多迪尔·拉扎罗
2015年5月10日下午5:20

#6 楼

有一个更重要的原因是首先提示用户名,然后提示输入密码:它允许Google为使用无密码身份验证或其他实验性登录机制的帐户提供不同的UI,而无需事先告知正在使用哪个帐户。 br />这类似于在输入密码后才显示Google的2Factor身份验证用户界面的方式:攻击者甚至在破解了第一个因素后才知道第二个因素。

结合其他有关用户名泄漏的相对非风险的答案,在我看来这实际上是一项安全改进。

#7 楼

电子邮件地址与用户名不同。用户名是(可能是)半私人信息,但是电子邮件地址是可公开公开和可公开路由的。想一想邮政邮件,如果经常知道它的邮寄地址,但是尽管通常也可以通过多种方式在网上查找,但当前的有效收件人列表并不一定要公开。对于Google之类的公司,他们拥有Google +,YouTube,Google网上论坛等,这些地址已经众所周知。电子邮件地址存在,使用telnet或许多网站都可以为您完成。保护以其他方式可以轻松访问的信息几乎无济于事。这就是为什么某些站点将用户名的电子邮件地址分开的原因。对于电子邮件提供商,对于普通用户而言,使用不同的登录名和电子邮件地址实际上没有任何意义(也许我们中那些更偏执的人会喜欢该功能)。 br />切换到两步登录可以减少将用户密码输入搜索字段或用户名字段的可能性。这些字段通常被记录下来,并且日志在各地都具有关联性,因此不太可能得到保护。因此,如果日志受到黑客或国家/地区的攻击,则攻击者可能能够将用户的IP地址与其用户名相关联,然后注意到类似“ m7p @ 55w0rd !!!!”的内容。

在风险管理方面,密码暴露的风险远大于用户名枚举的风险。 Google可能具有更强大的反欺诈和异常跟踪功能,以处理与已知用户名相关的风险。

我认为了解这一点的一种好方法是FAIR简介(pdf)中的Tire Swing示例。已知用户名的风险计算会受到其他控件和因素的影响。您是否停止暴力攻击,需要多因素身份验证,还如何获得此信息?在这种情况下,实际上,您可以在您可以控制的风险(监视所有登录名)与旧表格中难以控制的风险(用户将密码键入错误的区域)之间权衡。

#8 楼

我要冒昧地说,他们可能有一些适当的机制来确保它不是用户的开放存储库。 Redis支持的解决方案。

最初向用户显示一个简单的电子邮件/密码,并带有用于登录和注册的按钮。输入他们的电子邮件并继续前进后,将检查是否存在匹配项,如果匹配,则将删除注册按钮。如果没有,则将提供完整的注册表。

我们跟踪给定阈值后ip子网和黑名单的尝试次数。注册选项。

评论


想要建立帐户列表的垃圾邮件发送者可以租用一个僵尸网络,以绕开IP子网的阻止。

–基督徒
2015年5月9日上午10:09

真正。话虽这么说,但如果Google想要(尽管其他答案表明他们可能不在乎的充分理由),他们可以采用其他防止滥用机制。例如跟踪与标准故障率的偏差并全局恢复行为

– andrew.carpenter
15年5月11日在1:42

#9 楼

是的,他们已经建立了防止滥用的系统。 Google具有广泛的“异常检测”机制,可在您的活动可疑时提供错误或验证码:最著名的例子是Google搜索和NoCaptcha ReCaptcha的阻止。该帐户是否存在并不意味着每个人都可以,也不意味着您可以实际猜测其他人的用户名。尝试让我们知道您被封锁多久之前,这是一个有趣的测试。

#10 楼





我已经注意到,新的gmail登录名先要求输入用户名,然后在要求输入密码之前确认该用户名是否存在。


Google已经具有此功能。当您尝试注册新的Google帐户时,它必须检查用户名是否已经存在。


这是否违反传统的安全性智慧,即不泄露有关用户名是否存在的信息,以阻止尝试许多可能的用户名的攻击类别?
如果他们没有检查,您将如何正确认证?多个具有相同用户名的人对网站的完整性不利。当然,在很多情况下,您可以使用唯一的电子邮件地址,并允许多个人使用相同的姓名。这里没有什么可担心的。如果您想减慢用户名的大量枚举,只需在几次尝试后添加一个验证码即可。


Captchas并不能真正阻止大规模邮件发送技巧垃圾邮件发送者经常将大量垃圾邮件发送到电子邮件地址。尽管Google可能会将电子邮件推送到垃圾邮件文件夹中,但这并不能阻止通过非退回电子邮件进行枚举。

创建一个使用成千上万个不同IP地址的群发邮件程序,然后尝试通过不接收退回电子邮件进行枚举是很简单的。您甚至可以发送随机垃圾。请记住,如果您的目标是验证电子邮件地址是否存在,那么几天后就不会收到错误电子邮件就足够了。

评论


自Google成立以来,他们“已经在这样做”。在Google之前,几乎没有。

– Nemo
18年8月13日在18:11