AWS Cognito用户池如何防御暴力攻击

时间:2016-06-09 17:50:22

标签: amazon-web-services amazon-cognito

我将使用AWS Cognito用户池产品作为应用程序的用户目录,并有几个问题:

  1. 是亚马逊对Cognito用户池的限制请求,如果是,请求限制的速率限制是什么?
  2. Cognito如何防御暴力攻击登录/密码?

4 个答案:

答案 0 :(得分:15)

经过几个小时的搜索,我在源代码中发现了这两个例外:

  

TooManyFailedAttemptsException当抛出此异常时抛出   用户对给定操作进行了太多失败的尝试(例如,签名)   在)。

     

HTTP状态代码:400

     

TooManyRequestsException当用户拥有此异常时,将抛出此异常   对特定操作提出了太多要求。

     

HTTP状态代码:400

另外,我尝试使用错误的凭据登录来测试限制,在5.尝试后我得到NotAuthorizedException: Password attempts exceeded异常。

在类似的情况下,我试图强行忘记密码,但在10次尝试失败后,我得到了LimitExceededException: Attempt limit exceeded, please try after some time.

我认为他们就是这样做的。

答案 1 :(得分:11)

是的,Cognito用户池通过使用各种安全机制来防止暴力攻击。节流是其中一种机制。我们不会共享限制,因为它们会动态变化。

答案 2 :(得分:1)

这包含有关Cognito锁定策略的最新文档。

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html

我们允许五次失败的登录尝试。此后,我们开始临时锁定,从1秒开始以指数方式增加时间,每次失败尝试后大约15分钟加倍。在临时锁定期间的尝试将被忽略。临时锁定期过后,如果下一次尝试失败,则新的临时锁定将以持续时间的两倍开始。等待约15分钟而不进行任何尝试也将重置临时锁定。请注意,这种行为可能会更改。

答案 3 :(得分:1)

与其(或除此之外)专注于暴力破解登录端点,我认为忘记密码流程值得关注。

忘记密码电子邮件包含一个6 位代码,可用于设置新密码。

此代码的有效期为 1 小时User Pools code validity resource quotas

在我的测试中,在限制生效之前,我可以在一个小时内为单个用户 5 次尝试设置新密码 (LimitExceededException: Attempt limit exceeded, please try after some time.)

现在,如果我正确地进行数学计算,则代码有 1000000 个可能的值(从我的测试中,我从未见过以 0 开头的代码,因此可能会更少)。您有 5 次/小时的尝试来猜测密码。因此,您每小时都有 5/1000000*100=0.0005% 机会在不知道密码的情况下成功重置密码。

这是一个小机会吗?好像是这样。

考虑到大规模的暴力破解多个用户同时重试,我晚上应该睡个好觉吗?我不知道!

为了一劳永逸地解决问题,为什么Cognito不能使用更长的难以猜测的代码(我想晚上睡个好觉)。也许这与文本消息中使用相同的代码机制这一事实有关。我希望有官方评论。