新闻详情

软件所在正则表达式拒绝服务攻击漏洞检测与修复技术研究中取得进展

  近日,中国科学院软件研究所研究员陈海明团队在正则表达式拒绝服务攻击(ReDoS)漏洞检测与修复技术研究中取得重要进展,设计研发出当前最先进的ReDoS漏洞检测工具——ReDoSHunter,提出首个抗ReDoS漏洞正则表达式修复工具——FlashRegex,不仅解决了静态与动态ReDoS检测工具的局限性,实现了正则表达式修复结果无ReDoS漏洞的进展,而且在性能上大幅提升且全面超越了ReDoS漏洞检测及修复工具,为ReDoS漏洞挖掘、利用、修复及防御工作提供了便捷、高效、性能优越的重要工具。

  ReDoS漏洞检测工具——ReDoSHunter

  正则表达式在计算机科学领域中被广泛使用,但正则表达式拒绝服务攻击(ReDoS)漏洞是一种常见且严重的算法复杂度攻击漏洞,并在近几年呈增长趋势。然而,现有的ReDoS漏洞检测工具存在准确率较低(误报多)或召回率较低(漏报多)的缺陷,产生这一缺陷的根本原因在于,给出全面的、形式化的ReDoS漏洞检测条件这一挑战性问题未得到解决。

  针对上述问题,陈海明团队经过长期深入研究,通过对海量易受ReDoS漏洞攻击的正则表达式的分析,创新性地提出了ReDoS漏洞检测条件——ReDoS漏洞模式,并形式化地给出了触发这些模式的必要条件。基于上述工作,进一步提出了动静态结合的ReDoS漏洞检测算法,并设计实现了ReDoS漏洞检测工具——ReDoSHunter。

  ReDoSHunter能够高效检测ReDoS漏洞,实现诊断漏洞根本原因、分析漏洞严重程度、追踪漏洞位置并生成触发攻击的字符串等功能。在检测ReDoS漏洞数量方面,ReDoSHunter超越现有最先进工具,在Corpus、RegExLib、Snort三个大型数据集(共计37651个正则表达式)上实现了100%的准确率和召回率。在检测ReDoS漏洞相关的CVEs(Common Vulnerabilities and Exposures通用漏洞披露)方面,现有最先进的检测算法只能检测出60%的ReDoS相关的CVEs,ReDoSHunter能够成功检测出100%的CVEs。由于ReDoSHunter的卓越性能,目前软件所在ReDoS相关的CVEs披露数量排名中位居国际首位。

  此外,ReDoSHunter的应用对寻找、纠正广大的开源社区的ReDoS漏洞发挥了重大作用。该工具已应用在Python源码、CKEditor和prismjs等开源项目的ReDoS漏洞检测中。同时,该团队与Snyk建立了长期合作关系,共同致力于高效披露ReDoS漏洞。在已发现的200多个尚未被披露的漏洞中,截至目前已获批了27个CVEs,并收到多个项目的官方致谢。相关研究成果以ReDoSHunter: a combined static and dynamic approach for regular expression DoS detection为题,被USENIX Security 2021会议录用。

  抗ReDoS漏洞正则表达式修复工具——FlashRegex

  正则表达式以难以掌握著称,其现有的自动化合成与修复工作均忽略了ReDoS漏洞,使其结果可能受到该漏洞的攻击。

  针对该问题,陈海明团队提出了首个抗ReDoS漏洞正则表达式的合成与修复算法,其通过去除正则表达式的歧义来生成或修复出无ReDoS漏洞的正则表达式。为加速合成和修复过程,团队使用了确定性自动机和局部约束加强启发式策略,并且设计实现了相应的工具——FlashRegex。

  与传统的人工修复相比,采用维护人员的修复方案得到的结果仍常有ReDoS漏洞,而FlashRegex能够高效地生成或修复出无ReDoS漏洞的正则表达式,修复的所有正则表达式中发现的ReDoS漏洞数量为0。该工具已应用到实际开源项目中修复ReDoS漏洞,得到postccs、nltk和Python源码等多个项目维护者及Snyk的认可或致谢。相关研究成果以FlashRegex: deducing anti-ReDoS regexes from examples为题,发表在ASE 2020会议上。

  软件所博士生李页霆为上述两篇论文的第一作者,陈海明为上述两篇论文的通讯作者。

ReDoSHunter工具检测流程实例

ReDoS漏洞检测工具在三大数据集上的识别效果比较

FlashRegex工具修复流程