首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以用哪种算法来防止登录时的暴力行为?

我可以用哪种算法来防止登录时的暴力行为?
EN

Security用户
提问于 2012-01-02 14:55:30
回答 7查看 8.6K关注 0票数 12

我想让我的软件更安全。我要防止它受到暴力攻击。我知道强密码是最好的,但我无法控制它。

  • 该算法必须从一个只有一些用户的非常小的系统扩展到一个非常大的系统。
  • 卡卡不是一种选择。
  • 没有真正的用户应该被阻止,因为有一个攻击。我认为这是致命的,如果管理员不能再登录,因为有一个攻击。

我考虑了以下几种解决办法:

  • 每次只有硬编码的故障计数是可能的。在此之后,登录将有一个延迟。但这不会扩大规模。这也是非常简单,以防止一个有效的登录与攻击。
  • 只有每个IP地址的故障计数是可能的。在限制之后,登录将被延迟。但是有了机器人网络,这帮不了什么忙。如果必须存储所有ip地址和尝试次数,bot网络也可以消耗大量资源。
  • 只有每个用户的故障数是可能的。然后,可以防止受攻击用户的有效登录。

有一个很好的算法来防止暴力攻击吗?

EN

回答 7

Security用户

发布于 2012-01-03 16:20:01

时间是你的朋友。

想一想,当你从“你们这些普通的银行机器”取钱时会发生什么。

  1. 用户插入卡(请阅读:电子邮件/名称/任何内容),
  2. 机器上写着“嗨,请输入密码”(读:密码/什么的)
  3. 用户现在可以在三次尝试中输入正确的弹码。如果失败,卡将被撤回,用户将不得不等待第二天亲自申请一张新卡和密码,并向他的银行解释发生了什么。

现在,在您的情况下,您很可能不希望有人来敲您的门,因为他们没有输入正确的代码。为了避免这种情况,你只需去掉“来申请一张新卡”,剩下的就是“等到明天”。

因此,如果您给用户3次尝试验证自己,而他/她失败了.让她等一个小时他/她才能再试一次。

如果有人仍然试图进行暴力攻击,他就可以每天尝试72次尝试(“每小时3次”,最长24小时“最大值=3x24 =)”。

取决于他/她想要用什么蛮力,每天72次尝试(即一年365天的26280次尝试)太慢了。

这种方式--只要“反向工程”找到后门不是一种选择--你的“软件”应该是安全的,不受野蛮的影响--强迫任何东西。

更新

根据对这个答案的评论,有一点更新.

现在,如果有人因为一个或多个恶意用户滥用特定成员的用户名而被锁在门外,并且仅仅因为他们输入了错误的密码3次,而试图确保这样的用户不能登录,怎么办?

对,听起来像是“拒绝服务”-alike攻击。但这并不能阻止你这样做,因为这样的攻击是容易避免的。您所要做的就是确保您不会忘记这种情况下的第二层安全性。

记住,有“安全问题”之类的东西。也许有人能知道或猜到你的用户名,但是当你被锁定时,要解决安全问题需要一卡车时间.除非你知道答案。安全问题可能仅限于“解锁”“锁定”登录区域。

想想谷歌和公司是如何做到这一点的:

  1. 使用用户名/电子邮件和密码登录,
  2. 几次失败都会导致锁定,
  3. 正确回答安全问题会解除锁定。

在(1)和(3)处使用captcha来减缓任何强迫野兽的尝试,你就都准备好了。

如果您显式地不想使用captcha (这让我想知道为什么),您必须实现一个“用户-ip”,“访问时间”检查实现,并在随机的1到2秒内减缓对系统的访问速度。这不应该是一个问题,因为这将是一个类似的实现,锁定过程,只是你没有锁定,但在某些点慢下来的东西,所以一个野蛮的攻击需要时间。1页上的1秒减速将限制蛮力每分钟60次,而你在3次失败尝试后将暴力强制器拒之门外。安全问题也是如此:放慢速度。施暴者必须足够聪明来处理这两个问题,并且必须同时强迫他们两个……窃取他宝贵的资源和时间来制造混乱。

不管你怎么做。如果您这样做,管理员甚至没有必要离开咖啡机,而这一切都在进行中,它解决了任何问题,您认为您可能发现与“锁定合法用户与DOS类似的攻击”。

让我们看一下我在(3)中提供的初始示例:

如果失败,卡将被撤回,用户将不得不等待第二天亲自申请一张新卡和密码,并向他的银行解释发生了什么。

那么,“安全问题”选项,使合法用户不解除封锁,就像被迫亲自访问和与您的银行交谈。只是简单点。

此外,这个“解锁”过程对于admin/sysop很有用,因为一个简单的日志文件显示“尝试”的次数可以帮助管理员跟踪最终攻击的尝试。任何脚本孩子都可以通过输入错误的密码三次来锁定用户.但是如果有人几次回答不了安全问题,就会有不好的事情发生。

最后但并非最不重要的一点是:就像洋葱一样,这样的安全层甚至可以相互包裹在一起(如果有意义的话,就像在高安全环境中那样)。

简单的诀窍是让人们很难处理事情,同时让普通用户感到高兴。

我只能重复一遍:时间是你的朋友。(其余的是简单的逻辑)

票数 6
EN

Security用户

发布于 2012-01-02 15:03:29

为什么你认为在固定数量的失败尝试之后延迟登录的方法不会扩展?在我看来,它扩展得非常好:对于每一个IP (或会话cookie或其他任何东西)和时间片,都有固定数量的登录尝试,这使得发起野蛮攻击是不可行的。

除此之外,我不会担心僵尸网络,因为足够强大的僵尸网络的所有者可以很容易地在您的上行链路上产生足够的流量,以至于其他连接都是不可能/可行的,不管它们是否尝试登录。

编辑:添加注释并明确指出这个问题:由于TCP/IP (和DNS)的性质,您无法抵御DoS攻击。您能做的最好的就是保护那些不容易受到DoS攻击的资源,这可能会影响有效的用户。也就是说,当存储失败的登录尝试时,不要存储超过N个登录尝试,以防止成功的DoS除了可用带宽(无法保护的带宽)之外,完全填满可用的磁盘空间。

简单地类比一所房子在这里也许会有帮助:你可以保护你的门,但不能保护通向它的街道。

票数 4
EN

Security用户

发布于 2012-01-02 15:16:31

我会做的事情,以防止蛮力登录系统(高度严格和复杂):

  1. 每次登录尝试时延迟X秒,x在2-4秒之间.
  2. 每个IP在7次失败后30-50分钟不允许。
  3. 每次帐户登录尝试7次失败后30-50分钟不允许(IP是可变的,用户名是相同的)
  4. 使用Javascript测量登录页面上的击键。
  5. 测量用户在服务器上花费的时间。
  6. 密码长度至少6,强制使用至少一个符号,一个数字和一个字母。

取决于施暴者的目的,如果他/她想要扰乱你的服务,并且拥有无限的资源,就没有办法阻止他。但如果他试图登录系统,他将失败(希望)。

编辑->

( 3)不复杂,它与记录IP地址2完全相同,实际上是#3 ),很明显,所针对的帐户不是同一个帐户,所以100,000机器人不能在一小时内强行执行一个单帐户70万次(但只有7次).5)这不是“延迟客户端用户”,而是“衡量客户填写用户名/密码的时间”。

如果绕过#2和#3,攻击的目的是DOS/DDOS

在您的系统中保持平均登录失败率(每小时)(如图),在DDOS攻击下,失败将变得非常高(与平均失败率相比) ->您需要手动采取行动。

PS:当然会很复杂。

票数 3
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/10305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档