软件所陈海明团队在ReDoS漏洞检测与修复技术上取得重要进展
近日,中国科学院软件研究所陈海明团队在正则表达式拒绝服务攻击(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会议录用。论文第一作者为博士生李页霆,论文通讯作者为陈海明研究员。
ReDoSHunter工具检测流程实例
ReDoS漏洞检测工具在三大数据集上的识别效果比较
抗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会议上发表。论文第一作者为博士生李页霆,论文通讯作者为陈海明研究员。
FlashRegex工具修复流程