如何使用Regexploit识别ReDoS正则表达式拒绝服务攻击

安全 数据安全
Regexploit可以帮助广大研究人员找出易受正则表达式拒绝服务攻击(ReDoS)的正则表达式。

[[421847]]

关于Regexploit

Regexploit可以帮助广大研究人员找出易受正则表达式拒绝服务攻击(ReDoS)的正则表达式。

许多默认正则表达式解析器都很复杂,而且存在很多安全问题。当显示匹配的输入字符串时,使用正则表达式匹配的方式可能速度会很快,但是某些不匹配的输入字符串可能会使正则表达式匹配器进入疯狂的回溯循环,并且需要花费很长时间来处理。此时,将有可能导致应用程序出现拒绝服务的情况,因为CPU在尝试匹配正则表达式时会卡住。

该工具的主要目的如下:

  • 寻找易受正则表达式拒绝服务攻击(ReDoS)的正则表达式;
  • 给出一个会导致死循环回溯的恶意字符串示例;

最坏情况复杂性

最坏情况复杂性反映了正则表达式匹配器的回溯过程相对于输入字符串长度的复杂性。这个最坏情况复杂性是以立方计算的,如果字符串的易受攻击部分的长度增加了一倍,则执行时间应延长约8倍(2^3)。

工具安装

该工具需要在本地安装并配置好Python 3.8+环境。由于Regexploit会从JavaScript/TypeScript代码中提取正则表达式,因此还需要安装好NodeJS 12+。

首先,我们可以创建一个虚拟环境:

  1. python3 -m venv .env 
  2.  
  3. source .env/bin/activate 

然后使用pip来安装Regexploit:

  1. pip install regexploit 

工具使用

1. 正则表达式处理

我们可以通过stdin(每个正则表达式占一行)向Regexploit输入正则表达式:

  1. regexploit 

或者直接处理正则表达式列表文件:

  1. cat myregexes.txt | regexploit 

2. 自动提取正则表达式

Regexploit内置支持解析Python、JavaScript、TypeScript、C#、YAML和JSON代码中的正则表达式。

(1) Python代码

通过AST解析Python代码(无需执行)并提取正则表达式,并分析是否易受ReDoS:

  1. regexploit-py my-project/ 
  2.  
  3. regexploit-py "my-project/**/*.py" --glob 

(2) Javascript / Typescript

该功能将使用regexploit/bin/javascript中捆绑的NodeJS包实现,并解析JavaScript中的正则表达式:

  1. regexploit-js my-module/my-file.js another/file.js some/folder/ 
  2.  
  3. regexploit-js "my-project/node_modules/**/*.js" --glob 

(3) JSON/YAML

YAML支持需要安装pyyaml,我们可以使用命令“pip install regexploit[yaml]”进行安装:

  1. regexploit-json *.json 
  2.  
  3. regexploit-yaml *.yaml 

(4) C#(.NET)

  1. regexploit-csharp something.cs 

工具使用样例

运行Regexploit,并在命令行中输入正则表达式“v\w*_\w*_\w*$”:

  1. $ regexploit 
  2.  
  3. v\w*_\w*_\w*$ 
  4.  
  5. Pattern: v\w*_\w*_\w*$ 
  6.  
  7. --- 
  8.  
  9. Worst-case complexity: 3 ⭐⭐⭐ (cubic) 
  10.  
  11. Repeated character: [5f:_] 
  12.  
  13. Final character to cause backtracking: [^WORD] 
  14.  
  15. Example: 'v' + '_' * 3456 + '!' 

此时,Regexploit将返回评估结果。

项目地址

Regexploit:【GitHub传送门

 

责任编辑:赵宁宁 来源: FreeBuf
相关推荐

2018-08-23 09:16:22

2023-03-28 08:00:00

2023-10-07 08:25:09

Java处理工具正则表达式

2010-03-25 18:25:36

Python正则表达式

2021-05-25 09:18:04

正则表达式Linux字符串

2009-09-16 17:29:30

正则表达式使用详解

2012-05-08 13:29:01

VB

2018-09-27 15:25:08

正则表达式前端

2020-09-04 09:16:04

Python正则表达式虚拟机

2010-07-14 09:47:04

Perl正则表达式

2024-09-14 09:18:14

Python正则表达式

2016-11-10 16:21:22

Java 正则表达式

2009-09-16 17:15:57

正则表达式引擎

2023-09-13 08:12:45

2022-01-04 11:35:03

Linux Shel正则表达式Linux

2018-04-21 07:11:53

正则表达式Python函数

2011-06-02 12:34:16

正则表达式

2019-07-17 15:45:47

正则表达式字符串前端

2009-02-18 09:48:20

正则表达式Java教程

2017-05-12 10:47:45

Linux正则表达式程序基础
点赞
收藏

51CTO技术栈公众号