您想知道的有关安全重置密码的所有信息。第2部分

两要素认证



第一部分中,您阅读的所有内容都与基于请求者了解的身份有关。他知道他的电子邮件地址,知道如何访问它(即知道他的电子邮件密码),并且知道安全问题的答案。



“知识”被视为一种认证因素;其他两个常见因素是您拥有的东西(例如,物理设备)和您是谁(例如,指纹或视网膜)。







在大多数情况下,进行生物识别几乎是不可行的,尤其是当我们谈论Web应用程序的安全性时,因此两要素身份验证(2FA)通常使用第二个属性-“您拥有的”。关于第二个因素的一种流行变体是物理令牌,例如RSA SecurID





物理令牌通常用于公司VPN和金融服务中的身份验证。为了在服务中进行身份验证,您需要同时使用密码和令牌上的代码(经常更改)与PIN结合使用。从理论上讲,为了进行标识,攻击者必须知道密码,拥有令牌以及令牌的PIN。在密码重设方案中,密码本身显然是未知的,但是拥有令牌可用于确认帐户的所有权。当然,与任何安全性实现一样,这不能提供“万无一失”,但无疑会增加进入的障碍。



这种方法的主要问题之一是实施的成本和后勤。我们正在谈论将物理设备移交给每个客户并教给他们一个新的过程。此外,用户需要随身携带一台设备,使用物理令牌并不总是这样。另一个选择是使用SMS来实现第二个验证因素,在2FA的情况下,它可以用作确认执行重置过程的人是否拥有帐户所有者的手机。Google的做法如下:





您还需要启用“两步验证”,但这意味着下次您重置密码时,手机将成为第二个验证因素。让我用我的iPhone演示一下,原因很快就会明白:





识别帐户的电子邮件地址后,Google便确定已启用2FA,我们可以通过验证将帐户重置,该验证通过短信发送到帐户持有人的手机:





现在我们需要选择重置过程的开始:





此操作导致电子邮件发送到注册地址:





该电子邮件包含重置URL:





当访问重置URL时,会发送一条SMS短信,并且网站会要求它:





这是短信:





将其输入浏览器后,我们返回到经典密码重置区域:





听起来似乎有些冗长,但确实如此,该表格确认执行重置的人员可以访问帐户持有人的电子邮件地址和手机。但这比仅通过电子邮件重置密码的安全性高9倍。但是,存在问题。



问题在于智能手机。下面显示的设备只能验证一种验证因素-它可以接收SMS,但不能接收电子邮件:





但是,此设备可以接收SMS接收密码重置电子邮件:





问题在于,我们将电子邮件视为身份验证的第一要素,而将SMS(甚至是生成令牌的应用程序)作为第二要素,但如今它们被组合在一个设备中。当然,这意味着如果有人使用您的智能手机,那么所有这些便利将归结为我们回到同一频道的事实。第二个因素,“您拥有的”意味着您也具有第一个因素。所有这一切都受到一个四位数的PIN码的保护……如果电话根本没有PIN码并且被阻止了。



是的,Google的2FA功能当然可以提供额外的保护,但是它不是万无一失的,它当然也不依赖于两个完全独立的渠道。



通过用户名重置与通过电子邮件重置



我应该只允许重设电子邮件地址吗?还是用户也可以按名称重设?按用户名重置的问题在于,无法在不透露其他人可能拥有该用户名的帐户的情况下通知用户不正确的用户名。在上一部分中,通过电子邮件进行重置可确保该电子邮件的合法所有者将始终收到反馈,而无需在系统中公开披露其存在。仅使用用户名无法做到这一点。



因此答案很简短:仅电子邮件。如果您尝试仅使用用户名进行重置,则有时用户会想知道发生了什么。否则您将披露帐户的存在。是的,这只是用户名,而不是电子邮件地址,是的,任何人都可以选择任何(可用的)用户名,但是由于用户倾向于重用,您仍然有很大可能间接披露帐户所有者。名称。



那么,当有人忘记了用户名时会发生什么?如果我们接受用户名不是立即发送电子邮件地址(并且这种情况经常发生),则该过程类似于密码重置开始的方式-我们输入电子邮件地址,然后向该地址发送消息而不显示其存在。唯一的区别是这一次消息仅包含用户名,而不包含密码重置URL。要么,要么电子邮件会说该地址没有帐户。



身份验证和电子邮件地址的准确性



