DDOS攻击的那些事
小刀网络 2023-07-31 08:24:39 0

在互联网中一谈起DDOS攻击,人们常常谈虎色变。DDOS攻击被认为是安全领域最难解决的问题之一,迄今为止也没有一个完善的解决方案。各个互联网公司都等着5G时期的来临,等它来临分物联网领域的一份羹。当物联网时期真正来临的时候,网络装备数量会呈指数性地增长,对DDOS攻击的防御确切带来了一个很大的要挟。


一.DDOS简介


DDOS又称为散布式谢绝服务攻击,全称是Distributed Denial os Service。DDOS本是利用公道的要求造成资源过载,致使服务不可用。比如一个停车场总共有100个车位,当100个车位都停满车后,再有车想要停进来,就一定要等已有的车先出去才行。如果已有的车一直不出去,那末停车场的入口就会排起长队,停车场的负荷过载,不能正常工作了,这类情况就是“谢绝服务”。


我们的系统就好比是停车场,系统中的资源就是车位。资源是有限的,而服务一定要一直提供下去。如果资源都已被占用了,那末服务也将过载,致使系统停止新的响应。


散布式谢绝服务攻击,将正常要求放大了若干倍,通过若干网络节点同时发起攻击,以达成范围响应。这些网络节点常常是黑客们所控制的“肉鸡”,数量到达一定范围后,就构成了一个“僵尸网络”。大型的僵尸网络,乃至到达了数万、数十万台的范围。如此范围的僵尸网络发起的DDOS攻击,几近是不可阻挡的。

利用层DDOS攻击是针对服务器性能的一种攻击,那末许多优化服务器性能的方法,都或多或少地能减缓此种攻击。比如将使用频率高地数据放在memcache中,相对查询数据库所消耗的资源来讲,查询memcache所消耗的资源可以疏忽不计,但很多性能优化的方案并不是是为了对抗利用层DDOS攻击而设计的,因此攻击者想要找到一个资源消耗大的页面其实不困难。比如当memcache查询没有命中时,服务器必定会查询数据库,从而增大服务器资源的消耗,攻击者只需要找到这样的页面便可。同时攻击者除触发“读”数据操作外,还可以触发“写”数据操作,“写”数据的行动一般会致使服务器操作数据库。


2.限制要求频率


最多见的针对利用层DDOS攻击的防御措施,是在利用中针对每一个“客户端”做一个要求频率的限制。通过IP地址和Cookie定位一个客户端,如果客户真个要求在一定时间内过于频繁,则对以后来自该客户真个所有要求都重定向到一个出错页面。从架构上来看,这样的防护措施需要放在业务逻辑之前,才能起到保护后端利用的目的,可以看作是一个“基层”的安全模块。


3.道高一尺,魔高一丈


但是这类防御方法其实不完善,由于它在客户真个判断根据上其实不是永久可靠的。这个方案中有两个因素用以定位一个客户端:一个是IP地址,另外一个是Cookie。但用户的IP地址可能会产生变化,而Cookie又可能会被清空,如果IP地址和Cookie同时都产生了变化,那末就没法再定位到同一个客户端了。


如果让IP地址产生变化呢?使用“代理服务器”是一个常见的做法。在实际的攻击中,大量使用代理服务器或傀儡机来隐藏攻击者的真实IP地址,已成为一种成熟的攻击模式。攻击者使用这些方法可不断地变换IP地址,就能够绕过服务器对单个IP地址要求频率的限制了。


代理猎手是一个经常使用的搜索代理服务器的工具:


而AccessDiver则已自动化地实现了这类变换IP地址的攻击,它可以批量导入代理服务器地址,然后通过代理服务器在线暴力破解用户名和密码。


攻击者使用的这些混淆信息的手段,都给对抗利用层DDOS攻击带来了很大的困难。那末到底怎么解决一个问题呢?利用层DDOS攻击并不是是一个没法解决的问题,一般来讲,我们可以从以下因素有哪些着手:


首先,利用代码要做好性能优化。公道地使用memcache就是一个很好的优化方案,将数据库的压力尽量转移到内存中。另外还需要及时地释放资源,比如及时关闭数据库连接,减少空连接等消耗。


