如何使用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
工具使用
1. 正則表達式處理
我們可以通過stdin(每個正則表達式占一行)向Regexploit輸入正則表達式:
- regexploit
或者直接處理正則表達式列表文件:
- cat myregexes.txt | regexploit
2. 自動提取正則表達式
Regexploit內置支持解析Python、JavaScript、TypeScript、C#、YAML和JSON代碼中的正則表達式。
(1) Python代碼
通過AST解析Python代碼(無需執行)并提取正則表達式,并分析是否易受ReDoS:
- regexploit-py my-project/
- regexploit-py "my-project/**/*.py" --glob
(2) 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
(3) JSON/YAML
YAML支持需要安裝pyyaml,我們可以使用命令“pip install regexploit[yaml]”進行安裝:
- regexploit-json *.json
- regexploit-yaml *.yaml
(4) C#(.NET)
- regexploit-csharp something.cs
工具使用樣例
運行Regexploit,并在命令行中輸入正則表達式“v\w*_\w*_\w*$”:
- $ regexploit
- v\w*_\w*_\w*$
- Pattern: v\w*_\w*_\w*$
- ---
- Worst-case complexity: 3 ⭐⭐⭐ (cubic)
- Repeated character: [5f:_]
- Final character to cause backtracking: [^WORD]
- Example: 'v' + '_' * 3456 + '!'
此時,Regexploit將返回評估結果。
項目地址
Regexploit:【GitHub傳送門】