总结自:微信公众号“网络安全每日说”浏览器
流量清洗是指在所有的网络流量中区分出正常流量和恶意流量,将恶意流量阻断和丢弃,而只将正常的流量交付给服务器。安全
与其余的网络安全检测和防御手段相似,流量清洗也须要考虑漏报率和误报率的问题。一般,漏报率和误报率是一对矛盾,须要经过对检测和防御规则的调整来进行平衡。服务器
若是流量清洗的漏报率过高,就会有大量的攻击请求穿透流量清洗设备,若是没法有效地减小攻击流量,也就达不到减轻服务器压力的效果微信
相反,若是误报率过高,就会出现大量的正常请求在清洗过程当中被中断,严重影响正常的服务和业务运行。网络
优秀的流量清洗设备,应该可以同时将误报率和漏报率下降到能够接受的程度,这样就可以在不影响网络或业务系统正常运行的状况下,最大限度地将恶意攻击流量从所有网络流量中去除。要达到这个目的,须要同时使用多种准确而高效的清洗技术,这些技术包括:IP信誉检查、攻击特征匹配、速度检查与限制、TCP代理和验证、协议完整性验证和客户端真实性验证。分布式
IP信誉机制是指为互联网上的IP地址赋予必定的信誉值,那些过去或如今常常被做为僵尸主机发送垃圾邮件或发动拒绝服务攻击的IP地址会被赋予较低的信誉值,说明这些IP地址更有可能成为网络攻击的来源。工具
IP信誉检查的极端状况就是IP黑名单机制,即若是数据包的来源存在于黑名单当发生分布式拒绝服务攻击时,流量清洗设备会对经过的网络流量进行IP信誉检查,在其内部的IP地址信誉库中查找每个数据包来源的信誉值,并会优先丢弃信誉值低的IP地址所发来的数据包或创建的会话链接,以此保证信誉高的IP地址与服务器的正常通讯。性能
在大多数状况下,发动分布式拒绝服务攻击须要借助攻击工具。为了提升发送请求的效率,攻击工具发出的数据包一般是由编写者伪造并固化到工具当中的,而不是在交互过程当中产生的,所以一种攻击工具所发出的数据包载荷会具备一些特征。流量清洗设备能够将这些数据包载荷中的特征做为指纹,来识别工具发出的攻击流量。指纹识别能够分为静态指纹识别和动态指纹识别两种。静态指纹识别是指预先将多种攻击工具的指纹特征保存在流量清洗设备内部,设备将通过的网络数据包与内部的特征库进行比对,直接丢弃符合特征的数据包;动态指纹识别则须要清洗设备对流过的网络数据包进行学习,在学习到若干个数据包的载荷部分以后,将其指纹特征记录下来,后续命中这些指纹特征的数据包会被丢弃,而长期不被命中的指纹特征会逐渐老化直至消失。学习
一些攻击方法在数据包载荷上可能并不存在明显的特征,没有办法进行攻击特征匹配,但却在请求数据包发送的频率和速度上有着明显的异常。这些攻击方法能够经过速度检查与限制来进行清洗。测试
例如,在受到THC SSL DoS攻击时,会在同一个SSL会话中屡次进行加密密钥的重协商,而正常状况下是不会反复重协商加密密钥的。所以,当流量清洗设备进行统计时,若是发现SSL会话中密钥重协商的次数超过了特定的阈值,就能够直接中断这个会话并把来源加入黑名单中。再如,在受到Slowloris和慢速POST请求攻击时,客户端和服务器之间会以很是低的速率进行交互和数据传输。流量清洗设备在发现HTTP的请求长时间没有完成传输时,就能够将会话中断。此外,对于UDP洪水攻击等一些没有明显特征、仅经过大流量进行攻击的方法,能够经过限制流速的方式对其进行缓解。
SYN洪水攻击等攻击方式都是利用TCP协议的弱点,将被攻击目标的链接表占满,使其没法建立新的链接而达到拒绝服务攻击的目的。流量清洗设备能够经过TCP代理和验证的方法来缓解这种攻击形成的危害。在一个TCP SYN请求到达流量清洗设备后,设备并不将它交给后面的服务器,而是直接回复一个SYN+ACK响应,并等待客户端回复。若是SYN请求来自合法的用户,那么他会对SYN+ACK进行响应,这时流量清洗设备会代替用户与其保护以后,合法的用户和服务器之间就能够透过流量清洗设备,进行正常数据通讯。对于用户来讲整个过程是彻底透明的,正常的交互没有受到任何影响。的服务器创建起TCP链接,并将这个链接加入信任列表当中。
而若是这个SYN请求来自攻击者,那么他一般不会对SYN+ACK进行应答,从而造成半开链接。这样流量清洗设备会暂时保留这个半开链接,并在通过短暂的超时时间以后丢弃这个链接
相比于所保护的服务器,流量清洗设备对链接表操做进行了专门优化,可以处理极其庞大的链接请求数量,所以即便有很是多的SYN请求同时涌向清洗设备,清洗设备也可以处理。在这个过程当中,因为清洗设备拦截在被保护的服务器以前,服务器并无消耗任何的链接资源,所以保证了服务器的性能不受影响。
流量清洗设备在做为TCP代理进行防御时,除了拦截半开链接外,还能够进行TCP协议的一些交互式验证。例如,在收到第一个SYN请求时,经过直接丢弃、发送RST包或发送错误序列号的ACK包的方式来中断链接过程,并检查客户端是否从新发起链接请求。经过这种验证,也能够识别并丢弃许多不合法的链接。
为了提升发送攻击请求的效率,大多数的攻击方法都会只发送攻击请求,而不接收服务器响应的数据,或者没法彻底理解和处理响应数据。所以,若是可以对请求来源进行交互式验证,就能够检查请求来源协议实现的完整性。对于协议实现不完整的请求来源,一般能够将其做为攻击主机丢弃其发送的数据。在DNS解析的过程当中,若是域名解析请求得到的响应数据中Flags字段的Truncated位被置位,一般客户端就会使用TCP 53端口从新发送域名解析请求。
而攻击者使用的攻击工具因为不接收或不处理解析请求的响应数据,也就不会使用TCP 53端口进行从新链接。流量清洗设备能够利用这个区别来有效地区分合法用户与攻击者,拦截恶意的DNS攻击请求
对于提供HTTP服务的Web服务器,也可使用相似的方式进行协议完整性验证。例如,可使用HTTP协议中的302重定向来验证请求的来源是否接收了响应数据并完整实现了HTTP协议的功能。HTTP的302状态码表示被请求的资源被临时转移,并会给出一个转移后的地址。正常的合法用户在接收到302重定向后会顺着跳转地址寻找对应的资源
而攻击者的攻击工具因为不接收或不处理响应数据,则不会进行跳转,所以攻击请求会被清洗设备拦截,Web服务器不会受到任何影响
进行协议完整性验证可以清洗掉一部分简单的攻击工具所发送的攻击流量,可是,一些攻击工具在开发过程当中使用了现成的协议库,这样就可以完整实现协议交互,经过协议完整性检验。对于这些攻击工具,须要使用客户端真实性验证技术进行攻击流量清洗。客户端真实性验证是指对客户端程序进行挑战–应答式的交互验证,检查客户端可否完成特定的功能,以此来肯定请求数据是否来自真实的客户端。对基于页面的Web服务,能够经过检查客户端是否支持JavaScript来验证请求是否来自真实的浏览器客户端。当收到HTTP请求时,流量清洗设备会使用JavaScript等脚本语言发送一条简单的运算操做。若是请求是由真实的浏览器发出的,那么浏览器会进行正确运算并返回结果,流量清洗设备进行结果验证后就会让浏览器进行正确运算并返回结果,流量清洗设备进行结果验证后就会让浏览器跳转到Web服务器上真正的资源位置,不会影响正经常使用户的访问,而若是请求是由攻击者经过攻击工具发送的,因为大部分工具没有实现JavaScript的解析和执行功能,于是不能返回正确的运算结果,流量清洗设备会直接丢弃这些请求,而不会给出跳转到Web服务器的链接,所以Web服务器不会受到影响
固然,攻击者也能够牺牲工具的一部分攻击效率,并在工具中加入JavaScript的解析和执行功能,以便经过JavaScript验证。这时,则须要使用验证码进行人机识别。验证码的全称是“全自动区分计算机和人类的图灵测试”(Completely Automated Public Turing test to tell Computers and Humans Apart,CAPTCHA),这是一种用于分辨人与计算机的反向图灵测试。
图灵测试和反向图灵测试
图灵测试(又称“图灵判断”)是图灵提出的一个关于机器人的著名判断原则。图灵测试是一种测试机器是否是具有人类智能的方法。被测试的包括一我的和一台声称本身有人类智力的机器。测试人在与被测试者(一我的和一台机器)隔开的状况下,经过一些装置(如键盘)向被测试者随意提问。问过一些问题后,若是测试人不能确认被测试者的答复中哪一个是人、哪一个是机器的回答,那么这台机器就经过了测试,并被认为具备人类智能。目前,尚未一台机器可以经过图灵测试。能够看出,图灵测试是由人来出题考验机器,其目的是让出题人没法分辨给出答案的是人仍是机器;而验证码与这个过程相反,是由机器来自动生成题目,其目的是让出题人可以有效地分辨给出答案的是否是真实的人。所以,验证码一般被认为是一种反向图灵测试。常见的验证码是让用户输入一个扭曲变形的图片上所显示的文字。对于真实的人类用户来讲,一般可以比较容易地识别出这些文字,给出正确的识别结果,从而经过测试并继续进行访问
而对于计算机来讲,想要识别验证码中的文字则至关困难。对于没法给出验证码正确识别结果的请求,流量清洗设备会直接丢弃,从而保护Web服务器不受影响误区:DDoS的云端清洗服务和本地缓解设备能够相互替代。DDoS实际上是多种攻击的统称,不一样的攻击也许要不一样的缓解方法。一般,云端清洗服务主要采用稀释和分流的方法,擅长应对流量型DDoS攻击;而本地缓解设备可以处理的流量较小,更容易组合使用多种清洗技术,适合对抗系统资源消耗型和应用资源消耗型DDoS攻击。用户应该根据本身的业务特色和主要威胁,选择适合自身的解决方案。