密码重置的一个关键方面,甚至可能是关键的方面,是验证尝试执行重置的人员的身份。这是该帐户的合法所有者,还是有人试图对其进行破解或给所有者带来不便?



显然,电子邮件是验证您身份的最方便,最常用的方法。它没有受到错误处理(“愚人”的保护)的保护,并且在许多情况下,如果需要对身份的高度信任,那么仅简单的能力就无法接收到帐户所有者地址的信件(这就是使用2FA的原因),但这几乎总是起点重置过程。



如果电子邮件将在提供信任方面发挥作用,那么第一步就是确保电子邮件地址正确无误。如果有人用该符号弄错了,显然,复位将不会开始。注册时的电子邮件验证过程是验证地址正确性的可靠方法。我们都在实践中看到了这一点:您注册后,他们会向您发送一封电子邮件,其中包含要单击的唯一URL,这确认您确实是该电子邮件帐户的所有者。在完成此过程之前未登录将确保有动力来验证地址。



与安全性的许多其他方面一样,这种模型降低了交换的可用性,以提供与用户身份有关的增强的安全性。这对于网站来说是可以接受的,用户对其进行高度评价并很乐意添加该过程的另一个阶段(付费服务,银行业务等)的站点,但是如果用户认为该帐户是``一次性的''并使用该帐户,则可能会疏远用户,例如,仅作为评论帖子的一种方式。



确定谁发起了重置过程



显然,存在恶意使用重置功能的原因,并且攻击者可以多种方式使用它。我们可以用来帮助验证请求来源的一个简单技巧(此技巧通常有效)是将请求者的IP地址重置添加到电子邮件中。这为收件人提供了一些信息以标识请求的来源。



这是我当前嵌入到ASafaWeb中的重置功能的示例:



图片


“更多信息”链接会将用户带到ip-adress.com,提供诸如请求重置的人员的位置和组织等信息:



图片


当然,任何想隐藏其身份的人都有很多方法来掩盖其真实IP地址,但这是添加请求者部分身份的便捷方法,并且在大多数情况下,它将为您提供一个很好的主意,即谁将执行密码重置请求。



通过电子邮件更改通知



这个帖子充满了一个话题-交流;尽可能与帐户所有者沟通流程的每个阶段发生的情况,而不会透露任何可能出于恶意目的使用的内容。实际更改密码时也是如此-通知所有者!



更改密码的原因有两种:



  1. 登录后更改密码,因为用户需要新密码
  2. 由于用户忘记密码而未登录就重置密码


尽管此帖子主要是关于重置的,但在第一种情况下,通知可减少有人在不知道合法所有者的情况下更改密码的风险。怎么会这样 一个非常常见的情况是获取合法所有者的密码(从其他来源泄漏的重用密码;通过键盘记录获得的密码;容易猜到的密码等),然后攻击者决定更改该密码,从而阻止了所有者。没有电子邮件通知,当前所有者将不会知道密码更改。



当然,在重设密码的情况下,所有者已经必须启动该过程(或绕过上述的身份验证工具),因此更改不应令他感到惊讶的是,一封电子邮件确认将是正面反馈和更多验证。另外,它提供了与上述方案的一致性。



哦,以防万一,请不要发布您的新密码!这可能会引起一些笑,但是这种情况会发生





日志,日志,日志和其他一些日志



密码重置功能对入侵者很有吸引力:攻击者要么想获得对他人帐户的访问权,要么只是给帐户/系统所有者带来不便。上述许多做法可以减少滥用的可能性,但是并不能阻止滥用,并且当然也不会阻止人们尝试以意想不到的方式使用该功能。



日志记录是识别恶意行为的绝对宝贵的实践,我的意思是非常详细的日志记录。记录失败的登录尝试,重置密码,更改密码(即当用户已经登录时)以及几乎所有可以帮助您了解正在发生的事情的记录;将来会非常有用。在日志中记录甚至单独的部分流程,例如,良好的重置功能应包括通过网站启动重置(捕获使用不正确的用户名或电子邮件进行的重置请求和登录尝试),通过重置URL记录对网站的访问(包括尝试使用不正确的用户名令牌),然后记录安全问题答案的成功或失败。



在谈到日志记录时,我的意思是不仅记录了加载页面的事实,而且还收集了尽可能多的信息(如果不是机密信息)。伙计们,请不要登录密码!在日志中,您需要注册授权用户的身份(如果他更改,则将被授权)现有密码,或尝试在登录重设其他人的密码),任何尝试过的用户名或电子邮件地址,以及尝试使用的所有重设令牌。但是,也值得记录方面,例如IP地址,甚至可能记录请求标头。这使您可以重新不仅什么用户(或攻击者)正在试图做的,但也他们。



