最新消息:本站介绍:国外VPS、云服务器,海外服务器,一手资源推荐平台

如何使用正则表达式来阻止DDoS攻击

网络安全 快米云 来源:快米云 324浏览

GCore ddos​​保护

在 DDoS 保护中,XDP 和正则表达式 (regex) 的捆绑。本文将解释为什么开始使用这个解决方案(XDP 中的正则表达式)以及他们如何通过第三方引擎和 API 开发绑定它们。

此外,我们还将解释他们在 XDP 和基准测试结果中处理正则表达式的开源解决方案。

使用 XDP 框架的原因

在早期的 DDoS 防护服务中,他们在少量运行 DPDK(一种用于快速数据包处理的 Linux 框架)的专用服务器(节点)上运行,并使用正则表达式过滤流量。通过使用这项技术,他们借助该捆绑包成功保护了客户的应用程序。然而,随着 DDoS 攻击的容量从 2021 年的 300 Gbps 增加到 2022 年的 700 Gbps,最终证明底层基础设施不足。

DPDK 需要独占网络适配器访问权限才能有效运行。这样,将其与其他用途集成起来就极其困难(而且不合理)到不可能的地步。如果现有基础设施要在不修改的情况下增长,就需要为 DPDK 购买新的专用节点。Gcore 认为这不是一个具有成本效益的选择,并着手寻找一个。

除了 DDoS 保护服务外,提供由超过一千个 CDN 节点组成的内容分发网络 (CDN) 基础设施。因此,他们开始将其用于内容分发和流量筛选是有意义的,因为更多的节点意味着更好的安全性来抵御越来越强大的攻击者。

由于 DPDK 不能与 CDN 节点一起工作(它需要专用的节点),Gcore 选择使用 XDP 框架来代替。他们声称与以前版本相比的主要改进是它与其他应用程序集成到堆栈中的程度。DDoS 保护以前只能在具有 DPDK 的专用服务器上使用(图 1),但现在它可以集成到 CDN 服务器中(图 2),从而实现更大的可扩展性。

Fig. 1 DDoS Protection with dedicated servers (DPDK)????????
Fig. 1 DDoS Protection with dedicated servers (DPDK)
来源:news.zzqidc.com

图 2 集成到 CDN 服务器 (XDP) 中的 DDoS 保护
图 2 集成到 CDN 服务器 (XDP) 中的 DDoS 保护
来源:news.zzqidc.com

为什么认为 XDP 有用:

  • 成本效益。该框架可以安装在具有任何边缘网络应用程序的服务器上,例如 Web 服务器和 DNS 服务器,因此不需要昂贵的专用设备,开发人员也不需要花费数小时将其他应用程序与 XDP 集成。
  • 攻击检测速度。该框架可以安装在数百个 CDN 服务器上。这意味着 DDoS 保护更接近客户端应用程序和恶意流量源。因此,攻击可以更快地停止,并且不会深入到基础设施中。

但它也有几个缺点:

  • 性能较低。与 DPDK 相比,采用 XDP 的分离节点性能较低,但由于合并了更多节点,最终解决方案的整体效率更高。
  • 无法处理正则表达式。XDP 没有内置的引擎来处理正则表达式,所以他们不得不想出一个解决方案来适应它的正则表达式处理。

为什么一直使用正则表达式来过滤流量

在 DDoS 保护中有两种方法可以过滤掉恶意流量:数据包解析器和处理正则表达式 (regex)。

数据包解析器是手动编写的过滤器,被编程为使用特定协议检测和阻止应用程序中的可疑活动。编写这样的数据包解析器需要大量的编程工作,尤其是在 DDoS 保护需要能够快速接受新协议的情况下。

与数据包解析器方法相比,基于数据包有效负载分析处理正则表达式可减少创建过滤器所需的时间。此外,它是一种更灵活的方法,允许以较低的内核负载更有效地处理数据包。

发送到其客户应用程序的数据包以两种模式进行检查:

  • 对攻击的反应(手动模式)。他们分析由特定有效负载(模式)生成的恶意流量。然后创建指向此有效负载的正则表达式并将其应用于流量。所有包含相似负载的请求都将被自动过滤。
  • 游戏连接保护模式。许多 Gcore 客户都是在线游戏服务提供商,其特点是通过 UDP 协议请求和小数据包。进入游戏服务的包具有可以使用正则表达式描述的严格结构。他们为每个客户端的游戏服务创建正则表达式,并使用它来创建数据包许可列表。所有匹配正则表达式的数据包都将被允许。如果数据包不同,它们将被阻止。

使用正则表达式时的数据包处理安排如下:

  1. 解剖器。分析每个数据包并将其拆分为标头。
  2. 流量路由器。将数据包路由到适当的保护配置文件,这是一组典型的流量保护规则。
  3. 政策管道。将特殊规则(对策)应用于分解成组件的数据包。对策之一是使用正则表达式。
  4. 判决。根据对策检查跳过或阻止数据包。

