文本验证已经过时 神经网络是验证码的大敌
作者: 日期:2017年03月22日 阅:4,881

机器是人类创造力的产物。然而,近来我们发现,机器屡屡战胜了人类。事实上,我们完全可以做得更好。

最初的验证码在2000年投入使用,从那时起验证码整体上都大同小异。考虑到验证码主要是一种安全手段,这显然会引发麻烦。毕竟,如果在长达17年的时间里,一项安全技术始终得不到更新,这简直是场灾难,因为这意味着全世界的攻击者已经花了整整17年,用新的攻击技术来挫败你老旧的防御技术。

不妨看看,过去17年里有什么影响了验证码。

对验证码最重要的影响因素是已经成为主流的机器学习。神经网络等技术已经从计算机科学中的尖端研究技术发展成了青少年打发时间的周末游戏。神经网络这类技术是程序员的不二选择,它们远比其他手段简单太多。

原本需要成千上万行代码实现的功能如今仅需几百行代码就可实现。读到这里,那些没用过神经网络的读者大概会惊奇不已。我想告诉各位的是,神经网络可以把复杂的任务变得简单易行。看看这个电脑通过学习分辨自行车照片的例子。

我们的目标是让电脑分辨照片中的自行车等物,如果不用神经网络的话,就必须编程来描述自行车的特征。

比如,程序员可以告诉程序寻找两个内银外黑的圆圈,圆圈内外有线相连。要做到这一点,程序可能会把图像分解成线、圆、椭圆等简单的形状。这种方法当然有效,却只适合辨别自行车的侧视图。如果给定的图片上自行车并没有侧摆着呢?如果自行车被倒挂着或者只能看到正面呢?程序员将被迫为每个可能的视角编写新规则,并要求程序一个个地检查这些规则。

这个方法的训练成本极低(事实上由于程序按照预编规则执行,没有什么训练成本),但是程序检查每个图像时的执行成本极高,而且程序员会花费大量的时间编写规则。因此,成立一个专门写算法的公司并提供验证码服务很划不来,每个验证码的的实现和算法成本高得让人难以接受,在经济欠发达国家甚至比人工校验还昂贵。

神经网络理出图像中所有的点并衡量权重。然后编成像素-权重表。当程序被要求分类一个从未见过的图像时,它将遍历数字1、2、3的权重表来对照每个像素值,看哪一组权重匹配程度最高,据此,操作者可以知道程序对输入的图片和已训练的字符的匹配的可信度。

现在,让我们回到自行车的例子,来看看具体怎样使用神经网络。

如果输入1000张自行车的图片来建立一个类似进程,权重矩阵会根据这些图片制定完整的规则来定义自行车的样子。

这些方法在光学字符识别领域非常有效。近年来,谷歌已经能够(用不到100行python代码)识别笔迹,有效性高达99.2%。以往通过软件攻克验证码因为种种原因显得不切实际,而如今这些问题都被解决了。我们已经能想象,类似神经网络的技术将被用于破解验证码。在一篇名为《一种对微软验证码的低成本攻击方式》里,纽卡斯尔大学的研究人员的验证码识别率达到了95%-100%。

目前,我们虽然只听到来自学术界的突破。不过,完全可以认为,黑客世界已经着手破解验证码。随着时间的推移,这些攻击将变得越来越便宜,并成为一种常态。

综上所述,防护团队有什么可以做的?在这种背景下,防护团队必须着手两件事。

1. 建设和使用需要更高计算成本攻克的验证码

关键在于“更高成本”。我这样说的原因在于,如果防护团队总是想当然地觉得验证码不会被破解,这就会引发17年没更新验证码技术这样的问题。

2. 防护团队应该避免只靠的应答式的验证码来对抗恶意尝试

谷歌的reCAPTCHA改善了这些问题。最终用户在与谷歌的reCAPTCHA交互时,看到的是一个对话框,上面写着“我不是一个机器人。”当用户关闭对话框时,验证程序会检查大量谷歌没有一一指定的细节。

作为例子,我将列举一些被考虑的细节:

  • 用户的鼠标移动到到对话框的路径
  • 用户的浏览器的细节
  • 用户花多少时间填写表单
  • IP的信誉

最后,也是最重要的一点,(据称)reCAPTCHA会观察用户在所有使用reCAPTCHA的网站上的状态,并收集有关用户整体行为的其他细节。

如果对话框之后,reCAPTCHA判定用户合法,会显示并发送一个验证标志。而如果reCAPTCHA发现用户不合法,用户就必须完成一个完整的彩色图像的分类问题。

想对于传统的验证码,新型验证码最大的优点在于,标志识别的训练要远比字母识别的训练难得多。谷歌使用专有数据集生成这些验证码。要打败reCAPTCHA这样的验证码,攻击者必须具有谷歌同一层次的大型数据集。这个简单的事实使谷歌的reCAPTCHA很棒。

现在,如果你的防护团队想要实现自己的解决方案,而非使用reCAPTCHA,你会做什么呢?(声明:这些只是我从研究中获取的想法后,我不保证它们适合你。)让我们回到这两件你想实现的事情。

1. 你想要攻克验证码的计算成本尽可能高

在不访问专有数据集的前提下,也许最好的方法是使用三维验证码。原因在于,用计算机解决OCR(光学字符识别)不再困难或昂贵。当我们加入三维数学,攻克这种验证码的计算和存储成本都会大幅增加。

三维验证码的计算成本昂贵的原因在于,它需要攻击者解决图像呈现角度的猜测和校验问题。此外,它需要三维数学,这让计算成本很高。三维验证码是有可能被破解的,但是其中难度很大,可能需要一个GPU才能有效解决问题。

强迫攻击者租用GPU服务器让托管基础设施攻击的成本变得更高。而这类三维验证码可以通过随机变化的更大的视觉干扰和深度变迁来变得更难攻克。

验证码该做却没做的另一件事,就是使用多种字体。大部分验证码只是字符和干扰混合成的图片。这允许攻击者建立模糊的验证码逆向机械工程并创建一个数据集,数据集提供给机器学习模型进行训练。如果使用大量随机字体,攻击者就需要对每一种字体训练他们的模型。这使得训练和破解的成本成倍上升。最后,字符的扭曲增加了随机误差,这会增加破解验证码的复杂性,攻击者必须具有更大的样本量来训练一个神经网络。

2. 防护团队应该避免只靠应答式的验证码来对抗恶意尝试

除了验证码以外,你需要做的包括:检查IP信誉、阻止代理或Tor节点、通过IP实施速度限制、监测通信、看看通用浏览模式是什么并审查IP是否经常违背这些模式、检查标题栏并尝试发现浏览器是否有异常。

如果这些的方法你只能记住一条,那么牢记这句:不要只用通用的二维文字验证码来防止恶意尝试。如果你只使用谷歌的reCAPTCHA,这会很好但却不够完美。

你真正需要对是向reCAPTCHA学习,找到一个绝佳的验证码,并建立基础设施来监控流量和通信状况。你不可能彻底打败恶意尝试,但是你可以让攻击者付出更多。

 

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章