20199306 2019-2020-2 《网络攻防实践》期末大作业

20199306 2019-2020-2 《网络攻防实践》期末大作业

我选择的论文是Yet Another Text Captcha Solver A Generative Adversarial Network Based Approach,我将从我将从论文介绍、论文算法、实验复现、论文结论四个部分来介绍这篇论文以及我复现的一些结果与思考。

一.论文介绍

1.1 引入

验证码全称:Completely Automated Public Turing Test to Tell Computers and Humans Apart 全自动区分计算机和人类的图灵测试,同时也被称作反向图灵测试,因为它是由机器生产问题来鉴别回答对象是否为人类。
这篇研究中增加干扰类型对安全性和可用性上影响情况。单一的干扰,比如:旋转、扭曲、少量重叠等几乎对机器的识别没有任何影响,而更深程度地变形虽然能有效降低机器识别率,但同时也极大地影响了正常用户的使用。
图灵测试中,超过30%的概率无法分别人还是机器就表明机器具有了人类只能。而在验证码的领域中,如果验证码被机器识别率超过1%,则该验证码即被视为无效。
所以在人工智能极速发展的今天,我们应该重新考虑字符型验证码是否仍是一项有效的抵御恶意机器流量的手段。近年来,像同盾智能验证、易盾、腾讯防水墙等基于生物行为特征的验证码的出现,让我们得以摆脱这些用户体验极差的扭曲字符。而阿里图灵实验室的基于生活常识的问答型验证码,以及复旦大学基于语意理解的验证码也为今后验证码的发展方向提供了全新的思路。

1.2 论文介绍

本次实验基于ACM CCS 2018 上的一篇基于少量样本构建验证码求解器的论文:《Yet Another Text Captcha Solver: A Generative Adversarial Network Based Approach》(《使用少量样本破解文本验证码》),该论文是由中国西北大学的房鼎益、陈晓江教授团队、北京大学以及英国兰卡斯特大学联合发表。
关键词:基于文本的验证码;深度学习;转移学习;生成对抗网络。

1.3 论文创新点

识别字符验证码已经算是一个老生常谈的话题了。目前为止,有非常多的研究都表明,不管是使用传统算法或者机器学习的方法都能够对字符验证码有一个非常高的识别率。而现今仍有很多平台仍在使用字符型验证码的原因之一是,许多先前的攻击都是针对某种特定的验证码类型,而且需要收集大量的数据样本以及耗时的人工打标过程。这意味着,验证码干扰类型的改变可以导致所有的攻击失效。而本文提出了一种基于对抗生成网络(GAN)的方法,该方法仅需要极少的数据样本就能达到高于之前方法的准确率。我们知道,利用机器学习方法来识别验证码图片的关键在于获取足够多的样本。本文通过构建一个验证码生成器来解决这一问题,然后利用生成器生成的图片来训练基础验证码求解器,最后通过迁移学习的方法,仅需少量的真实图片即可构建最终的优化求解器。该方法相较之前四种最先进的验证码求解器,不仅能够在所有测试集上提供更高的准确率,而且还成功地攻击了其他方法零识别率的验证码类型。

二.论文算法

论文核心思路

