基于追踪标记的WAF设计思路
一 相关背景
目前,市面上的WAF产品通常采用”发现即阻断“的策略,以防护针对业务系统的Web攻击行为。虽然该策略可及时阻断攻击,但形式上过于简单,并不能有效掌握攻击者进一步的攻击意图,也不能有效提高攻击者的成本投入。本文借鉴蜜罐的思想,构思一种融合欺骗技术的WAF系统,目的是为现有WAF提供一种设计思路。相对于传统WAF,本文所述WAF不仅具有传统WAF的功能,同时可识别并追踪攻击者。
如图1所示,WAF系统以串联方式部署在业务系统的前面,用于对来自互联网的流量进行检测:当发现客户请求为正常流量时,则将其转发给业务服务区部署的“真实业务系统”,从而为正常用户提供所需的互联网服务;当发现客户请求为恶意流量时,则会对攻击源进行唯一性标记,并把该客户端的流量通过NGINX集群牵引到镜像服务区部署的“镜像业务系统”。
图1 WAF部署模式和运行流程
1 业务服务区:
部署有“真实业务系统”,用于处理正常用户的访问请求。如果“潜在攻击者”不对系统发起攻击,那么其访问请求会被转发到真实的业务服务区。只是一旦其发起攻击行为,便会被WAF标记为“攻击源”,并进行唯一性标记,那么其当前、及后续访问请求都会被牵引到镜像服务区。由于“镜像业务系统”的前端展示和业务功能与“真实业务系统”没有区别,所以整个牵引过程对攻击者是无感的。
2 镜像服务区:
部署有“镜像业务系统”,用于处理攻击者的访问请求。如前所述,该系统的前端展示和业务功能与“真实业务系统”没有区别,在使用过程中很难区分,同时做了数据脱敏处理、伪造了一些常见漏洞点。此外,为了防止攻击者在获取镜像服务区的机器权限后,以此为跳板,对业务服务区发起攻击,部署时要求镜像服务区与业务服务区需完全隔离,最好是物理层面的隔离。
3 欺骗服务区:
部署有各种“欺骗性系统”,用于引诱黑客在内网横行渗透过程中的攻击。“欺骗服务区”本质是一个蜜网,其目的是为了更长时间的浪费攻击者的时间与精力,更多的掌握攻击者的行为、手段、技能,更大程度上使攻击者漏出马脚、从而溯源其身份。比如:在数据库中存储一些伪造的、带有标记性特征的“高价值客户数据”,一旦被攻击者拿到并在网上售卖,则可对攻击者做进一步的溯源;在系统中放置一些伪造的、带有木马功能的“敏感文件”,一旦被攻击者拖回并打开,则可反向控制攻击者的客户端。
备注:镜像服务区、欺骗服务区可部署在阿里云、腾讯云等公有云平台上(或者其它隔离环境),本地IDC通过NGINX集群将识别到的攻击流量转发到这些区域。
二 系统设计
本文所述WAF的核心功能包括五个模块,分别是:流量检测模块、终端标记模块、流量分发模块、漏洞配置模块、指纹采集模块。(只是个人想法,可根据实际扩展)
图2 WAF概要设计和核心模块
1 流量检测模块:
不仅具备常规WAF的通用功能,如:SQL注入检测、XSS漏洞检测、代码执行检测、文件上传检测等,同时还具备“攻击源标记查验”功能,目的是判断请求流量中是否带有“终端标记模块”下发的攻击源标记字段。如果请求流量中带有攻击源标记字段,
表明该请求是“已被标记为攻击源”的客户端发起的,则直接将该请求经NGINX集群牵引至“镜像业务系统”;如果请求流量中没有攻击源标记,表明该请求是正常的客户端发起的,则会继续判断是否带有攻击特征。
2 终端标记模块:
用于对发起恶意请求的客户端进行标记。当流量检测模块发现当前请求为恶意请求时,便会调用终端标记模块在HTTP响应包中插入标记字段,以对发起该请求的客户端进行唯一性标记。其中,插入标记字段的功能是通过set-
cookie实现的,该特征字符串会反向到达、并存储在攻击者的浏览器中。由于该cookie值的过期时间设置为永久,因此只要不手动清除,浏览器随后访问目标网站的所有请求都会带上该字段。(格式:
trackid=32位随机字符串,形如:trackid =92f4ac47-527b-11eb-ba1b-f45c89c42263)
3 流量分发模块:
用于根据“流量检测模块”的判定结果信息、以及WAF系统中配置的路由信息,将访问请求分发到“真实业务系统”或“镜像业务系统”。其中,如果是“已知攻击源发起的请求”或“某客户端初次发起的恶意请求”,则将其经NGINX集群牵引到“镜像业务系统”;如果是
“正常客户端发起的请求”,则将其牵引到“真实业务系统”。对客户端而言,整个过程是完全透明的,且需要攻击者通过浏览器发起请求。
4 漏洞配置模块:
用于在“镜像业务系统中”中以“插件化”形式配置伪造的漏洞点,目的就是让黑客发现并对其攻击。其中,在部署漏洞前,可通过虚拟机镜像手段将业务系统从“业务服务区”克隆到了“镜像服务区”,并做好数据脱敏工作。在配置漏洞点的时候,漏洞配置模块可将事先构建好的漏洞文件下发到“镜像业务系统”服务器。(该功能可作为WAF的一部分,或者独立于WAF部署)
5 指纹采集模块:
用于采集攻击者的客户端设备指纹信息,攻击者的第三方平台账号、键盘记录、访问过的网站等信息。其中,整个过程是通过在“镜像业务系统”的返回页面中插入溯源脚步(JavaScript代码)实现的。当溯源脚本反向到达攻击源客户端、并被浏览器解析执行后,便会将相关的指纹信息回送给WAF系统。其中,采集信息的丰富度一定程度上依赖于攻击者的操作。
三 运行流程
WAF在对互联网边界流量处理的过程,其主要流程如图3所示,具体步骤如下:
图3 WAF对网络流量处理流程
1 基于“流量检测模块”查验流量中是否带有“攻击源标记”。如果没有,则进入步骤2;如果有,则表明当前请求是已被标记为攻击源的客户端发起的,则跳转到步骤4。
2 基于“流量检测模块”检测流量中是否带有攻击行为特征。如果没有,则表明当前请求是正常用户发起的,则跳转至步骤5;如果有,则进入步骤3。
3 基于“终端标记模块”对当前网络请求进行标记,并在对应的响应报文中通过set-cookie的方式插入攻击源标记字符串。
4 基于“流量分发模块”模块将网络流量转发至“镜像业务系统”。其中,该步骤处理的流量为“已知攻击源”与“新的攻击源”发起的网络请求。
5
基于“流量分发模块”模块将网络流量转发至“真实业务系统”。其中,该步骤处理的流量为正常用户使用的客户端发起的网络请求。备注:对于攻击源而言,一旦被WAF标记,其当前请求以及后续发起的网络请求,无论是否带有恶意特征,都会被转发到“镜像业务系统”。
四 总结归纳
整体而言,本文所述WAF从“潜在攻击识别、溯源取证分析"等方面弥补了传统WAF的不足,即保护了业务系统的安全性,又具备一定的溯源取证的能力。其优点在于:
1
可以避免攻击者对业务系统的潜在攻击:当识别到攻击流量后,WAF可基于“终端标记模块”对攻击源进行唯一性标记,进而将同一攻击源的当前流量、以及后续流量牵引到“镜像业务系统”,从而避免攻击者对真实业务系统的潜在攻击行为。
2
可消耗攻击者的时间以及攻击者的精力:无论何种目的、何种手段,所有的攻击行为都是需要投入时间和精力的。由于攻击行为被识别、牵引到了“镜像业务系统”,使得攻击者将时间、精力消耗在对“镜像业务系统”的攻击上,因此整个攻击过程对真实的业务系统是无效的,相对降低了黑客的有效攻击成果。
备注:本文所描述的思路需要一定的先验条件,即:攻击者使用浏览器(或配合Burp)对目标系统进行测试(目的是在Cookie中设置追踪ID)。除了基于追踪ID来判断请求是否由攻击者发起之外,也可基于“时间、源IP、目标IP”的方式进行判断,这样就不用考虑是否使用浏览器的问题了,只是有一定的误报。当然,没有一种技术是完美的,本文只是描述一种Web防护的思路。
、源IP、目标IP”的方式进行判断,这样就不用考虑是否使用浏览器的问题了,只是有一定的误报。当然,没有一种技术是完美的,本文只是描述一种Web防护的思路。
最后
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:
相关文章:

