使用 CAPTCHA 图像是否有真正的替代方法?

信息安全 垃圾邮件 验证码
2021-08-15 17:26:56

安全性是关于平衡成本和风险,没有什么是不可战胜的,特别是不是典型的 CAPTCHA 实现,但它们确实增加了其他系统似乎无法提供的东西。

我一直在阅读这些 CAPTCHA 和可能的替代方案......(所以请不要将我推荐给其他网站/答案,除非他们真正回答了以下问题)。

我没有任何经验,所以对我来说很难估计与此决定相关的成本和风险:我应该使用 CAPTCHA(我正在考虑 JCaptcha 或 reCaptcha),还是其他技术的组合就足够了?

我有一个要填写的注册表单,但我不希望我的用户表被垃圾填满。蜜罐领域很容易实现,但是很容易绕过,简单的安全检查(天空是什么颜色?)可以很好地抵抗自动攻击,但是任何 15 岁的人都可以构建一个简单的针对性攻击,破坏我的用户表......用于检查填写表格所用时间的 javascript 是不安全的,并且在我的服务器上的简单帖子已损坏。基本上,除了典型的 CAPTCHA 之外,我没有发现任何与稍微聪明的目标攻击相比有效的东西,所以我不会被拖钓......所以真正的问题是,我是否有被定向攻击拖钓的巨大风险所以我宁愿将 10% 的用户丢给这些 CAPTCHA,或者是否有替代方案不会对用户征税?

编辑:非常感谢您的回答,它确实帮助我澄清了想法,特别是关于避免暴力攻击的 OWASP 链接(得到了我的 +1,但我不接受它,因为它感觉不像一个解决方案, 但它确实有助于找到一个。如果您认为我应该接受它,因为我发现它是迄今为止最好的答案,请评论说这样说,因为我可能会误解该网站的运作)。

另一方面,Asirra 非常有趣和简单,并且比传统的验证码要好得多,我当然会推荐它而不是其他服务。谜题更有趣,即使你失败了,你也只会失败一次……可惜:

Asirra 仍处于 beta 测试阶段;服务及其 API 可能都不稳定。

最终编辑:以防万一它有用,以下是我已采取的步骤,以确保用户不会受到验证码的困扰,但我对机器人感到安全。

  • 蜜罐领域(很容易实现,虽然我觉得它不是很安全,但它没有花费我任何成本。)
  • 电子邮件验证链接(或 OAuth 访问),因为我一直计划添加它。只有经过验证的用户会迁移到我的用户表,其余的保持注册状态。
  • 时间检查:通过ajax加载签名的服务器时间戳,用户在发送(密码)之前需要至少5秒填写表格,否则将被丢弃。
  • 注册后的确认页面(带有服务器签名的令牌,以确保请求首先通过服务器),警告用户需要确认电子邮件,并有一个发送确认电子邮件的按钮。(在这种情况下,数据也注册在 DB 上)

这不会阻止一个非常敬业的攻击者,但我希望他们不想花费数小时调整他的攻击而一无所获,只是打扰我。

4个回答

外箱思考...

在大多数情况下,这适用:验证码的业务目的是识别访问页面的人是人。需要知道它是人类的根本原因是防止自动提交表单,而防止自动提交的主要原因是防止暴力攻击。

因此,在大多数情况下,CAPTCHA 的最终目的是作为防止暴力攻击的工具。

如果这是您想要使用验证码的根本原因,请继续阅读。请注意,使用验证码还有其他原因,这些建议可能适用,也可能不适用。

也就是说,CAPTCHA 有其他替代方法可以防止暴力攻击。 OWASP 网站列出了每种方法的优缺点

1. 锁定账户

阻止暴力攻击的最明显方法是在指定次数的错误密码尝试后简单地锁定帐户。帐户锁定可以持续特定的持续时间,例如一小时,或者帐户可以保持锁定状态,直到管理员手动解锁。但是,帐户锁定并不总是最好的解决方案,因为有人很容易滥用安全措施并锁定数百个用户帐户。事实上,一些网站遭受了如此多的攻击,以至于它们无法执行锁定策略,因为它们会不断地解锁客户帐户。