其次,在网络架构上做好优化。善于利用负载均衡分流,避免用户流量集中在单台服务器上,同时可以利用好CDN和镜像站点的分流作用,减缓主站的压力。


最后,也是最重要的一点,实现一些对抗手段,比如限制每一个IP地址的要求频率。


下面继续更深入地探讨还有哪几种方法可以对抗利用层DDOS攻击。


三.验证码的那些事儿


验证码是互联网经常使用的技术之一,它的英文简称是CAPTCHA(Completely Automated Public Turing Test to Tell Computers and Human Apart,全自动辨别计算机和人类的图灵测试)。在很多时候,如果可以疏忽对用户体验的影响,那末引入验证码这一手段能够有效地禁止自动化的重放行动。


以下是一个用户提交评论的页面,嵌入验证码能够有效避免资源滥用,由于通常脚本没法自动辨认出验证码。


但验证码也分三六九等,有的验证码容易辨认,有的则较难辨认。


CAPTCHA发明的初衷是为了辨认人和机器。但验证码如果设计得过于复杂,那末人也很难辨识出来,所以验证码是一把双刃剑。


有验证码,就会有验证码破解技术。除直接利用图象相关算法辨认验证码外,还可以利用Web实现上可能存在的漏洞破解验证码。


由于验证码的验证进程,是比对用户提交的名文和服务器端Session里保存的验证码明文会不会一致。所以曾有验证码系统出现过这样的漏洞:由于验证码消耗掉后SessionID未更新,致使使用原本的SessionID可以一直重复提交同一个验证码。


还有的验证码实现方式,是提早将所有的验证码图片生成好,以哈希过的字符串作为验证码图片的文件名。在使用验证码时,则直接从图片服务器返回已生成好的验证码,这类设计本来的想法是为了提高性能。


但这类逐一对应的验证码文件名会存在一个缺点:攻击者可以事前采取枚举方式,遍历所有的验证码图片,并建立验证码到名文之间的逐一对应关系,从而构成一张“彩虹表”,这也会致使验证码形同虚设。修补的方式是验证码的文件名需要随机化,满足“不可预测性”原则。


随着技术的发展,直接通过算法破解验证码的方法也变得愈来愈成熟。通过一些图象处理技术,可以将验证码逐渐变化成可辨认的图片。


四.防御利用层DDOS


验证码不是万能的,很多时候为了给用户一个最好的体验而不能使用验证码,且验证码不宜使用过于频繁,所以我们还需要有更好的方案。验证码的核心思想是辨认人和机器,那末顺着这个思路,在人机辨认方面,我们会不会还可以再做一些事情呢?答案是肯定的。


在一般情况下,服务器端利用可以通过判断HTTP头中的User-Agent字段来辨认客户端。但从安全性来看这类方法其实不可靠,由于HTTP头中的User-Agent是可以被客户端篡改的,所以不能信任。


一种比较可靠的方法是让客户端解析一段JavaScript,并给出正确的运行结果。由于大部份的自动化脚本都是直接构造HTTP包完成的,并不是在一个浏览器环境中发起的要求。因此一段需要计算的JavaScript,可以判断出客户端究竟会不会浏览器。类似的,发起一个flash让客户端解析,也能够起到一样的作用。但需要注意的是,这类方法其实不是万能的,有的自动化脚本是内嵌在浏览器的“内挂”,就没法检测出来了。


除人机辨认外,还可以在Web Server这一层做些防御,其好处是要求还没有到达后真个利用程序里,因此可以起到一个保护的作用。


在Apache的配置文件中,有一些参数可以减缓DDOS攻击。比如调小Timeout、KeepAliveTimeout值,增加MaxClients。但需要注意的是,这些参数的调剂可能会影响到正常利用,因此需要视情况而定。Apache提供的模块接口为我们扩大Apache、设计防御措施提供了可能。目前已有一些开源的Module全部或部份实现了针对利用层DDOS攻击的防护。




编辑搜图


请点击输入图片描写(最多18字)


“mod_qos”是Apache的一个Module,它可以帮助减缓利用层DDOS攻击。比如mod_qos的下面配置就非常有价值:


