本文带给大家的内容是动态防御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. django框架基础-ORM进阶-长期维护

    ###############    ORM进阶---contenttype    ################ 设计思路: """ 路飞有两种课,专题课和学位课, ...

  2. Hypothesis Tests for One Population Mean When σ Is Known

    9.5 Hypothesis Tests for One Population Mean When σ Is Known 使用z-test前提(同使用mean distribution之前的考虑) 在 ...

  3. 基于Docker 部署Jmeter + Grafana + InfluxDB 性能测试监控配置(亲测可用)

    工具介绍: InfluxDB:是一款用Go语言编写的开源分布式时序.事件和指标数据库,无需外部依赖.该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, lo ...

  4. python读取配置文件报keyerror-文件路径不正确导致的错误

    - 在其他模块使用反射读取配置文件报错,但是在反射模块中读取GetData.check_list又是正确的 反射模块如下: # get_data.py from API_AUTO.p2p_projec ...

  5. gitlab两种连接方式:ssh和http对比

    共同点: 都可以使用git clone 地址 .将项目下载到本地. 不同点: 当将本地修改上传到远程服务器时,http需要输入用户名密码,ssh. 1.ssh方式: 这是一种相对安全的方式这要求将本地 ...

  6. ES7中的async和await

    ES7中的async和await 在上一章中,使用Promise将原本的回调方式转换为链式操作,这就将一个个异步执行的操作串在一条同步线上了.下一次的操作必须等待当前操作的结束. 使用Promise的 ...

  7. Navicat导入导出数据表

    当我们对mysql数据库进行了误操作,造成某个数据表中的部分数据丢失时,肯定就要利用备份的数据库,对丢失部分的数据进行导出.导入操作了.Navicat工具正好给我们提供了一个数据表的导入导出功能. 1 ...

  8. SpringDataJpa2

    1.SpringDataJpa的扩展 - 抽取 创建一个BaseRepository接口然后去继承JpaRepository和JpaSpecificationExecutor 然后在里面写我们自己想要 ...

  9. Design Patterns | 01 为什么要尽早掌握设计模式

    标题:Design Patterns | 01 为什么要尽早掌握设计模式 链接: 标签:设计模式 摘要:设计模式是前人经验的总结,教大家如何写出可扩展.可读.可维护的高质量代码.设计模式与日常工作中的 ...

  10. CSS的五种定位方式

    CSS中一共有五种定位: position:static:默认值 position:absolute:绝对定位 position:relative:相对对定位 position:fixed:固定定位 ...