本文带给大家的内容是动态防御WAF的技术原理及编程实战。

将通过介绍ShareWAF的核心技术点,向大家展示动态防御的优势、实现思路,并以编程实战的方式向大家展示如何在WAF产品开发过程中应用动态防御技术。

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

相比于传统WAF,动态防御型的WAF,有非常显著的优势:

【动态防御优势、原理】

概括而言,优势体现为两个词:主动防御、不可预见

传统WAF,是静待攻击来临、识别攻击,再抵御攻击。

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

举个例子:

假如打开一扇门:

传统WAF状态下,门后的景象总是一样的。

如果是动态防御WAF,每次打开门看到的将是不同的景色,可能是草原、可能是麦田。即:随机变化 、不可预测。

再举个例子:

比如射箭:

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

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

具体到WAF产品中。

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

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

在这个进程中,攻击者是可以发起持续攻击的。而且,攻击者可以通过使用代理、修改设备特征等方式,规避WAF规则,尝试对WAF进行Bypass。

而如果是动态防御

以ShareWAF为例,在对抗暴力破解这一功能点上,采取的方式是完全不同的:

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

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

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

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

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

【动态防御WAF编程实战】

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

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

反自动化攻击

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

登录页而的关键内容,通常是这样的:

<form>

User:<input name="username"/>

Pass:<input name="password"/>

</form>

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

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

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

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

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

代码功能简单分析:

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

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

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

假如攻击者原本采用自动化破解脚本:document.getElementById("username").value="***",这时将失效,因为username不见了,而且不可预见。

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

动态防御的理念即是如此。当然,这并不是全部,只是动态防御的一小部分应用。

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

如图:username已被还原:

反爬虫

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

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

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

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

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

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

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

效果展示:

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

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

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

如果是传统的自定义字体加密,相当于一种密码技术,也类似于传呼台数字代码表:

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

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

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

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

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

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

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

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

这样做的原因是:

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

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

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

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

这是运行效果:

可以看到,出现了新的对应关系,与之前Ԕ;表示"我",ԕ;表示"你"是不同的。

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

以上,便是ShareWAF动态防御技术在反自动化攻击、反爬虫场景中的应用。

超级干货:动态防御WAF技术原理及编程实战!的更多相关文章

  1. Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述—— 隐鹤 / HelloWorld

    Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述———— 隐鹤  /  HelloWorld 1. 引言 自本人第一篇博文“Excel阅读模式/单元格行列指示/聚光灯开发技术要 ...

  2. Java动态编译技术原理

    这里介绍Java动态编译技术原理! 编译,一般来说就是将源代码转换成机器码的过程,比如在C语言中中,将C语言源代码编译成a.out,,但是在Java中的理解可能有点不同,编译指的是将java 源代码转 ...

  3. 智能货柜 & 技术原理 (动态视觉识别 + 重力感应)

    智能货柜 & 技术原理 (动态视觉识别 + 重力感应) 智能货柜 拥有智能化.精细化运营模式的智能货柜成为代替无人货架继前进的方式. 相比无人货架来说,智能货柜的技术门槛更高,拥有 RFID. ...

  4. Java 动态调试技术原理及实践

    本文转载自Java 动态调试技术原理及实践 导语 断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径.但断点调试会在断点位置停顿,使得整个应用停止响应. ...

  5. 腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践

    本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦.” 1.GIF格式的历史 GIF ( Gr ...

  6. 快速理解高性能HTTP服务端的负载均衡技术原理(转)

    1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...

  7. 转载:P2P技术原理及应用(1)

    转帖allen303allen的空间 作 者:金海 廖小飞 摘要:对等网络(P2P)有3种主要的组织结构:分布式哈希表(DHT)结构.树形结构.网状结构.P2P技术已 经延伸到几乎所有的网络应用领域, ...

  8. Atitit 语音识别的技术原理

    Atitit 语音识别的技术原理 1.1. 语音识别技术,也被称为自动语音识别Automatic Speech Recognition,(ASR),2 1.2. 模型目前,主流的大词汇量语音识别系统多 ...

  9. 新手入门:史上最全Web端即时通讯技术原理详解

    前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为 ...

随机推荐

  1. Fastjson主要接口和类库说明

    2.主要的使用入口 Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成. public static final ...

  2. ExecuteScalar()方法的使用

    ExecuteScalar()方法的作用是: 执行查询,并返回查询所返回的结果集中第一行的第一列.所有其他的列和行将被忽略. 1.返回的是一个object类型,也就是说是所有数据类型的基类,可根据se ...

  3. python库之——sklearn

    机器学习库sklearn 官方documentation(资料)中分为不同的部分: 其中我们主要讲User Guide(机器学习算法理论介绍).API(程序实现方法): 一.User Guide ht ...

  4. 如果你有一个域名,你也可以免费有一个diy@yourdomain.com的企业邮局

    如果你有一个域名,例如:www.bengou.net那么你可以拥有一个免费邮箱:lajiyoujian@bengou.net.那么什么是企业邮局呢?有啥优点 企业邮局是指以您的域名作为后缀的电子邮件地 ...

  5. Mac系统常用软件

    1.往移动硬盘中拷贝东西.创建文件夹: Mounty 2.解压缩软件(rar): the unarchiver 3.类似Xshell软件: FinalShell(国产) 输入以下命令: curl -o ...

  6. HDU-1711-Number Sequence(KMP)(Rabin-Karp)

    Rabin-Karp Accepted 1711 904MS 5272K 1310 B G++ #include "bits/stdc++.h" using namespace s ...

  7. JS实现select去除option的使用注意事项

    网上讲JS动态添加option和删除option的文章很多,在此推荐一篇: http://www.jb51.net/article/35205.htm 我使用的是如下方法: function remo ...

  8. Esp8266和HomeKit

    Summary 没有找到合适的简单解决方案,将Esp8266控制的设备连接到HomeKit.所以参照EspEasy实现 HomeKit和Esp8266连接. 连接方式: Raspberry Zero ...

  9. 吴裕雄--天生自然python学习笔记:Python3 正则表达式

    Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参 ...

  10. 使用 Commitizen 撰写 Angular 规范的 commit message

    本文为原创文章,转载请标明出处 目录 安装及配置 使用 1. 安装及配置 npm install -g commitizen npm install -g cz-conventional-change ...