将责任下放给其他表演者



如果您认为这是一项艰巨的工作,那么您并不孤单。实际上,建立一个强大的帐户管理系统并非易事。这并不是说它在技术上很繁琐,而是它具有很多功能。这不仅涉及重置,还涉及整个注册过程,安全存储密码,处理多次错误的登录尝试等,等等。虽然我提倡使用像ASP.NET成员资格提供程序这样的现成功能,但除此以外还有很多工作要做。



如今,有许多第三方供应商乐于将其痛苦消除并将其抽象为一项托管服务。这些服务包括OpenID,OAuth甚至Facebook。有些人相信这个模型是没有限制的(OpenID在Stack Overflow上确实非常成功),但其他人实际上将其视为噩梦



毫无疑问,像OpenID这样的服务解决了很多开发人员问题,但是不可否认的是它添加了新的服务。他们有扮演角色吗?是的,但是显然我们没有看到认证服务提供商的大量使用。银行,航空公司甚至商店都实现了自己的身份验证机制,显然有很好的理由。



恶意排放



以上每个示例的一个重要方面是,只有在验证了帐户所有者的身份之后,旧密码才被认为是无用的。这很重要,因为如果可以身份验证之前重设该帐户,则会打开各种恶意活动。



这是一个示例:有人在拍卖网站上竞标,并且在竞标过程即将结束时,他们通过启动重置过程来阻止竞争者,从而将其从竞标中删除。显然,如果滥用设计不当的复位功能,可能导致严重的负面后果。值得注意的是,使用不正确的登录尝试阻止帐户的情况与此类似,但这是另一篇文章的主题。



就像我在上面说的那样,让匿名用户只需知道他们的电子邮件地址就可以重置任何帐户的密码,这是拒绝服务攻击的现成情况。DoS可能不一样,这是我们经常谈论的内容,但是没有比考虑周全的密码重置功能更快捷的阻止访问您的帐户的方法。



最脆弱的联系



从保护一个帐户的角度来看,上面编写的所有内容都很棒,但是您始终需要记住所保护帐户周围的生态系统。让我举一个例子:



ASafaWeb由AppHarbor提供的出色服务托管。重置托管帐户的过程如下:



阶段1:





阶段2:





阶段3:





阶段4:





阅读所有先前的信息后,已经很容易理解在理想世界中我们将以不同的方式实现哪些方面。但是,我想在这里说的是,如果我在AppHarbor上发布了一个类似ASafaWeb的网站,然后提出了一些很好的安全性问题和答案,添加了第二个身份验证因素,然后根据规则进行了其余工作,那么这并不否认事实是整个过程中最薄弱的链接将是能够打破一切。如果有人使用我的信息在AppHarbor中成功进行了身份验证,那么他们可以用所需的ASafaWeb帐户替换密码!



关键是要全面考虑保护实施的健壮性:有必要模拟对系统每个入口点的威胁,即使这是一个肤浅的过程,例如进入AppHarbor系统。这应该让我对ASafaWeb密码重置过程需要付出多少努力有一个好主意。



全部放在一起



这篇文章包含很多信息,因此我想将其集中在一个简单的视觉轮廓上:





请记住,对每个项目都尽可能详细地记录日志。就是这样,很简单!



结果



我的帖子似乎很全面,但是我可以包含很多其他材料,但为了简洁起见,决定将其省略:应急电子邮件地址的作用,您失去与该帐户关联的电子邮件的访问权限的情况(例如,您辞掉工作)等等。就像我之前说的那样,重置功能并不困难,只是有很多观点。



即使重置不是那么困难,但它经常被错误地使用。上面我们看到了几个示例,这些示例可能会导致实现问题,还有许多用例中,错误的重置实际上会导致问题。最近发现密码重置被用来窃取价值8.7万美元的比特币这是一个严重的负面结果!



因此,请谨慎使用重置功能,在不同位置模拟威胁,并且在设计功能时,请勿摘掉您的黑帽子,因为很有可能其他人会戴上它!






广告



VDSina提供廉价的服务器,每天收费,每个服务器都连接到500 MB的Internet通道,并受到免费的DDoS攻击保护!






All Articles