Gcore 如何在 XDP 上下文中适配正则表达式处理:挑战和解决方案

使用正则表达式是一个资源密集型过程,声称他们将检查数百万个数据包并使用不同复杂度的正则表达式。这使他们得出结论,性能是正则表达式引擎的必备要求。

可用的最佳引擎是英特尔设计的 Hyperscan。它是开源的,具有与 GPL 兼容的许可证,速度很快,因为它使用 AVX2/AVX512 矢量指令集,并被用作 DPI 应用程序的行业标准。

为了适应 XDP 中的正则表达式处理,他们遇到了几个挑战,如下所述。

挑战 1. eBPF 的局限性不允许将正则表达式过滤器作为 XDP 程序的一部分来实现。

解决方案。将 Hyperscan 引擎重建为可加载的 Linux 内核模块,提供 eBPF 帮助程序。Hyperscan 是一种引擎,旨在处理 DPI(深度数据包检测)系统中的正则表达式,检查数据包的有效负载是否与任何预定义的正则表达式匹配。

挑战 2.无法为 XDP 注册来自可加载模块的 eBPF 助手。

解决方案。可加载模块中的 eBPF 助手在 Linux 5.16 中首次引入,但在 Linux 5.18 之前无法为 XDP 注册它们。因为 Gcore 在开发期间只有 Linux 5.17,所以他们必须提供这种可能性。主线内核构建不需要那种补丁。

挑战 3。矢量指令 (FPU) 不应该在 Linux 内核中的数据包处理过程中使用。

解决方案。它们在进入正则表达式处理模块时保存和恢复 FPU 寄存器状态。他们在需要时对每个数据包执行此操作,而不会影响不需要正则表达式处理的其他数据包。

为社区提供了哪些开源解决方案:eBPF API for handling regex in XDP

如果您的基础设施需要处理 XDP 中的正则表达式,您可以使用他们的开发人员提供的现成解决方案,而不是从头开始。

他们的自定义 eBPF 助手“bpf_xdp_scan_bytes()”现在可以像其他 eBPF 助手一样使用。

struct rex_scan_attr attr = {
    .database_id = regex_id,
    .handler_flags = REX_SINGLE_SHOT,
    .nr_events = 0,
    .last_event = {},
};
err = bpf_xdp_scan_bytes(xdp, payload_off, payload_len, &attr);
if (err < 0)
    return XDP_ABORTED;
return (attr.nr_events > 0) ? XDP_DROP : XDP_PASS

要根据数据包缓冲区评估正则表达式,首先将正则表达式添加到可加载模块中,并在调用 eBPF 帮助程序时引用其标识符:

  1. 在 /sys/kernel/config/rex 下使用 mkdir 创建一个节点
  2. 编译模式数据库:
    echo ‘101:/foobar/’ > patterns.txt
    echo ‘201:/a{3.10}/’ > patterns.txt
    build/bin/hscollider -e patterns.txt -ao out/ -nl
  3. 将编译后的正则表达式上传到 /sys/kernel/config/rex/<node>/database:
    dd if=$(echo out/".db) of=/sys/kernel/config/rex/hello/database
  4. 在 /sys/kernel/config/rex/<node>/id 读取或设置新的正则表达式标识符
  5. 将正则表达式标识符传输到 eBPF 程序并用作辅助参数。

完整的源代码可通过链接在 Gcore GitHub 帐户中获得:https ://github.com/G-Core/linux-regex-module

在 XDP 中对正则表达式的使用有哪些基准

他们的 DDoS 过滤解决方案基于第三代英特尔® 至强® 可扩展处理器和 100GbE 英特尔® 以太网网络适配器 E810。英特尔® Hyperscan 支持跨数据流的高性能模式匹配。

英特尔® 提供了专家见解​​,包括用于数据包过滤的 XDP 技术。据他们介绍,在最新的第 3 代英特尔® 至强® 可扩展处理器上使用新软件已将过滤能力从 100 Gbps 提高到 400 Gbps 或每秒 2 亿个数据包。

在下面的图表中,您可以看到自己测试的结果。

数据包大小图表

  • 线性速率(蓝线)是 4 × 100 Gbps 接口的最大网络吞吐量。
  • 基数(红线)是 XDP 在不使用正则表达式的情况下如何处理它的度量。
  • 底部三行是使用正则表达式时的数据包处理。

结论。对于大于 512 字节的数据包,系统可以以线速运行,有效地过滤流量。对于小于 512 字节的数据包,数据包速率和系统压力要高得多,系统无法保持线速性能,大约工作在线速的 40-50% 速度。

对这些结果真的很满意。根据他们的数据,即使处理小数据包的性能不那么高,它们也适合我们。因为真正的 DDoS 攻击往往使用大数据包,所以效率和速度是可以接受的。

测试表明,XDP 中的正则表达式适用于处理繁重的进程,但它有足够的速度来处理大流量。

转载请注明:VPS资讯_海外云服务器资讯_海外服务器资讯_IDC新闻 » 如何使用正则表达式来阻止DDoS攻击