有兴趣的朋友可以通过Apache官方网站取得更多的信息。除mod_qos以外,还有专用于对抗利用层DDOS的mod_evasive也有类似的效果。mod_qos从思路上依然是限制单个IP地址的访问频率,因此在面对单个IP地址或IP地址较少的情况,比较有用。但是前文曾提到,如果攻击者使用了代理服务器、傀儡机进行攻击,该如何有效地保护网站呢?


Yahoo为我们提供了一个解决思路。由于发起利用层DDOS攻击的IP地址都是真实的,所以在实际情况下,攻击者的IP地址其实也不可能无穷制增长。假定攻击者有1000个IP地址发起攻击,如果要求了10000次,则平均每一个IP地址要求同一页面到达了10次,攻击如果延续下去,单个IP地址的要求也将变多,但不管如何变,都是在这1000个IP地址的范围内做轮询。


为此Yahoo实现了一套算法,根据IP地址和Cookie等信息,可以计算客户真个要求频率并进行拦截。Yahoo设计的这套系统也是为Web Server开发的一个模块,但在整体架构上会有一台master服务器集中计算所有IP地址要求频率,并同步策略到每台Web Server上。


Yahoo为此申请了一个专利(Detecting system abuse),这套防御体系,经过实践检验,可以有效对抗利用层DDOS攻击和一些类似的资源滥用攻击。但Yahoo并未将其开源,因此对一些研发能力较强的互联网公司来讲,可以根据专利中的描写,实现一套类似的系统。


五.资源耗尽攻击


除CC攻击外,攻击者还可能利用一些Web Server的漏洞或设计缺点,直接造成谢绝服务。下面看几个典型的例子,并由此分析此类散布式谢绝服务攻击的本质。


1.Slowloris攻击


Slowloris是在2009年由著名的Web安全专家RSnake提出的一种攻击方法,其原理是以极低的速度往服务器发送HTTP要求。由于Web Server对并发的连接数都有一定的上限,因此若是歹意地占用住这些连接不释放,那末Web Server的所有连接都将被歹意连接占用,从而没法接受新的要求,致使谢绝服务。


要保持住这个连接,RSnake构造了一个畸形的HTTP要求,准确地说,是一个不完全的HTTP要求。比如Content-Length:


Content-Length:42


在正常的HTTP包头中,是以两个CLRF表示HTTP Headers部份结束的:


Content-Length:42


由于Web Server只收到了一个 ,因此将认为HTTP Headers部份没有结束,并保持此连接不释放,继续等待完全的要求。此时客户端再发送任意HTTP头,保持住连接便可。


x-a:b


当构造多个连接后,服务器的连接数很快就会到达上限,从而到达谢绝服务攻击的目的。这类攻击几近针对所有的Web Server都是有效的。从这类方式可以看出:此类谢绝服务攻击的本质,实际上是对有限资源的无穷制滥用。


在Slowloris案例中,“有限”的资源是Web Server的连接数。这是一个有上限的值,比如在Apache中这个值由MaxClients定义。如果歹意客户端可以无穷制地将连接数占满,就完成了对有限资源的歹意消耗,致使谢绝服务。


在Slowloris发布之前,也曾有人意想到这个问题,但是Apache官方否认Slowloris的攻击方式是一个漏洞,他们认为这是Web Server的一种特性,通过调剂参数能够减缓此类问题。Apache对Web Server的消极态度使得这类攻击今天依然有效。


2.HTTP POST DOS


在2010的OWASP大会上,Wong Onn Chee和Tom Brennan演示了一种类似于Slowloris效果的攻击方法,作者称为HTTP POST D.O.S.。其原理是在发送HTTP POST包时,指定一个非常大的Content-Length值,然后以很低的速度发包,比如10⑴00s发一个字节,保持住这个连接不断开。这样当客户端连接数多了以后,占用住了Web Server的所有可用连接,从而致使DOS。


这类攻击的本质也是针对Apache的MaxClient限制的。要解决此类问题,可使用Web利用防火墙,或一个定制的Web Server安全模块。