作者小组在一次研究关于AI的讨论中了解到了Generative Adversarial Networks(GANs),当时了解到GANs不仅可以生成目标数据,而且其改进技术Conditional Generative Adversarial Networks(CGANS)还可以实现图像自动标注的任务(如图像风格间的转换)。
20199306 2019-2020-2 《网络攻防实践》期末大作业_第1张图片
既然GANs有强大的生成能力,那么就可能生成海量与目标网站风格类似的验证码。CGANs既然可以实现图像风格间的转换,那么就能够去掉图像中的颜色,换句话说,就可以去掉验证码图像中复杂的混淆背景。上述两点设想对于减少训练样本、降低攻击成本有至关重要的作用。具体地,如果能够自动生成大量的验证码,就直接让攻击者从手动收集和标注验证码的繁重工作中解脱出来,进而降低攻击成本;如果能够去掉验证码中的背景,就能够减少训练样本的数量,从而提高模型的识别率。
20199306 2019-2020-2 《网络攻防实践》期末大作业_第2张图片
然而,事情并没有预想的那样一帆风顺。虽然CGANs可以有效地去除验证码的背景。但GANs的生成效果却没有想象中的好。GANs是通过随机噪声或高斯噪声来生成数据的,并且训练过程中需要大量的真实数据作为参考,而当前验证码中加入了非常复杂的字符变换,若要训练验证码生成模型,势必需要更多真实验证码作为参考。
既然使用随机噪声生成验证码需要大量的真实数据,那么我们就开始考虑使用传统验证码生成器去生成,将生成的验证码替换成随机噪声作为GANs的输入,让GANs对生成的验证码做微调。然后使用鉴别器评估生成的验证码的风格是否与真实验证码风格类似,即生成数据与真实数据同分布。于是,首先将验证码参数化表示,即所用的字符、字符旋转角度、扭曲程度、所用背景、所用字体等参数化,然后利用网络自动调整生成参数。这样就实现了数据的自动生成,减少了人工参与的工作量。利用生成的数据,就可以训练验证码识别模型。为了进一步降低生成数据与真实数据之间的差别,我们使用了迁移学习技术调优模型,从而提高模型的泛化能力和识别精度。于是,这就成了本文的核心思路。

2.1 数据集的准备

首先,实验需要少量的真实数据集,本文中每种类型的验证码需要1500张真实图片。500张用于所有训练环节,1000张用于最终测试。在收集完验证码图片后,需要人工打标。除了正确的字符外,我们也需要为每一张图片标记存在的干扰类型。在本文测试的22种验证码中,总共包含了6种类型的干扰:

  • 干扰线
  • 字符重叠
  • 空心或者实心字体
  • 字符旋转、扭曲、波形
  • 多种字体大小和颜色
  • 背景噪声
    20199306 2019-2020-2 《网络攻防实践》期末大作业_第3张图片

2.2 实验算法思路

本文中的方法总共分为3个部分:验证码生成器、预处理模型以及求解器。首先,我们通过少量的真实验证码来训练一个能够无限生成近似真实验证码的验证码生成器。然后基于验证码生成器生成的带有干扰的验证码以及无干扰的验证码来训练预处理模型学会去除验证码图片中的干扰。最后,经过预处理模型处理过,已经去除干扰的图片再进入验证码求解器进行字符识别。
20199306 2019-2020-2 《网络攻防实践》期末大作业_第4张图片

2.2.1 验证码生成器

以往的工作表明,要训练一个高效的基于CNN的求解器,甚至需要超过230万张训练图片。无论是收集还是打标这些样本,都是一件非常耗时的事情。
所以作者利用对抗生成网络来生成图片样本,以尽可能地减少前期需要的样本数量,而且生成图片能够覆盖到的问题空间要远大于人工打标图片所能做到的。
验证码生成器包含两个组成部分:生成器G与判别器D。G的作用是生成与真实目标验证码尽量相似的验证码图片,而D的作用则是尝试区分图片是G生成的还是真实图片。
20199306 2019-2020-2 《网络攻防实践》期末大作业_第5张图片
20199306 2019-2020-2 《网络攻防实践》期末大作业_第6张图片

2.2.1.1 生成器

生成器接受一串随机的字符集与干扰参数作为输入,通过验证码图片生成器后产出带有输入字符的图片,然后再经过一个基于CNN的生成网络,根据输入参数添加干扰。
为了初始化训练过程,我们提供了一组真实图片给GAN学习引擎,以及初始的模型参数。生成器后续会持续批量生成图片输入判别器,如果判别器能够正确识别大部分的生成图片,则使用网格搜索算法(grid search)来调整模型参数,之后用新的参数来生成一组图片。训练过程会持续上述步骤直到判别器的正确率低于5%为止。
当训练结束时,学习引擎最终会输出最优的模型参数以及图片生成网络。
这里在学习引擎训练的过程中,我们需要提供大量免费字体集供引擎选择与真实图片最相符的。
20199306 2019-2020-2 《网络攻防实践》期末大作业_第7张图片

