简单分析下google,对于第一步的点击验证,google更多的是通过其基于虚拟机的强混淆器对整个数据采集过程进行了加密,并综合了环境信息(如设备指纹、cookie、点击频率等信息)来进行判断,而第二步的知识验证也包括以下几种(部分在之前的图中没有出现):
那这样是否就是验证码问题的银弹呢?
之前已经提到过,无论是google的norecaptcha还是我们的滑动验证,其核心都在于其本身的风控引擎和相应的规则,对于攻击者来说也有两条路:
rsa上针对googlenorecaptcha的破解
4月8日,BlackHat上公布了一篇来自哥伦比亚大学的论文,大致上讲了他们是如何突破google的norecaptcha验证码的。
简单说明下他们的破解过程:
1.攻击者通过大量的模拟器及代理IP来伪造Browsing History及Browser Environment来Fuzz测试Google的风险分析系统。测试过程中发现包括Useragent、Canvas Fingerprint、屏幕分辨率、鼠标行为动作众多因素均为风险判断的因子,风险判断决策返回结果随机且有严格的次数限制;
比如,攻击者发现,修改user agent、使用firefox而声称chrome等会导致norecaptcha出现回退,即出现普通的验证码。
2.在得出了这些参数与最终结果的关系后,也没有正面突破,走到了第二个思路,经过fuzz尝试后,发现google的容错性较高,即即使图中只有2个正确答案,你如果点击了3个图,包含两个正确答案,也算正确。并且,根据基于次数的统计发现,norecaptcha中出现答案的比例较多的为2个答案(74%),因此,攻击者很聪明的选择了每次选择3个图像的方法,因为这样做可以使得每次成功的概率提高(毕竟多选了一个可能正确的答案,即使选错了也可以对)。
3.同时,在大量的fuzz面前,攻击者们发现有些图片会时不时的出现。出现次数最多的一个图片出现了12次。他们开始意识到这些图片并不是实时生成的,而是从一个已经生成好的池子中生成的。重复的利用,也就意味着大规模的可能性。
尽管google生成的图每张的hash值不同,但是利用感知hash算法(Perceptual hash algorithm),攻击者可以对每次稍微变换了hash的图进行相似度比较,如果相似度较高,即可完成对已打标完成的图的重定位。
重定位完成后,既可以对已经完成的答案进行重复利用,而这种重复利用在大规模的攻击中是非常重要的,无限弹药在游戏中的作用你懂的。
4.完成了以上动作以后通过用图片搜索相应关键字(利用google自己的功能搞google)、其他图片搜索引擎(Alchemy、GRIS、Clarifai、NeuralTalk)等对图进行搜索,并利用这些数据得到了大量的图片相关的子类标信息,越来越多的标签信息意味着对图片有了更多更高维度的刻画。通过在各个网站收集相关标签,即可得到一个对该图片较为全面的描述。
5.利用机器学习的算法,其实就是利用Word2Vec,将两个图的对应关键字放在一个向量空间中,然后利用余弦相似性原理,找出相似度最高的几张图片。(与我们传统的找两个相似的文献或同作者的思路类似)。
6.将之前的五步进行组装。
阿里在实际的对抗中,我们也发现有攻击者无法攻破第一层防御,即他们无法正常通过,但是却知道如何触发第二级验证,并尝试通过破解第二级验证的问题通过。
如果想要真的做好在安全和体验间的良好平衡,需要同时在两个方面都下功夫,才能保证整体的安全水位。
前端可信端体系的建立、强大认知问题系统的建立需要持续不断思考和提高。我们的每一次的变更,接入的客户都将实时享受到更高安全等级的防护。
作者:目明@阿里巴巴安全部,更多技术文章,请访问阿里聚安全博客