安全简报: 正则表达式拒绝服务攻击和防御

在 2009 年 11 月刊中,我写了一篇标题为“XML 拒绝服务攻击和防御” (msdn.microsoft.com/magazine/ee335713) 的文章,在这篇文章中,我介绍了一些对 XML 分 析程序特别有效的拒绝服务 (DoS) 攻击技巧。我从读者那里收到许多有关此文章的电子邮件, 他们都想了解有关这方面的更多知识,这让我真正意识到人们已经了解 DoS 攻击的严重性。

我相信,在未来的四到五年中,随着权限升级,执行攻击会变得更加困难,这是由于不断采 用诸如数据执行保护 (DEP)、地址空间布局随机化 (ASLR) 以及隔离和权限降低技巧之类的内 存保护措施所致,攻击者会将其目标转移到 DoS 敲诈攻击。目前,开发人员可以通过领先于攻 击趋势变化并针对未来可能的 DoS 演变方向继续保护其应用程序。

正则表达式 DoS 就是这些未来可能的 DoS 演变方向之一。在以色列召开的 2009 年“开放 式 Web 应用安全项目 (OWASP)”会议上,Checkmarx 首席架构师 Alex Roichman 和高级程序 员 Adar Weidman 做了有关正则表达式 DoS(也称为“ReDoS”)的深入研究报告。他们的研究 表明,编写不严谨的正则表达式可能会受到攻击,以致计算相对较短的攻击字符串(少于 50 个字符)需要数小时或更长时间。在最坏的情况下,处理时间实际上相当于输入字符串中字符 数的幂数,这意味着,向字符串中增加一个字符串就会使处理时间翻倍。

在本文中,我将介绍正则表达式在哪些情况下容易受到这些攻击。我还将提供“正则表达式 模糊测试程序”代码,这一测试程序是专为识别易受攻击的正则表达式设计的,其识别方法为 通过针对成千上万的随机输入计算正则表达式,并标记完成处理所需时间长度不可接受的输入 。