基于追踪标记的WAF设计思路
一 相关背景 目前,市面上的WAF产品通常采用”发现即阻断“的策略,以防护针对业务系统的Web攻击行为。虽然该策略可及时阻断攻击,但形式上过于简单,并不能有效掌握攻击者进一步的攻击意图,也不能有效提高攻击者的成本投…...

Java StringBuffer StringBuilder,超详细整理,适合新手入门
目录 一、StringBuffer和StringBuilder的区别是什么? 二、StringBuffer的示例 三、StringBuilder的示例 四、为什么StringBuffer和StringBuilder比String更适合在循环中使用? 五、如何将String对象转换为StringBuilder或StringBuffer对象࿱…...

数据结构—堆(完全解析)
数据结构—堆(完全解析) 数据结构——堆(Heap)大根堆、小根堆 详解数据结构——堆 堆的基本存储 【从堆的定义到优先队列、堆排序】 10分钟看懂必考的数据结构——堆 【堆/排序】堆排序的两种建堆方法 【算法】排序算法之堆排序 C…...

深度卷积对抗神经网络 进阶 第三部分 GANs Unpaired Translation with Cycle GAN 模型
非配对的图像转换应用 Unpaired Image-to-Image Translation Unpaired image-to-image translation 主要用于学习两组图像之间的对应关系,检查和寻找两堆数据中的共同内容(content)以及每堆独有的特点(style)。而这个…...

