【问题标题】:How to ANALYZE regexes for possible vulnerabilities?如何分析正则表达式以发现可能的漏洞?
【发布时间】:2016-03-24 19:13:32
【问题描述】:

This article 描述了两种方法来检测正则表达式是否容易受到灾难性回溯(以及因此 ReDOS 或正则表达式拒绝服务攻击)的影响:

  • 模糊测试 - 本质上是一种蛮力检查是否有滞后的输入

  • 分析 - 智能地查看正则表达式,并且能够精确定位 正则表达式出现减速的位置。

作为研究的一部分构建了一个分析工具,但我不确定它是否真的作为开源工具发布(正如它所说的那样)。

所以我的问题是:根据链接的文章,我将如何分析正则表达式的漏洞?我不是在寻找 Fuzzing,因为它更耗时并且无法确定问题的位置。

我知道另一个问题询问了一般情况下(答案都是模糊测试或“太难”)找到“坏正则表达式”的方法。

【问题讨论】:

  • 正则表达式通常是为匹配而构建的——因此,对于搜索错误的正则表达式,通常是一个好的开始,看看它不匹配的情况。还有大量的无限量词,尤其是嵌套的、非占有性的和用于.-Matches 的情况,值得仔细研究。
  • 前者不起作用,因为触发输入可能非常少见。后者,好吧,当你完成时,你不妨把你正在使用的正则表达式引擎换成 RE2 什么的。
  • 当重要时,您应该使用不会回溯的正则表达式实现
  • @MattTimmermans 我不相信每种语言都有一个
  • RE2's readme 列出了 C、Erlang、Inferno、Node.js、OCaml、Perl、Python 和 Ruby 的绑定。显然,还有 Lua 和 PHP 绑定。这不是每种语言,但它是一个很好的示例。

标签: regex algorithm denial-of-service


【解决方案1】:

并非真正基于您的文章,但衡量复杂性的一种方法是您的正则表达式的 star height

This tool 允许您检测星高超过 1 的危险正则表达式。

请注意,这仅应用作指示。我使用了星高 > 1 的正则表达式,每毫秒可以解析几 KB 的文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2015-11-28
    • 2011-06-23
    • 2017-03-02
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多