我想让我的软件更安全。我要防止它受到暴力攻击。我知道强密码是最好的,但我无法控制它。
我考虑了以下几种解决办法:
有一个很好的算法来防止暴力攻击吗?
发布于 2012-01-03 16:20:01
时间是你的朋友。
想一想,当你从“你们这些普通的银行机器”取钱时会发生什么。
现在,在您的情况下,您很可能不希望有人来敲您的门,因为他们没有输入正确的代码。为了避免这种情况,你只需去掉“来申请一张新卡”,剩下的就是“等到明天”。
因此,如果您给用户3次尝试验证自己,而他/她失败了.让她等一个小时他/她才能再试一次。
如果有人仍然试图进行暴力攻击,他就可以每天尝试72次尝试(“每小时3次”,最长24小时“最大值=3x24 =)”。
取决于他/她想要用什么蛮力,每天72次尝试(即一年365天的26280次尝试)太慢了。
这种方式--只要“反向工程”找到后门不是一种选择--你的“软件”应该是安全的,不受野蛮的影响--强迫任何东西。
根据对这个答案的评论,有一点更新.
现在,如果有人因为一个或多个恶意用户滥用特定成员的用户名而被锁在门外,并且仅仅因为他们输入了错误的密码3次,而试图确保这样的用户不能登录,怎么办?
对,听起来像是“拒绝服务”-alike攻击。但这并不能阻止你这样做,因为这样的攻击是容易避免的。您所要做的就是确保您不会忘记这种情况下的第二层安全性。
记住,有“安全问题”之类的东西。也许有人能知道或猜到你的用户名,但是当你被锁定时,要解决安全问题需要一卡车时间.除非你知道答案。安全问题可能仅限于“解锁”“锁定”登录区域。
想想谷歌和公司是如何做到这一点的:
在(1)和(3)处使用captcha来减缓任何强迫野兽的尝试,你就都准备好了。
如果您显式地不想使用captcha (这让我想知道为什么),您必须实现一个“用户-ip”,“访问时间”检查实现,并在随机的1到2秒内减缓对系统的访问速度。这不应该是一个问题,因为这将是一个类似的实现,锁定过程,只是你没有锁定,但在某些点慢下来的东西,所以一个野蛮的攻击需要时间。1页上的1秒减速将限制蛮力每分钟60次,而你在3次失败尝试后将暴力强制器拒之门外。安全问题也是如此:放慢速度。施暴者必须足够聪明来处理这两个问题,并且必须同时强迫他们两个……窃取他宝贵的资源和时间来制造混乱。
不管你怎么做。如果您这样做,管理员甚至没有必要离开咖啡机,而这一切都在进行中,它解决了任何问题,您认为您可能发现与“锁定合法用户与DOS类似的攻击”。
让我们看一下我在(3)中提供的初始示例:
如果失败,卡将被撤回,用户将不得不等待第二天亲自申请一张新卡和密码,并向他的银行解释发生了什么。
那么,“安全问题”选项,使合法用户不解除封锁,就像被迫亲自访问和与您的银行交谈。只是简单点。
此外,这个“解锁”过程对于admin/sysop很有用,因为一个简单的日志文件显示“尝试”的次数可以帮助管理员跟踪最终攻击的尝试。任何脚本孩子都可以通过输入错误的密码三次来锁定用户.但是如果有人几次回答不了安全问题,就会有不好的事情发生。
最后但并非最不重要的一点是:就像洋葱一样,这样的安全层甚至可以相互包裹在一起(如果有意义的话,就像在高安全环境中那样)。
简单的诀窍是让人们很难处理事情,同时让普通用户感到高兴。
我只能重复一遍:时间是你的朋友。(其余的是简单的逻辑)
发布于 2012-01-02 15:03:29
为什么你认为在固定数量的失败尝试之后延迟登录的方法不会扩展?在我看来,它扩展得非常好:对于每一个IP (或会话cookie或其他任何东西)和时间片,都有固定数量的登录尝试,这使得发起野蛮攻击是不可行的。
除此之外,我不会担心僵尸网络,因为足够强大的僵尸网络的所有者可以很容易地在您的上行链路上产生足够的流量,以至于其他连接都是不可能/可行的,不管它们是否尝试登录。
编辑:添加注释并明确指出这个问题:由于TCP/IP (和DNS)的性质,您无法抵御DoS攻击。您能做的最好的就是保护那些不容易受到DoS攻击的资源,这可能会影响有效的用户。也就是说,当存储失败的登录尝试时,不要存储超过N个登录尝试,以防止成功的DoS除了可用带宽(无法保护的带宽)之外,完全填满可用的磁盘空间。
简单地类比一所房子在这里也许会有帮助:你可以保护你的门,但不能保护通向它的街道。
发布于 2012-01-02 15:16:31
我会做的事情,以防止蛮力登录系统(高度严格和复杂):
取决于施暴者的目的,如果他/她想要扰乱你的服务,并且拥有无限的资源,就没有办法阻止他。但如果他试图登录系统,他将失败(希望)。
编辑->
( 3)不复杂,它与记录IP地址2完全相同,实际上是#3 ),很明显,所针对的帐户不是同一个帐户,所以100,000机器人不能在一小时内强行执行一个单帐户70万次(但只有7次).5)这不是“延迟客户端用户”,而是“衡量客户填写用户名/密码的时间”。
如果绕过#2和#3,攻击的目的是DOS/DDOS
在您的系统中保持平均登录失败率(每小时)(如图),在DDOS攻击下,失败将变得非常高(与平均失败率相比) ->您需要手动采取行动。
PS:当然会很复杂。
https://security.stackexchange.com/questions/10305
复制相似问题