帐户锁定的问题是:

  • 攻击者可以通过锁定大量帐户来导致拒绝服务 (DoS)。
  • 因为您无法锁定不存在的帐户,所以只有有效的帐户名称才会锁定。攻击者可以利用这一事实从站点中获取用户名,具体取决于错误响应。
  • 攻击者可以通过锁定许多帐户并用支持电话淹没帮助台来引起转移。
  • 攻击者可以连续锁定同一个帐户,甚至在管理员解锁它几秒钟后,有效地禁用该帐户。
  • 帐户锁定对每小时只尝试几个密码的慢速攻击无效。
  • 帐户锁定对于针对大量用户名尝试使用一个密码的攻击无效。
  • 如果攻击者使用用户名/密码组合列表并在前几次尝试中正确猜测,则帐户锁定无效。
  • 管理员帐户等功能强大的帐户通常会绕过锁定策略,但这些帐户是最容易受到攻击的帐户。某些系统仅在基于网络的登录时锁定管理员帐户。
  • 即使您锁定了一个帐户,攻击仍可能继续,消耗宝贵的人力和计算机资源。

2.检查密码时注入随机暂停。

即使添加几秒钟的暂停也可以大大减缓暴力攻击,但不会在大多数合法用户登录到他们的帐户时打扰他们。

3. 锁定多次登录失败的IP地址

4. 设计您的网站,不要对失败的密码使用可预测的行为。


至于这个:

我有一个要填写的注册表单,但我不希望我的用户表被垃圾填满。

在您的特定情况下,我会采用两层方法:

首先,我会使用“插入随机暂停”选项来限制首先可以输入多少虚假提交。

要处理潜在的虚假注册尝试,请使用验证机制。注册他们但不是活跃的,向他们发送一封带有“激活”链接的电子邮件。对于那些激活的人——至少你知道你有一个真正想要注册的人的有效电子邮件地址。然后实施计划任务,在X小时或X天后自动删除未激活的帐户。

谷歌提出了一种名为 reCaptcha的新技术,它比现有的解决方案更简单,据报道更可靠。

它由一个复选框组成,当点击该复选框时,会将元数据发送到谷歌的服务器,而谷歌的服务器又使用一些专有的人工智能来确定点击是来自脚本还是来自人类。

在此处输入图像描述

有关更多信息,请参阅此风险投资文章

经典验证码的一种替代方法是Microsoft Asirra (我认为这很有趣)。您必须从包含猫或狗的图片中选择猫,而不是阅读乱码。他们有超过 300 万张照片,所以你应该对更坚定的攻击者保持安全。不太可能有人会索引所有这些图像,只是为了让你的数据库充满垃圾,而且,第一次尝试无法选择猫的可能性很低。


更新:谷歌可以解决 Cat Captchas。

验证码根本不是解决方案!

有一个全面的验证码杀手可以通过所有现有的验证码,甚至还没有发明!

它基于社会工程学

一个 15 岁的垃圾邮件发送者学生可以简单易行地构建这个:

  1. 建立一个简单的免费拼图验证码游戏网站,看起来无害:
    1. 有趣的小游戏,玩许多验证码以访问更多游戏关卡
    2. ...让用户玩验证码...
  2. 通过一个简单的服务器脚本,当请求验证码时,服务器会去目标站点获取目标的验证码,然后将它们转发给验证码游戏站点 玩家。
    1. 玩家将尝试尽快回答验证码以达到第二个游戏级别。
    2. 服务器只需在目标站点(真正的受害者)和游戏玩家(不想要的同谋:附带受害者)之间转发验证码检查和答案
  3. 随着每个验证码成功通过,服务器可以创建一个垃圾邮件发送者帐户来定位...

网络人工协助......用于机器人。

机器人可以利用人们的帮助来完成他的(坏)工作。

致谢:

非常感谢@GennadyVanin--ГеннадийВанин 提出了有吸引力的免费益智游戏验证码第一个想法是创建一个几乎不合法的色情或赚钱网站,并使用验证码来验证新帐户。

验证码游戏拼图的这个想法添加

  • 琐碎的网站(不是几乎合法的)
  • 一位用户将解析多个验证码。

备择方案

有几种方法可以防止垃圾邮件,从贝叶斯工具到基于 PGP 的邮件确认。

只有一个示例:您可以将bogofilter与渐进式策略一起使用:

  1. 一开始,您博客上的每篇文章都将提交到您的bogofilter 环境...

  2. 第一次,所有帖子都必须手动验证(灰名单),同时教授bogofilter

  3. 一旦审查了足够多的垃圾邮件火腿,您的bogofilter就能够

    1. 自动验证很多帖子
    2. 自动有效地拒绝大量帖子
    3. 然后将一些未分类的新帖子列入灰名单...这将被手动验证,再次教授bogofilter ... 一次又一次...(请参阅我的评论;)

当然,这需要主动监控,一点也不完美,有时一些调整操作和后期检索可能会很有用......

结论

总之,

  • 验证码消耗大量时间,
  • 将永远变得可破解
  • 可能会感到困惑和
  • 不要增加欢迎页面的美观度!