干货:动态防护WAF技术原理及编程实战!

本文带给你们的内容是动态防护WAF的技术原理及编程实战。css

将经过介绍ShareWAF的核心技术点,向你们展现动态防护的优点、实现思路,并以编程实战的方式向你们展现如何在WAF产品开发过程当中应用动态防护技术。前端

07c4c23a6de24303a47437797c263c64

ShareWAF是一款动态防护型WAF产品,其在反自动化***、反爬虫等领域应用了动态防护技术。web

相比于传统WAF,动态防护型的WAF,有很是显著的优点:编程

【动态防护优点、原理】浏览器

归纳而言,优点体现为两个词:主动防护、不可预见安全

传统WAF,是静待***来临、识别***,再抵御***。并发

应用动态防护技术后,WAF将逆转***模式:再也不被动,而是时刻处于主动出击、积极防御状态。ide

举个例子:工具

假如打开一扇门:字体

传统WAF状态下,门后的景象老是同样的。

若是是动态防护WAF,每次打开门看到的将是不一样的景色,多是草原、多是麦田。即:随机变化 、不可预测。

59cc3cd8cb2a4e289a93e37882ff9dd3

ae704e5bf91340148b001574f0879872

再举个例子:

好比射箭:

传统WAF状态下,箭靶是固定的。

若是是动态防护WAF,箭靶将是随机移动的。即:动态变化,目标不可预测。

d4e14ca0157b4e36963eb215f5093e90

0d3dca49eeab4821a426c80a8b9c20d3

具体到WAF产品中。

好比反暴力破解,传统WAF可能采用一套规则,例如:访问者IP或设备指纹+持续登陆行为+连续尝试登陆次数+登陆失败次数,经过规则判断是否属于暴力破解行为。

这是正统的、中规中矩的防卫理念,是被动式的。

在这个进程中,***者是能够发起持续***的。并且,***者能够经过使用代理、修改设备特征等方式,规避WAF规则,尝试对WAF进行Bypass。

e6f67f0534d94e3a99ef997187973e48

而若是是动态防护

以ShareWAF为例,在对抗暴力破解这一功能点上,采起的方式是彻底不一样的:

ShareWAF会对被破解的某个关键点,进行动态封装,好比:用户名。

具体而言:保护前,用户名在网页中常常是username之类的固定元素名称。暴力破解***者会用自动化的工具或脚本,自动对其赋值,而后发起请求、尝试登陆,反复进行此操做便是***过程。

ShareWAF会对username进行封装,并且是动态的,用户端发起访问请求获得的将再也不是username,每次获得的都是某个随机数符串。

这样,自动化的工具或脚本,就没法对关键的暴力破解点进行定位、赋值。***行为在前端就被终结。

7d1f93bdd43b48f790485f3285058437

ShareWAF的反爬虫也采用相似的理念。

【动态防护WAF编程实战】

前面是理论,接下来是实战,证实理论的可行性、演示如何在安全编程开发中应用动态防御技术。

将经过例程,分别演示ShareWAF的反自动化***、反爬虫功能的核心实现。

反自动化***

这里将经过一个例程,一个最简单的登陆页面,模拟ShareWAF如何利用动态防护技术对暴力破解这类自动化***进行防护。

登陆页而的关键内容,一般是这样的:

<form>

User:<input name="username"/>

Pass:<input name="password"/>

</form>

展示在浏览器端是一个简单的登陆页,提供用户名、密码输入,并进行登陆。

919991e451c3475baa4b6cdeb6ed48d5

***者进行暴力破解时,可能采起的方式是:对username元素进行赋值,并发起登陆;或用Burp Suite等工具拦截数据并修改数据包进行枚举破解。

这里且再也不谈传统WAF的应对手段,直入主题,看ShareWAF是如何进行动态防护的。

例程代码只有几十行,展现最核心的"动态"概念。

064638c5b529428a90f1a814a828732c

这是一段NodeJS代码,实现了一个web服务,其中融入了ShareWAF的动态防护理念。

代码功能简单分析:

重点一:动态变形池,用于存放username和动态变形内容的对应关系;

重点二:在页面访问时,进行username元素动态变形、将变形对应关系存储到变形池,并将变形后的内容发送到浏览器端。这一步完成时,浏览器端本来一成不变的username元素将在每次访问或刷新时发生动态变化:

ba8f1c7e9086420f9ada5f1247606cf1

