为什么要为 Google Recaptcha 响应验证主机名?

信息安全 验证
2021-08-16 12:09:03

谷歌的 Recaptcha 具有hostname“烘焙”验证。当用户提交 Recpatcha 响应时,获取响应的域将根据您在设置 Recaptcha 时提供的域白名单进行验证。

但是,如果您在多个域中使用 Recaptcha,您可以选择禁用 Google 的默认hostname验证并自行处理 ( https://developers.google.com/recaptcha/docs/domain_validation )。

谷歌伴随着一个突出的警告,即不验证hostname任何给定的响应会使您面临安全漏洞。但是考虑到欺骗 . 是多么容易hostname,我看不出这如何提供任何程度的安全性增强。

hostname一个简单的测试向我证明了欺骗Google 用来验证 Recaptcha 响应来源的值是多么容易:

$ sudo nano /etc/hosts
127.0.0.1    spoofedhostname.com

然后当我发送一个测试 Recaptcha 响应时,我得到的结果如下:

{
    "success": true,
    "challenge_ts": "2016-12-24T14:15:22Z",
    "hostname": "spoofedhostname.com"
}

那么,为什么还要费心进行主机名验证呢?

  1. 考虑到欺骗的容易程度,主机名验证在很大程度上是无用的。
  2. 这似乎与防止攻击者窃取您的 Recaptcha 公钥然后生成一堆有效的 Recaptcha 响应有关,他们可以存储这些响应,然后在对敏感端点 ( /login, /reset-password) 进行自动化攻击时使用这些响应从理论上讲,这可以用于某种蛮力攻击,但考虑到响应令牌在 1 分钟后过期,这实际上没有意义。而且您仍然需要手动解决所有的 Recaptchas,您可以简单地在实际域上执行此操作。并再次,他们可以很容易地欺骗只是即使您的域名正在hostname验证。

这对我来说没有任何意义,但考虑到它是谷歌的产品,我不得不认为他们的安全工程师知道一些我不知道的事情。

我错过了什么?

3个回答

这可能与人们在他们设置的网站上嵌入您的验证码并使用已解决的验证码向您的网站发送垃圾邮件有关。

例如,建立一个网站并免费提供一些东西(盗版电影/软件、色情等),但要求提供验证码。在内部,这实际上是您的验证码,任何已解决的验证码都会传递给针对您网站的垃圾邮件机器人。与传统的验证码农场相比,这为攻击者提供了具有成本效益的人工验证码解决方案。

主机名验证将防止验证码的 JS 加载到未经授权的站点上。

更新:我最近实现了一个绕过这个的演示,通过在无头浏览器中呈现原始站点上的验证码,然后使用 Websocket 魔法在我的“诱饵”站点上流式传输它(在这种情况下,一个简单的 URL 缩短器要求重定向到目标站点之前的验证码)。与直接在诱饵站点上渲染验证码相比,这需要相当多的 RAM(每个 Firefox 实例大约 500MB),因此这个主机名验证功能绝对是垃圾邮件发送者的一大痛点。

有两把钥匙。站点密钥和密钥。在设置 reCAPTCHA 时,这两者都会提供给 Web 管理员。

对于客户端集成,他们将为您提供 api.js 和代码片段,以及要插入网站的站点密钥。

“当您的用户提交您在其中集成了 reCAPTCHA 的表单时,您将获得一个名为“g-recaptcha-response”的字符串作为有效负载的一部分。为了检查 Google 是否已验证该用户,请发送一个 GET 请求这些参数:" <- 所以如果我在欺骗 url,你的服务器永远不会得到 g-recaptcha-response。永远不会发送秘密,永远不会发送“g-recaptcha-response”的值,永远不会发送远程 ip。

我错过了黑客如何从网络服务器获取密钥。那只会直接发送给谷歌。

------ 对我所看到的内容的额外解释。

站点密钥在您站点的 html 代码中很容易看到。但是,存储在您服务器上的密钥不能被访问或欺骗。我不知道黑客如何访问密钥以完成与谷歌的双向身份验证。

我认为这就是你所缺少的。(双向认证)

参考:https : //www.youtube.com/watch?v= Fvt1S0nBmwQ (有关设置 google reCAPTCHA 的视频。

https://developers.google.com/recaptcha/docs/verify

另外:google reCAPTCHA 漏洞利用,有一些非常有趣的不安全因素涉及将其他人的 reCAPTCHA 嵌入网站中,以便在他们单击页面上的任何位置时自动进行身份验证。

(发表超过 2 个链接的声誉太低了)

主机名验证用作防僵尸措施。如果您通过需要采集 CAPTCHA 的 URL 在 localhost 上运行 CAPTCHA 采集器,则您不能再从计算机直接向该站点发送请求,因为它们将被重定向到 localhost。但是,您可以采取一些措施来解决此问题。