防止攻击者获取系统的用户名

时间:2016-07-06 08:16:31

标签: javascript json ajax security

我们的忘记密码页面存在安全问题,标记为:

  

ISS-0003938网络检查发现的中等可疑文件   递归目录******从Web中删除任何不必要的页面   server如果需要任何文件,则限制对那些文件的访问   不应该公开访问删除任何备份文件和   用于开发测试的服务器上的临时文件请   删除备份文件备用登录文件,包含的文件   折旧的功能和任何快捷方式的文件   开发人员使用。

标记的文件是/js/pmailer_minimal.js原因,因为.js文件中有以下内容。

url: URL + '/login/forgot-password/request/'+ username,

通过使用该信息,攻击者可以开始枚举用户名,直到他们从响应中获得成功消息。

这个问题的最佳解决方案是什么?我们是否改变了回应?我们是否限制重试次数?还有哪些其他解决方案?

还应该考虑的是,如果攻击者拥有用户名,他可以尝试进行暴力攻击。

我正在寻找尽可能多的建议来解决这一威胁。

4 个答案:

答案 0 :(得分:2)

我将为此添加一个pentester视角。

很容易获得公司的人员名单。只是谷歌LinkedIn等我甚至有一些潜在的密码(密码转储,愚蠢的密码,如Pa $$ w0rd,公司名称或其他常见模式)。

问题是将这些应用于随机的Web应用程序。用户名格式是first.lastname,email,firstinitiallastname还是其他。我会接受这些并尝试使用一些潜在密码的所有用户。目标是获得一次有效登录。然后,从应用程序本身轻松提取真实用户的完整列表。

在登录页面上给出通用答案确实使我们的努力受挫。如果我可以获得正确的用户名,我可以尝试每个用户大约24个密码(每小时每个用户一个密码,以尝试避免锁定)。在尝试的一天内我没有成功登录的组织不多。

如果我无法确定用户名是否正确,那么我必须尝试每个潜在密码的每个用户名组合。所以我可能只会为每个潜在用户尝试3-4个密码,然后再付出太多努力。因此,除非用户选择真正的愚蠢密码,否则我可能不会进入应用程序。

有时您可以针对应用的其他部分检查用户名,特别是密码重置功能。用于抽查,但不是强制执行,因为它通常会向用户发送电子邮件,并可能会锁定帐户,直到密码重置为止。太多的人通常都会向IT发出警告。

就像其他人提到的那样,我会将此列为漏洞。如果我使用它,它会在报告中。如果没有,我会告诉IT人员,但不要将其排除在报告之外。试图找到任何可以添加到报告中的任何东西的较小的测试者确实会将其标记为关键并将其吹得不成比例。

我通常建议的解决方案是为总失败登录添加一个阈值。锁定在每个用户的基础上表现良好,因此在一段时间内登录失败很多。为在所有用户之间尝试密码的人添加其他内容,例如在某段时间内XX唯一失败的用户登录。总是会有一些基本的噪音,但蛮力攻击很快就会显而易见。

答案 1 :(得分:1)

这是一个常见的已知问题。防止这种情况的最佳方法是显示一般信息,例如:

  

如果输入的用户名在我们的数据库中已知,您将在几分钟内收到新密码。

这样的黑客'如果输入的用户名确实存在于您的数据库中,则不知道。

答案 2 :(得分:1)

我认为,当您的笔测试人员急于在报告中添加尽可能多的项目时,无论他们对业务有多么有用,我都认为这种风险被夸大了。用户名在传统上不被认为是秘密的,因此枚举它们并不是什么大问题。

我发现通常情况下,声称这是一个严重风险的人并没有真正想到所有的后果。他们为简单案例提出建议,例如在最终用户登录失败时向最终用户提供不太有用的错误消息,但他们错过了需要对应用程序进行重大更改的更困难的案例。例如,注册 - 尝试使用用户名注册,您可以确定它是否已经注册。没有快速简便的解决方案,不会大幅改变用户体验(尽管this question中列出了一些缓解措施)。

在这种特殊情况下,对于此特定功能,您可以询问他们的电子邮件地址,并在未注册时发送“未找到”电子邮件。这可以防止枚举通过此功能,同时仍然对忘记用户名或他们注册的电子邮件地址的人友好。但是你有可能在整个地方泄漏用户名(例如通过注册),这只是冰山一角。我认为风险/回报足够低,这是大多数情况下应该推迟的问题类型。用户名不是秘密信息 - 您已经为此目的获得了密码。

答案 3 :(得分:0)

消息的推广是Jan回答的最佳选择。

  

如果您提供的信息与我们的记录相符,您将收到一份   发送电子邮件至a@b.c

您可以做的另一件事是计算从同一IP /会话等生成的密码恢复请求,如果太频繁,您可以阻止几分钟或几小时。您也可以使用Captcha选项来降低请求率。