71ae45c9201a4aaba5d687dba62b3d91

留意上方的name值,本来应该是username,而这时随机变化的字符串,两张图中name值是不一样的,事实上,每次都是不一样的。

假如***者本来采用自动化破解脚本:document.getElementById("username").value="***",这时将失效,由于username不见了,并且不可预见。

Burp Suite之类的数据包嗅探、截取、修改工具也失效了,由于关键字段username不见了。

动态防护的理念便是如此。固然,这并非所有,只是动态防护的一小部分应用。

重点3、动态变形过的username固然是须要还原的,不然将影响原有的业务功能。代码中的"变形池"存放的是username和"变形码(即:随机变形的字符串)"对应关系。经过对应关系,能够很轻松的还原回username,在WAF功能中,这时该将还原后的数据再转发给被保护网站,实现正常的业务流程。

如图:username已被还原:

0b89dcce80da4735bd587aa8b37d3b47

反爬虫

前一个例子是应用了针对内容的动态防护,在反爬虫领域,动态防护又有所不一样。

爬虫有多种类型,下面要讲的反爬虫,准确的是说反内容爬虫,防止内容被爬取,也能够理解为防止网页内容被复制。

反内容爬虫,惯用的一种方式是进行字体加密,即便用自定义字体。

但通常来讲,自定义字体反爬容易被破解:***者获取字体后,很容易进行逆向分析,得出字码对应逻辑,进而还原出本来内容。ShareWAF的反内容爬虫,在自定义字体的基础上,加入了"动态"概念:

使字体成为动态路径、字体文件不可被下载。

这部分功能的实现,原理与以前相似,一样是在将数据发往浏览器以前先对特定的内容:字体路径,作动态变化处理,在收到请求时,再还原为原始正确路径,使文件可读取。

2ef2b368da8f492683e379915f2a1187

有一点特殊之处是:为了防止从网页源码中查看字体路径、下载字体文件,又对"动态"路径增长了访问时间限制、使用一次即失效功能。如此,达到了:加载网页时文件能够正常读取,但非法获取文件路径却不能打开的目的。

效果展现:

c71e0af86ba6421592091c6a4024c0bc

fd884a18853944b092c2f76dabe96615

在这两张图中能够看到:字体路径是变化的、从浏览器打开文件地址,文件不能读取和下载。

使字体成为动态字体,防止逆向分析。

动态自定义字体技术,在ShareWAF中称其为:动态字体变码加密。

若是是传统的自定义字体加密,至关于一种密码技术,也相似于传呼台数字代码表:

0aba77d38ccc435abdb6db7a48022b56

4c24f5e47af944808e6af57ec7bb72d5

即用某个或某几个数字,代替某个或某几个文字。

具体到网页文字内容加密反爬,是以下的效果:

780ec1989b0d440a8da729e60c4e22f7

f146400c17914a14ab011d817166e691

也就是网页中显示正常的"文字",但在源码中实际并不存在,存在的是"文字"对应的密码字符。

这种文字,是不可复制的,总体复制网页中的文字时,"密码文字"部分将会缺失:

9a3d8010584e4cd5932083af3269c800

那么,爬虫也就没法复制、没法爬取内容。

这种技术的实现依赖于自定义字体,即网页源码中的css引入字体文件功能:

78fa82f7de6c41e6935000241ec2d61c

也就是须要引入自定义的字体文件。

自定义字体文件的相关知识不是本文的重点,在此略过。咱们的重点是实现"动态自定义自体文件"。

这样作的缘由是:

若是使用一个固定的自定义字体文件,字体和数字的对应关系是能够被分析得出的。如上面:

Ԕ;表示"我",ԕ;表示"你"等等。

为了防止被分析出对应关系,咱们须要对字体的加密码也进行动态处理。

在本例中,提供了一种方法,用于生成新的变码字体:

846e6d64205a4c45866ebe27f983c4e7

这是运行效果:

cd6bf168933c4e47a3011a64750f2467

能够看到,出现了新的对应关系,与以前Ԕ;表示"我",ԕ;表示"你"是不一样的。

372360ac19c34b84adeecd0769fabb88

这样动态的改变字体编码,就能够防止文字和数字编码的对应关系被分析获取。

以上,即是ShareWAF动态防护技术在反自动化***、反爬虫场景中的应用。

相关文章
相关标签/搜索