常见的排序算法 | 直接插入排序 | 希尔排序 | 选择排序 | 堆排序 | 冒泡排序 | 快速排序 | 归并排序 |(详解,附动图,代码)
思维导图: 一.插入排序 1.直接插入排序(InsertSort) ①手机通讯录时时刻刻都是有序的,新增一个电话号码时,就是使用插入排序的方法将其插入原有的有序序列。 ②打扑克 步骤: ①如果一个序列只有一个数&am…...

深入浅出 MySQL 索引(一)
MySQL 索引(基础篇) 你好,我是悟空。 本文目录如下: 一、前言 最近在梳理 MySQL 核心知识,刚好梳理到了 MySQL 索引相关的知识,我的文章风格很多都是原理 实战的方式带你去了解知识点,所以…...

FinClip 的 2022 与 2023
相比往年,今年复盘去年与展望新年的文章来的稍慢一点。不过也希望能够借这篇文章,和关注 FinClip 的用户朋友们一起聊聊,我们在去年和今年的想法与计划。 2022 在过去的一年中,我们的身边发生了很多事情,这些事情在不…...

Python 泛型 - 如何在实例方法中获取泛型参数T的类型?
先上解决方法:https://stackoverflow.com/questions/57706180/generict-base-class-how-to-get-type-of-t-from-within-instance 再来简单分析下源码。 talk is cheap, show me the code. from typing import Dict Dict[str, int]Dict只是一个类型,并不…...

Shell语法基础总结
Shell 变量使用变量只读变量删除变量变量类型Shell 字符串单引号与双引号字符串获取字符串长度提取子字符串拼接字符串Shell 数组定义数组读取数组获取数组的长度Shell 传递参数Shell 基本运算符算术运算符关系运算符布尔运算符逻辑运算符字符串运算符Shell 信息输出命令Shell …...

架构基本概念和架构本质
什么是架构和架构本质 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的基础&…...

taobao.trade.ordersku.update( 更新交易的销售属性 )
¥开放平台免费API必须用户授权 只能更新发货前子订单的销售属性 只能更新价格相同的销售属性。对于拍下减库存的交易会同步更新销售属性的库存量。对于旺店的交易,要使用商品扩展信息中的SKU价格来比较。 必须使用sku_id或sku_props中的一个参数来更新&a…...

算法实战应用案例精讲-【图像处理】使用scikit-image做图像处理(最终篇)(附python代码实现)
目录 高级滤波 autolevel bottomhat 与 tophat enhance_contrast entropy equalize gradient 其它滤波器...

数据结构与算法(四):树结构
前面讲到的顺序表、栈和队列都是一对一的线性结构,这节讲一对多的线性结构——树。「一对多」就是指一个元素只能有一个前驱,但可以有多个后继。 一、基本概念 树(tree)是n(n>0)个结点的有穷集。n0时称…...

taobao.trade.shippingaddress.update( 更改交易的收货地址 )
¥开放平台免费API必须用户授权 只能更新一笔交易里面的买家收货地址 只能更新发货前(即买家已付款,等待卖家发货状态)的交易的买家收货地址 更新后的发货地址可以通过taobao.trade.fullinfo.get查到 参数中所说的字节为GBK编码的&…...

VS Code安装及(C/C++)环境配置(Windows系统)
参考资料2份: 从零开始的vscode安装及环境配置教程(C/C)(Windows系统)_光中影zone的博客-CSDN博客_vscode运行配置https://blog.csdn.net/qq_45807140/article/details/112862592 VSCode配置C/C环境 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/87864677 五…...