2.2.1.2 判别器

判别器是一个卷积网络,其网络的最后一层会输出输入验证码为生成图片的概率。
我们使用批量验证码来训练判别器,其中每一个小批量(mini-batch)都包含了随机生成的验证码 xi 以及真实验证码yi ,我们把 x 标记为1,y 标记为0.
判别器网络的损失函数为:
20199306 2019-2020-2 《网络攻防实践》期末大作业_第8张图片
这个公式与二分类问题中的交叉熵误差相同,其中D(.)即图片是生成图片的概率,1 - D(.)为图片是真实图片的概率。

2.2.1.3 训练

整个训练过程使用小批量随机梯度下降(SGD)算法,以及学习率(learning rate)为0.0002的Adam solver。整体训练目标遵循一般GAN方法,使用L1范数,正则化项整体训练目标遵循一般的GAN方法,使用L1范数,正则化项λ设置为0.0001.
训练目标公式描述:
20199306 2019-2020-2 《网络攻防实践》期末大作业_第9张图片
可以看到,生成器G的目标是最小化生成图片与真实图片的差距,而判别器D则试图最大化其差别。在训练时,当更新生成器的参数的时候,需要保持判别器的参数不变,反之亦然。在作者的实验环境中,对于每种验证码类型,训练耗时2天。而生成网络的效率极高,1分钟可以生成1百万张图片。

2.2.2 预处理模型

在把验证码输入最终的求解器之前,我们需要有一个预处理的操作,用于去除干扰并规范字体(比如:填充空心的字符,规范化字符间的间隔)。预处理模型我们使用了Pix2Pix图片转换框架,这个框架本身是用于转换图片风格的。在我们的场景中,被转换的图片是真实的验证码图片,我们的模型也可以去除同时包含多种干扰的验证码类型。
每一种验证码类型都需要单独训练特定的预处理模型,预处理模型依然是基于GAN。
20199306 2019-2020-2 《网络攻防实践》期末大作业_第10张图片
在这个预训练过程中,我们输入的是一对对验证码图片对,这个图片对中包含了完整的验证码图片以及其对应的去除干扰后的图片。由于训练的图片都是通过之前的验证码生成器生成的,所以这个训练数据的获取十分简单。在有了初始生成器及判别器后,我们再使用对抗生成网络来继续训练,当判别器对于生成图片的识别率低于5%时,训练终止。

2.2.3 验证码求解器

