传统方案
早期的DDOS防御是通过防火墙和路由器来检测和实现的,这样的方案对早期的攻击有着一定的防护效果,防火墙对于协议层的防护是很有效果。然而互联网的发展使DDOS攻击的技巧性越来越高,而且攻击能力也越来越强,使用防火墙防御DDOS显然力不从心:
1.防火墙和路由器只有在针对协议层攻击时才会有效,而越来越多的DDOS攻击是应用层面上;
2.防火墙不是专门为DDOS而设计的,用来为DDOS做流量监控清洗会在性能上影响防火墙正常功能,这对防火墙来说是个不必要的考验;
3.大型网络的部署和扩容远比软件升级复杂,通过程序发起的DDOS攻击,比网络设备的防御更为灵活;
就像前面提到的一样,DDOS的防御没有绝对有效的方案,尽管大型互联网环境渴求越来越多的防御方案,但目前大型互联网系统的防御更多的是各种方案的组合。
前面提到过,防御DDOS的防御是一种半自动的流程,所谓DDOS防御体系,无非是流量检测+异常流量清洗+策略规则+控制系统+人工处理。
流量检测
流量检测目前有两种技术,DPI(Deep Packet Inspection深度包检测)和DFI(Deep/Dynamic
Flow Inspection,深度/动态流检测),两种技术各有千秋。
DPI
传统流量分析仅仅通过对IP包头中的五元组信息进行分析,包含源地址、目标地址、源端口、目的端口及协议类型等4层以下的基本信息,而DFI是一种基于应用层的流量检测和控制技术。该技术通过对IP包内容读取,对IOS7协议中应用层信息进行重组获取应用程序的内容。按协议类型,DPI识别划分三类:
1.协议特征字识别技术
不同应用采用不通过协议,这些协议通常具有其特殊指纹(如特定端口、字符串、bit序列等),可以通过识别报文中的这些指纹信息确定业务承载应用;以用户熟知的BT为例,其Handshake的协议特征字为“。BitTorrent
Protocol”;
2.应用层网关识别技术
如果业务流没有任何特征,可以使用应用层网关识别技术。通过应用层网关识别出控制流,再根据控制流协议选择特定应用层网关对业务流进行解析,识别出对应的业务流。比如通过检测SIP(会话初始协议)/H323的协议交互获取完成RTP(实时传输协议,Real-time
Transport Protocol)信息;
3.行为模式识别技术
行为模式主要用于无法根据协议判断业务的情况。比如垃圾邮件和正常邮件的业务流内容是一样的,必须通过行为模式才能识别出恶意的行为。
DFI
与DFI流量识别不同,DFI是一种基于流量行为的应用层识别技术,通过不能类型的应用在会话连接和数据流上的状态进行识别。
DFI基于流量的行为特征,建立流量特征模型,分析会话连接流的包长、连接速度、字节大小,间隔等信息对比流模型,实现应用类型的辨别。
两种技术的区别如下:
1.处理速度:DFI仅仅需要对流量进行分析和后台模型对比,相比需要逐包进行分析的DPI,处理了速度较快;
2.DPI需要不断更新协议和新应用以及正则匹配公式,维护成本高;
3.DPI对应用类型和协议识别精确,DFI仅能做粗略分析;
4.DPI无法识别加密传输的控制流;
异常流量清洗
清洗设备
前面分析到首包丢弃和TCP Proxy的时候,提到过一个思路——把所有网络层安全检测识别防御逻辑和业务处理隔离开,目前完成安全检查识别和防御功能的,主要是异常流量清洗设备。
通常来说,流量清洗设备可以通过异常流量限速,规则过滤等等各种方式实现多层次安全防御,过滤掉网络层和应用层的攻击。
多层防护
多层防护指通过静态特征检测,动态规则过滤,限速和人机识别等方式进行网络层和应用层的防御。实际上无论哪种防御手段,都只能保证网络层的清洗效果,应用层的更多的是采取限流的手段,误杀率很高。
网络层
网络层的防护,多数情况下是针对各种flood攻击。
1.限速
最常见的防御手段,一般来说用户会对自己的应用设置阈值,包括pps、bps、qps、newcons、concurcons等,可以对于超过用户阈值的流量进行限速。
2.Syn cookie防御
Syn cookie的防御见前面相关部分。
3.Syn reset
Syn reset的方法类似于前面提到的首包丢弃,相对于首包丢弃中被动等待client重传的方法相比,syn
reset模拟服务器发送syn+ack报文,正常的client会判断ack中序列号错误,则发送rst报文,终止连接。
4.Tcp状态
TCP传输时,正常客户端使用正常的协议栈通信,有相应的状态变迁模型。一般的攻击并没有模拟合法的协议栈,这种情况下可以通过状态监测,确定状态补全的报文并选择丢弃。比如未完成3次握手的一些攻击,并没有完成3次握手的状态变迁模型。
TCP的状态图如下所示:
5.指纹识别
狭义的指纹定义指指尖的印痕或者影印,广义的指纹可以指任何代表特色,痕迹和特征等能描述特性的证据。
这里的指纹识别,事实上是对TCP/IP,HTTP等指纹特征的一个机器学习的过程——收集正常流量的统计特征,根据这些统计特征进行建模。异常流量对比这样的模型,通常某一特征会明显超过正常流量,从而进行过滤。
应用层
之前提到了应用层攻击不同于网络层攻击,原因在于它属于上层协议,更接近于业务逻辑,甚至和正常业务没有严格界限。另外,这种层次的攻击往往严重消耗服务端的宽带或主机资源,破坏性很大。
大部分应用层攻击集中在HTTP上,少部分针对于DNS。
域名限速
可以以域名为单位对请求进行单独的限速。
DNS首包丢弃
DNS首包丢弃方法见常见DDOS攻击DNS query flood防御部分。
DNS TC重试
DNS首包丢弃方法见常见DDOS攻击DNS query flood防御部分。
HTTP Cookie验证
见HTTP flood防御手段限制访问频率部分。
在线方案&旁路方案
互联网DDOS防御,一般可以分为在线部署和旁路部署,两者针对不同用户和环境而部署方式不同,各有利弊。
通常来说大型的互联网或者运营商网络一般采取旁路部署,这样的方式不影响主干网络拓扑结构,不影响正常业务,利于扩容。另外,旁路部署一般有专门的调度系统,除了保证清洗的控制外,还有流量丢弃(黑洞)等控制。
而一般来说小型网络通常采用在线部署方案,它的优点是检测和防护在一起,且一直保持清洗状态。缺点是对可靠性要求很高,而且缺少专门的调度系统,本身灵活性较差,面对复杂的攻击时显得比较单薄。
在线部署
典型的在线部署方案如下:
经过路由器的流量直接进入到清洗设备,在清洗结束后流量进入到交换机并最终到业务目标地址。清洗过程中,可以加入对清洗设备的控制,这种方法可以通过校验清洗效果随时改变清洗策略。
旁路部署
典型的旁路部署方案如下:
旁路部署和在线部署相比复杂了不少,主要包含了以下几个方面:
流量检测
旁路部署一般有专门的流量检测系统,通过对分光的镜像流量进行分析以判断异常流量,并触发调度系统,进行异常流量清洗或者丢弃操作;
流量牵引
流量牵引即控制端向清洗设备发送清洗指令,清洗设备和核心路由器进行交互,通过BGP协议等方法指定IP流量牵引到清洗设备上;
流量清洗
清洗设备对牵引来的流量进行攻击识别,并对攻击报文进行过滤和清洗;
流量回注
清洗设备将清洗后的流量回注的核心路由器上,核心路由器将这些流量引导至正常用户网路中;
混合部署
一些混合型的部署也有着一定的意义,比如可以对在线部署进行改造,清洗设备不直连用户网交换机,而是放在旁路位置,仍然使用流量回注的方式确保非环路的连通;这种情况下,尽管没有专门的流量检测模块做镜像流量分析,仍然可以保持调度系统对清洗设备的各种策略控制,部署实例如下:
如上所述,这种混合方案实质上是清洗设备的旁路部署,但形式和效果上是一种在线方案(可切换到旁路效果),并确保核心调度对牵引和回注的绝对控制和灵活性。
流量牵引和回注
流量牵引和回注的过程如下:
牵引
当检测到异常流量需要清洗时,发送牵引命令到清洗设备,此时清洗设备会向最近的路由器发送一条被攻击网段的BGP路由(no-advertise属),指定下一跳地址为清洗设备,且路由不需要全网扩散。
由于BGP策略优先于普通路由,所以流量的下一条地址指定为清洗设备。
除BGP外,策略路由和MPLS等都可以实现流量牵引的技术。
回注
同流量牵引一样,回注的过程同样通过指定路由器策略实现,避免清洗设备中流量到达路由器后形成环路。
流量回注一般可以采用3种方式,策略路由、路由策略和vlan。
策略路由优先于普通路由,可以在报文入口指定下一跳地址,从而流量回注时优先命中策略路由,而不是清洗设备;
GRE和MPLS协议可以指定报文的目标地址,将回注流量封装成GRE或MPLS报文,发送回核心路由器,核心路由器将GRE和MPLS报文转发给目标地址设备,目标设备解析GRE和MPLS报文,发送到用户网络,从而避免形成环路;
利用Vlan的二层转发特点(交换机可以通过mac地址定位vlan端口,否则向vlan内所有端口发送报文),将清洗设备和目标设备配置在同一个vlan内,实现回注的流量达到用户网路的目的。
|