(注意:在本文中,我假设您熟悉正则表达式的语法。如果您不熟悉此语法,可能需要阅读 “.NET Framework 正则表达式”这篇文章(网址为 msdn.microsoft.com/library/hs600312) 来补充这些知识,如果要深入研究,请阅读 Jeffrey Friedl 编写的参考手册《精通正则表达 式第 3 版》[O’Reilly,2006]。

回溯:问题的根源

从本质上讲,存在两种不同类型的正则表达式引擎:确定性有穷自动机 (DFA) 引擎和非确 定性有穷自动机 (NFA) 引擎。这两种引擎类型的完整差异分析超出本文范围,我们仅着重探讨 以下两个方面:

NFA 引擎是回溯引擎。与对输入字符串中的每个字符最多计算一次的 DFA 不同,NFA 引擎 可以对输入字符串中的每个字符计算多次。(我将在稍后说明此回溯计算算法的计算原理。) 回溯方法具有诸多优势,因为这些引擎可以处理更复杂的正则表达式,如包含向后引用或捕获 括号的正则表达式。它也具有一些缺点,因为其处理时间大大超过 DFA 的处理时间。

Microsoft .NET Framework System.Text.RegularExpression 使用 NFA 引擎。

回溯的一个重要负面影响是,虽然正则表达式可以相当快速地确定肯定匹配(即,输入字符 串与给定正则表达式匹配),但确定否定匹配(输入字符串与正则表达式不匹配)所需的时间 更长。实际上,此引擎必须确定输入字符串中没有任何可能的“路径”与正则表达式匹配,这 意味着必须对所有路径进行测试。

利用简单的非分组正则表达式,确定否定匹配所花的时间并不是一个大问题。例如,假设要 匹配的正则表达式为:

^\d+$

如果整个输入字符串仅包含数字字符,则这是一个相当简单的匹配正则表达式。^ 和 $ 字 符分别表示字符串的开头和结尾,表达式 \d 表示数字字符,+ 指示将有一个或多个字符匹配 。我们使用 123456X 作为输入字符串测试此表达式。

此输入字符串很明显不是匹配项,因为 X 不是数字字符。但此示例正则表达式必须计算多 少个路径才能得出此结论呢?它会在此字符串开头处开始计算,发现字符 1 是一个有效的数字 字符,与此正则表达式匹配。然后它会移动到字符 2,该字符也匹配。因此,在此时,此正则 表达式与字符串 12 匹配。接下来,它会尝试 3(匹配 123),依次类推,直到到达 X,该字 符不匹配。

但是,由于我们的引擎是回溯 NFA 引擎,它不会在此点上停止。而是从其当前的匹配 (123456) 返回到其上一个已知的匹配 (12345),然后从那里再次尝试匹配。由于 5 后面的下 一个字符不是此字符串的结尾,因此,此正则表达式不是匹配项,它会返回到其上一个已知的 匹配 (1234),然后再次尝试匹配。按这种方式进行所有匹配,直到此引擎返回到其第一个匹配 (1),发现 1 后面的字符不是此字符串的结尾。此时,正则表达式停止,没有找到任何匹配。

总的说来,此引擎计算了六个路径:123456、12345、1234、123、12 和 1。如果此输入字 符串再增加一个字符,则引擎会多计算一个路径。因此,此正则表达式是相对于字符串长度的 线性算法,不存在导致 DoS 的风险。对其模式使用 ^\d+$ 的 System.Text.RegularExpressions.Regex 对象计算速度非常快,足以迅速拆分计算大量输入字 符串(超过 10,000 个字符)。

现在,让我们更改此正则表达式,以对数字字符分组:

^(\d+)$

时间: 2024-09-07 16:46:33

安全简报: 正则表达式拒绝服务攻击和防御的相关文章

多管齐下,防御拒绝服务攻击

勒索软件和资料外泄可能是最受关注的,但是拒绝服务(Denial-of-service, DoS)攻击的案例正在增加.那么我们可以做什么来减少它们带来的影响呢? 听过一句古话叫做"重焕生机"吗?好吧,拒绝服务攻击正好印证了这句话.事实上,拒绝服务攻击(或者称之为DoS)的使用数量正在增加.阿卡迈科技最近的一份报告显示,在2016年的第一个季度DoS攻击数量与2015年同比增长了125%.与此同时,一份来自Verizon的最新报告显示,受DoS影响的行业包含了国有企业.零售业.金融服务业和

DDoS拒绝服务攻击和安全防范技术

一. DDoS拒绝服务攻击简介 "拒绝服务(Denial-Of-Service)攻击就是消耗目标主机或者网络的资源,从而干扰或者瘫痪其为合法用户提供的服务."国际权威机构"Security FAQ"给出的定义. DDOS则是利用多台计算机机,采用了分布式对单个或者多个目标同时发起DoS攻击.其特点是:目标是"瘫痪敌人",而不是传统的破坏和窃密;利用国际互联网遍布全球的计算机发起攻击,难于追踪. 目前DDoS攻击方式已经发展成为一个非常严峻的公共安

我国域名系统面临安全漏洞和拒绝服务攻击等多种威胁

摘要: 日前,国家互联网应急中心发布的<2013年中国互联网网络安全报告>显示,作为互联网运行的关键基础设施,我国域名系统面临安全漏洞和拒绝服务攻击等多种威胁,是影响网络稳定运 日前,国家互联网应急中心发布的<2013年中国互联网网络安全报告>显示,作为互联网运行的关键基础设施,我国域名系统面临安全漏洞和拒绝服务攻击等多种威胁,是影响网络稳定运行的薄弱环节.中心监测报告显示,2013年针对我国域名系统较大规模的拒绝服务攻击事件平均每日约有58起. 对此,互联网域名系统专家表示,作为

学习手册:浅析DDoS的攻击及防御

现如今,信息技术的发展为人们带来了诸多便利,无论是个人社交行为,还是商业活动都开始离不开网络了.但是网际空间带来了机遇的同时,也带来了威胁,其中DDoS就是最具破坏力的攻击,通过这些年的不断发展,它已经成为不同组织和个人的攻击,用于网络中的勒索.报复,甚至网络战争. 文章目录 先聊聊DDoS的概念和发展 啥叫"拒绝服务"攻击呢? 啥叫"分布式"呢? 啥叫"僵尸网络"呢? DDoS的发展咋样? 再谈谈DDoS的攻击方式 也说说DDoS的攻击工具 L

也谈跨站脚本攻击与防御_木马相关

网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路. 还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流

服务器安全之Ddos攻击攻击与防御讲述

[ 目录 ] 一 背景 二 应急响应 三 常见ddos攻击及防御 四 根源及反击 五 总结 一 背景 在前几天,我们运营的某网站遭受了一次ddos攻击,我们的网站是一个公益性质的网站,为各个厂商和白帽子之间搭建一个平台以传递安全问题等信息,我们并不清楚因为什么原因会遭遇这种无耻的攻击.因为我们本身并不从事这种类型的攻击,这种攻击技术一般也是比较粗糙的,所以讨论得比较少,但是既然发生了这样的攻击我们觉得分享攻击发生后我们在这个过程中学到得东西,以及针对这种攻击我们的想法才能让这次攻击产生真正的价值

Twitter等网站仍在遭受拒绝服务攻击

北京时间8月9日上午消息,据国外媒体报道,周四导致Twitter宕机并影响Facebook.LiveJournal.谷歌Blogger等其他网站的"分布式拒绝服务"攻击本周五仍在延续,并可能会持续整个周末. 美国东部时间7日23时(北京时间8日早11时),Twitter表示其仍在应对此类攻击. Twitter应用开发平台支持小组的查德·伊兹(Chad Etzel)表示:"我们仍在遭受分布式拒绝服务攻击,而且攻击密度完全没有减弱."受此影响,Twitter将继续采用一

也谈跨站脚本攻击与防御

网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路. 还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流

阻断拒绝服务攻击

从去年七.八月开始,拒绝服务攻击在网上风行一时,一年后的现在又有抬头之势.那么我们除了用防堵软件外,是否还有其它办法呢? 服务过载 当大量服务请求发向同一台计算机的服务守护进程时,就会产生服务过载.这些请求通过各种方式发出,而且许多都是故意的.在分时机制中,计算机需要处理这些潮水般涌来的请求,十分忙碌,以至无法处理常规任务,就会丢弃许多新请求.如果攻击的对象是一个基于TCP协议的服务,这些请求还会被重发,进一步加重网络的负担. 通常,管理员可以使用网络监视工具来发现这种攻击,通过主机列表和网络地