【Spring Cloud Alibaba】006-OpenFeign
【Spring Cloud Alibaba】006-OpenFeign 文章目录【Spring Cloud Alibaba】006-OpenFeign一、概述1、Java 项目实现接口调用的方法HttpclientOkhttpHttpURLConnectionRestTemplate WebClient2、Feign 概述二、Spring Cloud Alibaba 快速整合 OpenFeign1、添加依赖2、启动类加注…...

挚文集团短期内不适合投资,长期内看好
来源:猛兽财经 作者:猛兽财经 挚文集团(MOMO)在新闻稿中称自己是“中国在线社交和娱乐领域的领军企业”。 该公司旗下的陌陌是中国“陌生人社交网络”移动应用类别的领导者,并在2022年9月拥有超过1亿的月活跃用户。探…...

clion开发的常用快捷键以及gitcrlf的问题
前段报错:git config core.autocrlf false 然后删除app目录下的文件,除了.git文件夹然后 git bash ,执行 git reset --hardclion常用快捷键:Double shift 搜索文件F9调试F9运行到断点Ctrl F8 打断点F7单步步入Shift F8 单步跳出F8执行下一行代…...

LeetCode 格雷编码问题
格雷编码格雷编码的定义格雷编码的码表LeetCode 89. 格雷编码实例思路与代码思路一:找规律代码一代码二思路二:与自然数之间的关系(你必须知道,这个规律要去百度才知道)代码一LeetCode 1238. 循环码排列实例思路与代码…...

java生成html文件输出到指定位置
String fileName "filename.html";StringBuilder sb new StringBuilder();// 使用StringBuilder 构建HTML文件sb.append("<html>\n");sb.append("<head>\n");sb.append("<title>HTML File</title>\n");sb.a…...

华为OD机试用Python实现 -【微服务的集成测试】(2023-Q1 新题)
华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 微服务的集成测试…...

js版 力扣 62. 不同路径
一、题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径࿱…...

Qt音视频开发16-通用悬浮按钮工具栏的设计
一、前言 通用悬浮按钮工具栏这个功能经过了好几个版本的迭代,一开始设计的时候是写在视频控件widget窗体中,当时功能简单就放一排按钮在顶部悬浮widget中就好,随着用户需求的变化,用户需要自定义悬浮条的要求越发强烈࿰…...

商品比价API使用说明
商品数据分析 国内最早的比价搜索平台,专注于电商大数据的分析,有10年技术和数据沉淀。 公司自主研发的爬虫、搜索引擎、分布式计算等技术, 实现了对海量电商数据的及时监测、清洗和统计。 数据丰富 详细使用api 数据采集维度ÿ…...

基于 TensorFlow 的植物识别教程
首先,需要准备一些训练数据集。这些数据集应该包含两个文件夹:一个用于训练数据,另一个用于测试数据。每个文件夹应该包含子文件夹,每个子文件夹对应一个植物的种类,并包含该植物的图像。接下来,我们需要使…...

渗透测试之主机探测存活性实验
渗透测试之主机探测存活性实验实验目的一、实验原理1.1 TCP/IP协议1. TCP2. IP1.2 Ping的原理二、实验环境2.1 操作机器2.2 实验工具三、实验步骤1. 学会使用ping命令2. 使用Nmap进行多种方式的探测总结实验目的 熟悉TCP/IP协议、Ping命令基本概念学习nmap、SuperScan扫描方式…...

好用的idea插件leetcode editor【详细安装指南】
如果你和我一样存在着如下困扰: 上班想摸鱼刷leetcode,但是直接打开leetcode界面太扎眼了或者为leetcode刷题不可以debug而发愁 那今天分享的一款IDEA插件可以统统解决上述问题,插件名字叫leetcode editor,你可以直接在plugins中…...

二氧化碳地质封存技术应用前景及模型构建实践方法与讨论
2022年七月七日,工业和信息化部、发展改革委、生态环境部关于印发工业领域碳达峰实施方案的通知落地。全国各省份积极响应,纷纷出台地方指导文件,标志着我国碳减排事业的全面铺开。二氧化碳地质封存技术作为实现我国“双碳”目标的重要一环&a…...

STM32开发(12)----CubeMX配置WWDG
CubeMX配置窗口看门狗(WWDG)前言一、窗口看门狗的介绍二、实验过程1.STM32CubeMX配置窗口看门狗2.代码实现3.硬件连接4.实验结果总结前言 本章介绍使用STM32CubeMX对窗口看门狗定时器进行配置的方法。门狗本质上是一个定时器,提供了更高的安…...