理解重做攻击

重做 表示正则表达式拒绝服务。重做是一种算法复杂度攻击,会产生 拒绝服务 通过提供 正则表达式 这需要很长时间来评估。该攻击利用了一个事实,即大多数正则表达式实现在最坏情况下具有指数时间复杂性,因此对于较大的输入字符串(“邪恶的正则表达式”),正则表达式引擎查找匹配项所需的时间呈指数增长。

null

攻击者的目的是提供这样的正则表达式,从而使其需要无限的计算时间,这反过来会减慢应用程序的速度或使其完全崩溃。 因此,这种攻击基本上利用了这样一个事实,即正则表达式引擎将尝试所有可能的字符排列和组合,以找到匹配项。

正则表达式可以在整个web上找到,重做攻击可以用来攻击web的各种组件。

重做攻击的示例表达式

正则表达式: ^((ab)*)+$(这个正则表达式搜索ab及其重复) 输入: 阿巴巴 在这种情况下,regex引擎将在第一次尝试中找到匹配项,因为ababab匹配regex模式。现在我们可以很容易地把阿巴巴作为输入,使事情复杂化。这个额外的a最终将导致各种各样的问题,因为它与模式不匹配,并且它将使正则表达式引擎运行各种各样的排列以寻找可能的匹配。

(ababab) - NOT A MATCH(abab)(ab) - NOT A MATCH(ab)(abab) - NOT A MATCH(ab)(ab)(ab) - NOT A MATCH()(ababab) - NOT A MATCH()(abab)(ab) - NOT A MATCH()(ab)(abab) - NOT A MATCH()(ab)(ab)(ab) - NOT A MATCH

你可以在网上自己试试 正则表达式编辑器 .现在想象一下,如果输入的时间更长

abababababababababababababababababababababababababab......

它会造成什么样的破坏。

邪恶的正则表达式

它们是使应用程序易受重做攻击的正则表达式,只要出现以下因素,它们就会出现:

  • 正则表达式将重复(“+”、“*”)应用于复杂的子表达式
  • 对于重复的子表达式,存在一个匹配项,它也是另一个有效匹配项的后缀。

恶意正则表达式的示例包括:

  • (a+)+
  • ([a-zA-Z]+)*
  • (a | aa)+
  • (a | a?)+
  • (.*a){x}x>10

通过Evil Regex攻击Web应用程序:

  • 打开JavaScript并找到邪恶的正则表达式
  • 为找到的正则表达式手工创建恶意输入,并通过拦截代理提交有效值
  • 将请求更改为包含恶意输入,就可以进行重做攻击

通过Regex注入重做

下面的示例检查用户名是否是用户输入的密码的一部分。

String userName = textBox1.Text;String password = textBox2.Text;Regex testPassword = new Regex(userName);Match match = testPassword.Match(password);if (match.Success){MessageBox.Show("Do not include name in password.");}else{MessageBox.Show("Good password.");}

如果攻击者进入 ^([a-z])+)+[A-Z]([A-Z])+$ 作为用户名和 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! 作为密码,程序将挂起。

预防:

  1. 在正则表达式中使用原子分组。原子组是一个组,当正则表达式引擎退出时,它会自动丢弃组内任何令牌所记住的所有回溯位置
  2. 如果正则表达式花费的时间太长,请立即杀死它,并通知用户正则表达式花费的时间太长。
  3. 预处理/验证正则表达式,或者让人们直接搜索文本,而不是直接输入正则表达式。

参考资料:

  • https://www.linkedin.com/pulse/redos-attacks-python-application-architectures-akshat-mahajan
  • http://stackoverflow.com/questions/12841970/how-can-i-recognize-an-evil-regex
  • https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS
  • 图片来源:https://www.owasp.org/index.php/Main_Page

本文由 帕拉什尼甘酒店 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享