我们使用两步法来构造最终的验证码求解器。
首先我们通过生成图片来训练一个基础求解器,然后通过对应的真实验证码(与之前训练验证码生成器的是同一批图片)来优化基础求解器。
验证码求解器基于经典的CNN框架LeNet-5来构造,作者也考虑过使用其他CNN结构包括ResNet、Inception和VGG。但是作者发现,这些高级框架的表现与LeNet-5并没有什么差别。由于LeNet-5更加简单,而且在迁移学习时需要更少的数据量,所以作者最终选择了LeNet-5。
LeNet-5最初是用于识别单个字符,但作者加入了额外5层网络(2层卷积网络以及3层池化网络来扩展使其能够识别多个字符。
20199306 2019-2020-2 《网络攻防实践》期末大作业_第11张图片

三.实验复现

3.1 实验环境准备

本次实验的环境为:

  • Tensorflow-gpu
  • Cuda 11
  • Python 3.75

实验环境的配置主要参考博客:https://blog.csdn.net/u012319441/article/details/95551632
20199306 2019-2020-2 《网络攻防实践》期末大作业_第12张图片

3.2 实验复现结果

20199306 2019-2020-2 《网络攻防实践》期末大作业_第13张图片
作者利用该方法:

  • 攻击了目前常见的11种验证码,证明它们都可以被攻破;
  • 识别其它22种验证码上的准确性,证明该方法的准确度也高于其他方法。

实验具体结果:
20199306 2019-2020-2 《网络攻防实践》期末大作业_第14张图片
可以看到,除了Weibo、Google、Baidu和Wikipedia外,基础求解器对于11种验证码中其他验证码的识别成功率都在20%以上。而优化求解器则显著提高了准确率,对于wikipedia从7%提升到78%,weibo 从4.7% 提升到44%。
数据表明,利用迁移学习来优化求解器可以大大减少对真实验证码数据集数量的需求。

四.论文结论

本文最大的贡献在于,仅仅使用了500张训练图片,其验证码求解器就达到了比之前研究更高的准确率。通过GAN构造的验证码生成器可以无限地生成与真实验证码近似的图片,以及根据输入的参数配置来生成带有对应干扰项(包括不带任何干扰)的验证码。这样极大地节省了人工标注的消耗以及免去了选择针对性算法来分割字符、去除噪声、规范字体等等之前必备的流程。
当然该方法也存在着一定的局限性,比如对于不定长度字符的验证码类型,方法需要针对每一种可能长度进行一次完整的训练流程。在处理时,还需要判断输入图片的字符长度以选择相应的验证码求解器。
鉴于深度学习和基于对抗的生成方法在解决与图像相关的任务方面取得了很大进展,这项工作中提供的思路可以帮助安全专家重新审视文本验证码的设计。
而面对这样的攻击,应对方法如下:为了缓解此类攻击,建议网站同时使用多套验证码方案,验证码中每个字符都使用不同的字体和风格,并且需要频繁的更新(最好更新频率为一天)验证码方案,以增加攻击的成本使攻击难以成功。但这只是暂时的缓解措施,并不能从根源上增强验证码的安全性,而且复杂的验证码方案由于用户友好性差并不能很好的推广使用。

五.课程总结

5.1 学习总结

这次的网络攻防课程对我来说是一个不小的挑战,不仅在因为我是跨考到计算机技术专业的,更因为我在之前从未接触过网络安全方面相关的知识,事实上,我一开始也没有选择这门课程,但因为学校安排,阴差阳错开启了在疫情期间线上学习网络攻防实践课的奇妙旅程。
刚开始学习起来非常吃力而且压力也很大,虽然在上学期接触了Linux课程,但对Linux和虚拟机的操作还是非常不熟练。因此导致在前几次比较简单的实验中,接触出现打错命令和虚拟机连不上网的情况,后来通过查询博客找到解决方法。从某种程度上来说,这次课程对我最大的收获之一就是有机会在无法返校的情况下,亲自动手实践同时养成通过查询博客来解决问题的习惯,这样的经历和习惯相信对我之后的科研学习生活都会有很大的帮助。在经历了初期的不适应后,之后的多次实践作业以及课堂实践,我也变得慢慢适应课堂节奏、熟悉操作流程。当然这也不可避免的要经历“工具党”的阶段,其中比较遗憾的一点便是几次课堂实践由于各种原因没有按时完成,
迟了一会所以最后云班课的经验值我排名不高。
除了课堂学习和实践,还有慕课学习也非常特别,由于没有正常的学习时间安排事实上我经常会忘记,但好在还是完成了(虽然效果不理想)。对我来说,慕课的学习是一个重要的知识的补充,从中我了解到了很多网络安全方面的知识和概况。同时,老师还安排了英语自学打开,不过因为除此之外的课程太占时间和精力所以我最后没有完成这个部分内容,可以说非常遗憾了。
总的来说,这门课程的学习对我来说是一个巨大的挑战,非常庆幸自己还是很好的完成了课程的学习和大部分实践作业。在这样一个过程中,我学到了很多非常有利于日后科研的学习实践方面的习惯、技巧和方法。

5.2 全课的学习总结和建议

网络攻防的的授课方式是非常特殊的,对我来说是第一次遇到的,因此刚开始非常不适应,也经常抱怨老师授课方式过于奇怪。但经过几次实践作业之后也慢慢理解了,因为作业的授课方式确实科研有助于提高自己的实践能力进而有助于日后自己的科研。
总的来说网络攻防是一门动手能力很强的课程,真的很锻炼动手能力。因此我认为课程就按照现在这个节奏进行是非常不错的。

你可能感兴趣的:(20199306 2019-2020-2 《网络攻防实践》期末大作业)