由以上两个例子我们很自然地联想到,凡事资源有“限制”的地方,都可能产生资源滥用,从而致使谢绝服务,也就是一种“资源耗尽攻击”。


出于可用性和物理条件的限制,内存、进程数、存储空间等资源都不可能无穷制地增长,因此如果未对不可信任的资源使用者进行配额的限制,就有可能造成谢绝服务。内存泄漏是程序员常常要解决的一种bug,而在安全领域中,内存泄漏则被认为是一种能够造成谢绝服务攻击的方式。


3.Server Limit DOS


Cookie也能造成一种谢绝服务,称为Server Limie DOS。Web Server对HTTP包头都有长度限制,以Apache举例,默许是8192字节。也就是说,Apache所能接受的最大HTTP包头大小为8192字节(这里指的是Request Header,如果是Request Body,则默许的大小限制是2GB)。如果客户端发送的HTTP包头超过这个大小,服务器就会返回一个4xx毛病,提示信息为:


Your browser sent a request that this server could not understand.


Size of a request header field exceeds server limit.


假设攻击者通过XSS攻击,歹意地往客户端写入了一个超长的Cookie,则该客户端在清空Cookie之前,将没法再访问该Cookie所在域的任何页面。这是由于Cookie也是放在HTTP包头里发送的,而Web Server默许会认为这是一个超长的非正常要求,从而致使“客户端”的谢绝服务。要解决此问题,需要调剂Apache配置参数LimitRequestFieldSize,这个参数设置为0时,对HTTP包头的大小没有限制。


六.一个正则引发的血案:ReDOS


正则表达式也能造成谢绝服务?是的,当正则表达式写得不好时,就有可能被歹意输入利用,消耗大量资源,从而造成DOS,这类攻击被称为ReDOS。


与前面提到的资源耗尽攻击略有区别的是,ReDOS是一种代码实现上的缺点。我们知道正则表达式是基于NFA(Nondeterministic Finite Automaton)的,它是一个状态机,每一个状态和输入符号都可能有许多区别的下一个状态。正则解析引擎将遍历所有可能的路径直到最后。由于每一个状态都有若干个“下一个”状态,因此决策算法将逐一尝试每一个“下一个状态”直到找到一个匹配的。比以下面这个正则表达式:


^(a+)+$


当输入只有4个“a”时:


aaaaX


它只有16条可能的路径,引擎很快能遍历完。但是当输入以下字符串时:aaaaaaaaaaaaaaaaX


就变成了65536条可能的路径,尔后每增加一个“a”,路径的数量就会翻倍。这极大地增加了正则引擎解析数据时的消耗。当用户歹意构造输入时,这些有缺点的正则表达式就会消耗大量的系统资源,比如CPU和内存等,从而致使整台服务器的性能降落,表现的结果是系统速度很慢,有的进程或服务失去响应,与谢绝服务的后果是一样的。因而可知,ReDOS可能会成为一个埋藏在系统中的炸弹。


在今天的互联网中,正则表达式可能存在于任何地方,如WAF、Web前端、Web后端、DB数据库等。但只要任何一个环节存在有缺点的正则表达式,就都有可能会致使一次ReDOS。


在检查利用安全时,一定不能忽视ReDOS可能酿成的影响,对其进行安全评估。


七.DDOS总结


DDOS防范大致分为两个层面,其中之一面向服务器保护人员,这个可以从通用型防范方法,比如通过CDN盾,ADS等,还可以针对常见的DDOS攻击类型提出针对性防范措施,比如针对CC,使用人机辨认等;另外一个层面是网络公司防范DDOS,通常采取配置URPF,近源部署ADS等。从网络层和利用层两方面来防范,网络层较易,利用层较难。旗下小刀云安全品牌专业为客户提供DDoS流量监控、WAF防护、漏洞扫描、入侵检测、网络安全态势感知、主机加固、等保整改建设等安全业务服务。接入简单、秒级生效。为政府、金融、高校、医疗、支付、游戏、直播等各行业客户保驾护航。 www.ddos5.com&nbsp; &nbsp; 全国服务热线:</span>


标签: 验证码地址
相关信息推荐