以 85% 的准确率击败 Google 的音频 reCaptcha 系统。
unCaptcha 旨在成为一个概念验证。截至我们的论文发表时,我们发现它成功解决了 reCaptcha 音频挑战的 85%。自那以后,reCaptcha 似乎加入了一些额外的保护措施,限制了 unCaptcha 的成功率。 我们不会维护此代码以使其成为对 reCaptcha 的有效攻击。
例如,Google 也改进了其浏览器自动化检测。这意味着在当前状态下,Selenium 无法用于从 Google 获取验证码。这可能导致 Google 向最终用户返回奇怪的音频片段。此外,我们观察到某些音频挑战不仅包含数字,还包含一小段口语文本。
我们鼓励您在此领域进行研究时要谨慎,注意遵守当地、州和联邦法律,并立即向 Google 负责任的披露任何潜在漏洞。
此外,我们已从所有必要的查询中移除了我们的 API 密钥。如果您希望重现某些工作或正在此区域进行自己的研究,您需要从所使用的六个服务中获取 API 密钥。这些密钥在我们的文件中通过一串长串的字符 'X' 来标示。
在整个互联网上,成千上万的网站依赖 Google 的 reCaptcha 系统来防御机器人(实际上,Devpost 在创建新账户时也使用了 reCaptcha)。在 Google 研究团队于 2012 年演示了近乎完全击败文本 reCaptcha 之后,reCaptcha 系统演变为依赖音频和图像挑战,这些挑战历来对自动化系统来说更难解决。Google 不断迭代其设计,最近在去年就发布了更新更强大的版本。成功演示击败该验证码系统将给成千上万个流行网站带来重大漏洞。
我们的 unCaptcha 系统具备针对音频验证码的攻击能力。使用浏览器自动化软件,我们可以与目标网站交互并参与验证码过程,解析出必要的元素以开始攻击。我们主要依赖音频验证码攻击——通过正确识别口播数字,我们可以以编程方式通过 reCaptcha,并欺骗网站认为我们的机器人是人类。具体来说,unCaptcha 针对热门网站 Reddit,模拟创建新用户的流程,不过 unCaptcha 会在创建用户之前停止,以减少对 Reddit 的影响。
Google 的 reCaptcha 系统使用先进的风险分析系统,以编程方式判断给定用户是人类还是机器人的可能性。它考虑您的 cookie(进而考虑您与其他 Google 服务的交互)、解决挑战的速度、鼠标移动以及(显然)您成功解决给定任务的程度。随着系统越来越怀疑,它会提供越来越困难的挑战,并要求用户解决更多的挑战。研究人员已经发现了 reCaptcha 系统的轻微弱点——通常与 Google 服务进行 9 天的合法(ish)交互就足以显著降低系统的怀疑水平。
音频验证码的格式是一系列长度可变的数字,以不同的速度、音调和口音在背景噪音中朗读出来。为了攻击此验证码,我们识别页面上的音频负载,下载它,并自动根据语音位置进行分割。
然后,每个数字音频片段被上传到 6 个不同的免费在线音频转录服务(IBM、Google Cloud、Google Speech Recognition、Sphinx、Wit-AI、Bing Speech Recognition),并收集这些结果。我们使用这些结果进行集成,通过预定的启发式方法以概率方式枚举出最可能的数字字符串。这些数字随后被模拟输入到验证码中,完成验证码。通过测试,我们在单个数字识别方面看到了 92%+ 的准确率,在完全击败音频验证码方面达到了 85%+ 的准确率。
首先,安装 Python 依赖项:
$ pip install -r requirements.txt
确保您也安装了 sox、ffmpeg 和 selenium!
$ apt-get install sox ffmpeg selenium
然后,启动 PoC:
$ python main.py --audio --reddit
这将打开 reddit.com,与页面交互进入账户注册页面,生成一个假的用户名、电子邮件、密码,然后攻击音频验证码。一旦验证码完成(无论是否通过),浏览器将退出。