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

admin 2021年11月17日03:25:48安全文章评论93 views1546字阅读5分9秒阅读模式

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

关于Regexploit

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

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

该工具的主要目的如下:

寻找易受正则表达式拒绝服务攻击(ReDoS)的正则表达式;

给出一个会导致死循环回溯的恶意字符串示例;

最坏情况复杂性

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

工具安装

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

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

python3 -m venv .env
source .env/bin/activate

然后使用pip来安装Regexploit:

pip install regexploit

工具使用

正则表达式处理

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

regexploit

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

cat myregexes.txt | regexploit

自动提取正则表达式

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

Python代码

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

regexploit-py my-project/
regexploit-py "my-project/**/*.py" --glob

Javascript / Typescript

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

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

JSON/YAML

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

regexploit-json *.json
regexploit-yaml *.yaml

C#(.NET)

regexploit-csharp something.cs

工具使用样例

运行Regexploit,并在命令行中输入正则表达式“vw*_w*_w*$”:

$ regexploit
vw*_w*_w*$
Pattern: vw*_w*_w*$
---
Worst-case complexity: 3 ⭐⭐⭐ (cubic)
Repeated character: [5f:_]
Final character to cause backtracking: [^WORD]
Example: 'v' + '_' * 3456 + '!'

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

项目地址

Regexploit:https://github.com/doyensec/regexploit

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


精彩推荐





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

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

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

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

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

本文始发于微信公众号(FreeBuf):如何使用Regexploit识别ReDoS正则表达式拒绝服务攻击

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年11月17日03:25:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  如何使用Regexploit识别ReDoS正则表达式拒绝服务攻击 http://cn-sec.com/archives/532913.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: