1.DoS攻击
DoS攻击(Denial of Service,拒绝服务攻击)通过消耗计算机的某种资源,例如计算资源、网络连接等,造成资源耗尽,导致服务端无法为合法用户提供服务或只能提供降级服务。在
SDN
网络的集中式架构中,控制器是天然的网络中心,负责整个网络的管理和控制工作,很容易成为DoS攻击的目标。
1.1 SDN 网络下的 DoS 攻击
在OpenFlow网络
架构
中,控制器是网络的核心,承担了整个网络的控制管理工作;控制器需要对整个网络进行不同粒度的管理,网络本身的数据传输需求会对控制层面造成不小的压力;尤其当存在恶意攻击时,控制层面甚至可能无法对合法用户的请求做出响应,形成DoS攻击。虽然目前已有流表合并技术等研究方向能够缓解转发规则过细带来的压力,但是恶意攻击者只需修改数据包头部,增
加流表合并难度,仍会对整个网络造成严重影响。
1.2 饱和攻击
在众多DoS攻击中,有一种攻击为SDN网络所特有;Seungwon Shin将其命名为数据层到控制层的饱和攻击,简称为饱和攻击。该攻击的理论依据及造成的危害具体如下。
当新的流请求到达OpenFlow交换机后,交换机会将该数据流的第一个报文信息与交换机内部的转发规则进行匹配。当所有的流表都不存在与该数据流相匹配的转发规则且交换机设置为reactive模式时,数据包会被交换机封装到Packet-In消息中,并上发给控制器;由控制器进行路由计算并通过Packet_Out消息向交换机下发新的转发规则。当攻击者同时通过不同的交换机,持续地向网络中发送大量交换机无法匹配的数据流,会造成控制器与交换机同时忙于处理攻击者发送的非法数据流,造成无法满足正常用户的合法请求,从而导致DoS攻击。Seungwon Shin提出,在这种机制下,会产生两种攻击效果;首先是由于同时请求的报文过多,大量消耗控制器资源,导致正常数据流的请求无法得到服务或者服务受到影响;其次,由于攻击者伪造了大量的数据流,控制器会向转发层面的交换机发送大量无用的转发规则,导致交换机无法存储正常数据流的流表信息。除此之外,大量报文会占用连接控制器的链路,进一步令正常服务请求难以得到响应。此攻击利用了SDN网络的集中式架构,实施难度小,攻击者只要产生大量无法匹配流表的报文,就能达到同时消耗控制层面资源与数据层面资源的目的。上述方案常见的具体实施方法有两种,一是利用ARP协议,由于OpenFlow交换机只具有简单的转发功能,交换机在收到ARP请求后,会向控制器转发询问,攻击者可以向交换机发送大量伪造的ARP请求实现对控制器的攻击。另一种是利用ICMP报文,当攻击者不断修改自身IP地址,并向网络发送大量ICMP报文,会形成大量新的数据流,导致交换机不断向控制器发送报文,形成DoS攻击。以上两种方式属于利用OpenFlow协议的特点对SDN网络实施攻击的范例。
1.3常见DoS攻击检测方案
主要包括
异常流量检测
与
数据分析检测
。
异常流量检测是最常见的一类攻击检测方式。针对DoS攻击的异常流量检测方案可以分为两类**😗*基于特征信息的检测和基于异常行为的检测。
基于特征信息的检测
:通过检测数据流量的特征,将其特征与预先定义的攻击类型的特征进行比对,当数据流量的特征与预先定义的攻击特征相匹配,则判断网络中发生了该攻击。
基于异常行为的检测
:预先设置网络中正常参数的阈值范围,通过分析网络中相关参数的数值并将其与阈值进行比较,当网络中参数不在正常范围内时,则判定网络出现攻击。
除了异常流量检测法外,目前常见的DoS攻击检测方案还有
数据分析检测
,通过对流量数据所含有的信息,包含空间信息、时间信息和技术指标信息构成三个维度来对数据流进行分析。针对不同种类的DoS攻击,下表列出了一些常见DoS攻击方式及其数据分析的检测指标。
2.DDOS攻击方式
2.1 SYN Flood攻击
SYN- Flood攻击是当前网络上最为常见的DDoS攻击,也是最为经典的拒绝服务攻击,它利用了TCP协议实现上的一个缺陷,通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。这种攻击早在1996年就被发现,但至今仍然显示出强大的生命力。很多操作系统,甚至防火墙、路由器都无法有效地防御这种攻击,而且由于它可以方便地伪造源地址,追查起来非常困难。它的数据包特征通常是,源发送了大量的SYN包,并且缺少三次握手的最后一步握手ACK回复。
2.1.1 原理
例如,攻击者首先伪造地址对服务器发起SYN请求(我可以建立连接吗?),服务器就会回应一个ACK+SYN(可以+请确认)。而真实的IP会认为,我没有发送请求,不作回应。服务器没有收到回应,会重试3-5次并且等待一个SYN Time(一般30秒-2分钟)后,丢弃这个连接。
如果攻击者大量发送这种伪造源地址的 SYN请求,服务器端将会消耗非常多的资源来处理这种半连接,保存遍历会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行 SYN+ACK的重试。最后的结果是服务器无暇理睬正常的连接请求—拒绝服务。在服务器上用netstat –an命令查看SYN_RECV状态的话,就可以看到:
可以看到大量的SYN包没有ACK回应。
2.1.2 SYN Flood防护
目 前市面上有些防火墙具有SYN Proxy功能,这种方法一般是定每秒通过指定对象(目标地址和端口、仅目标地址或仅源地址)的SYN片段数的阀值,当来自相同源地址或发往相同目标地址的SYN片段数达到这些阀值之一时,防火墙就开始截取连接请求和代理回复SYN/ACK片段,并将不完全的连接请求存储到连接队列中直到连接完成或请求超时。当防火墙中代理连接的队列被填满时,防火墙拒绝来自相同安全区域(zone)中所有地址的新SYN片段,避免网络主机遭受不完整的三次握手的攻击。但是,这种方法在攻击流量较大的时候,连接出现较大的延迟,网络的负载较高,很多情况下反而成为整个网络的瓶颈;?
Random Drop:随机丢包的方式虽然可以减轻服务器的负载,但是正常连接的成功率也会降低很多;
特征匹配:IPS上会常用的手段,在攻击发生的当时统计攻击报文的特征,定义特征库,例如过滤不带TCP Options 的syn 包等;
早 期攻击工具(例如synkiller,xdos,hgod等)通常是发送64字节的TCP SYN报文,而主机操作系统在发起TCP连接请求时发送SYN 报文是大于64字节的。因此可以在关键节点上设置策略过滤64字节的TCP SYN报文,某些宣传具有防护SYN Flood攻击的产品就是这么做的。随着工具的改进,发出的TCP SYN 报文完全模拟常见的通用操作系统,并且IP头和TCP头的字段完全随机,这时就无法在设备上根据特定的规则来过滤攻击报文。这时就需要根据经验判断IP 包头里TTL值不合理的数据包并阻断,但这种手工的方法成本高、效率低。 图是某攻击工具属性设置。
SYN Cookie:就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个 IP地址来的包会被丢弃。但SYN Cookie依赖于对方使用真实的IP地址,如果攻击者利用SOCK_RAW随机改写IP报文中的源地址,这个方法就没效果了。
2.1.3 商业产品的防护算法
syn cookie/syn proxy类防护算法:这种算法对所有的syn包均主动回应,探测发起syn包的源IP地址是否真实存在;如果该IP地址真实存在,则该IP会回应防护设备的探测包,从而建立TCP连接;大多数的国内外抗拒绝服务产品采用此类算法。
safereset算法:此算法对所有的syn包均主动回应,探测包特意构造错误的字段,真实存在的IP地址会发送rst包给防护设备,然后发起第2次连接,从而建立TCP连接;部分国外产品采用了这样的防护算法。?
syn重传算法:该算法利用了TCP/IP协议的重传特性,来自某个源IP的第一个syn包到达时被直接丢弃并记录状态,在该源IP的第2个syn包到达时进行验证,然后放行。
综合防护算法:结合了以上算法的优点,并引入了IP信誉机制。当来自某个源IP的第一个syn包到达时,如果该IP的信誉值较高,则采用syncookie 算法;而对于信誉值较低的源IP,则基于协议栈行为模式,如果syn包得到验证,则对该连接进入syncookie校验,一旦该IP的连接得到验证则提高其信誉值。有些设备还采用了表结构来存放协议栈行为模式特征值,大大减少了存储量。
2.2 ACK Flood攻击
2.2.1 原理
ACK Flood攻击是在TCP连接建立之后,所有的数据传输TCP报文都是带有ACK标志位的,主机在接收到一个带有ACK标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在,如果存在则检查该数据包所表示的状态是否合法,然后再向应用层传递该数据包。如果在检查中发现该数据包不合法,例如该数据包所指向的目的端口在本机并未开放,则主机操作系统协议栈会回应RST包告诉对方此端口不存在。
这里,服务器要做两个动作:查表、回应 ACK/RST。这种攻击方式显然没有SYN Flood给服务器带来的冲击大,因此攻击者一定要用大流量ACK小包冲击才会对服务器造成影响。按照我们对TCP协议的理解,随机源IP的ACK小包应该会被Server很快丢弃,因为在服务器的TCP堆栈中没有这些ACK包的状态信息。但是实际上通过测试,发现有一些TCP服务会对ACK Flood比较敏感,比如说JSP Server,在数量并不多的ACK小包的打击下,JSP Server就很难处理正常的连接请求。对于Apache或者IIS来说,10kpps的ACK Flood不构成危胁,但是更高数量的ACK Flood会造成服务器网卡中断频率过高,负载过重而停止响应。可以肯定的是,ACK Flood不但可以危害路由器等网络设备,而且对服务器上的应用有不小的影响。抓包:
如果没有开放端口,服务器将直接丢弃,这将会耗费服务器的CPU资源。如果端口开放,服务器回应RST。
2.2.2 ACK Flood防护
利用对称性判断来分析出是否有攻击存在。所谓对称型判断,就是收包异常大于发包,因为攻击者通常会采用大量ACK包,并且为了提高攻击速度,一般采用内容基本一致的小包发送。这可以作为判断是否发生ACK Flood的依据,但是目前已知情况来看,很少有单纯使用ACK Flood攻击,都会和其他攻击方法混合使用,因此,很容易产生误判。?
一 些防火墙应对的方法是:建立一个hash表,用来存放TCP连接“状态”,相对于主机的TCP stack实现来说,状态检查的过程相对简化。例如,不作sequence number的检查,不作包乱序的处理,只是统计一定时间内是否有ACK包在该“连接”(即四元组)上通过,从而“大致”确定该“连接”是否是“活动的 ”。
2.3 UDP Flood攻击
2.3.1 原理
UDP Flood是日渐猖厥的流量型DoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。 100k pps的UDP Flood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDP FLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。
正常应用情况下,UDP包双向流量会基本相等,而且大小和内容都是随机的,变化很大。出现UDP Flood的情况下,针对同一目标IP的UDP包在一侧大量出现,并且内容和大小都比较固定。
攻击工具:
53端口的UDP Flood攻击抓图:
UDP Flood大包攻击(占带宽,分片):
2.3.2 UDP Flood防护
UDP协议与TCP 协议不同,是无连接状态的协议,并且UDP应用协议五花八门,差异极大,因此针对UDP Flood的防护非常困难。其防护要根据具体情况对待:
判断包大小,如果是大包攻击则使用防止UDP碎片方法:根据攻击包大小设定包碎片重组大小,通常不小于1500。在极端情况下,可以考虑丢弃所有UDP碎片。
攻击端口为业务端口:根据该业务UDP最大包长设置UDP最大包大小以过滤异常流量。
攻击端口为非业务端口:一个是丢弃所有UDP包,可能会误伤正常业务;一个是建立UDP连接规则,要求所有去往该端口的UDP包,必须首先与TCP端口建立TCP连接。不过这种方法需要很专业的防火墙或其他防护设备支持。
2.4 ICMP Flood攻击
2.4.1 原理
ICMP Flood 的攻击原理和ACK Flood原理类似,属于流量型的攻击方式,也是利用大的流量给服务器带来较大的负载,影响服务器的正常服务。由于目前很多防火墙直接过滤ICMP报文,因此ICMP Flood出现的频度较低。比较下面两幅图,就应该可以看出是否有ICMP Flood攻击。
2.4.2 ICMP Flood防护
其防御也很简单,直接过滤ICMP报文。这里就不做详细说明。
2.5 Connection Flood攻击
2.5.1 原理
Connection Flood是典型的并且非常的有效的利用小流量冲击大带宽网络服务的攻击方式,这种攻击方式目前已经越来越猖獗。这种攻击的原理是利用真实的IP地址向服务器发起大量的连接,并且建立连接之后很长时间不释放,占用服务器的资源,造成服务器服务器上残余连接(WAIT状态)过多,效率降低,甚至资源耗尽,无法响应其他客户所发起的连接。
其中一种攻击方法是每秒钟向服务器发起大量的连接请求,这类似于固定源IP的SYN Flood攻击,不同的是采用了真实的源IP地址。通常这可以在防火墙上限制每个源IP地址每秒钟的连接数来达到防护目的。但现在已有工具采用慢速连接的方式,也即几秒钟才和服务器建立一个连接,连接建立成功之后并不释放并定时发送垃圾数据包给服务器使连接得以长时间保持。这样一个IP地址就可以和服务器建立成百上千的连接,而服务器可以承受的连接数是有限的,这就达到了拒绝服务的效果。
另外,蠕虫大规模爆发的时候,由于蠕虫代码则比较简单,传播过程中会出现大量源IP地址相同的包,对于 TCP 蠕虫则表现为大范围扫描行为。这是在判断Connection Flood时需要注意的。
在受攻击的服务器上使用netstat –an来看:
存在大量连接状态,来自少数的几个源。如果统计的话,可以看到连接数对比平时出现异常。并且增长到某一值之后开始波动,说明此时可能已经接近性能极限。因此,对这种攻击的判断:在流量上体现并不大,甚至可能会很小;大量的ESTABLISH状态;新建的ESTABLISH状态总数有波动。
2.5.2 Connection Flood防护
主动清除残余连接。
对恶意连接的IP进行封禁。
限制每个源IP的连接数。
可以对特定的URL进行防护。
反查Proxy后面发起HTTP Get Flood的源。
2.6 HTTP Get攻击
2.6.1 原理
这种攻击主要是针对存在ASP、JSP、PHP、CGI等脚本程序,并调用MSSQLServer、MySQLServer、Oracle等数据库的网站系统而设计的,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用,典型的以小博大的攻击方法。一般来说,提交一个GET或POST指令对客户端的耗费和带宽的占用是几乎可以忽略的,而服务器为处理此请求却可能要从上万条记录中去查出某个记录,这种处理过程对资源的耗费是很大的,常见的数据库服务器很少能支持数百个查询指令同时执行,而这对于客户端来说却是轻而易举的,因此攻击者只需通过Proxy代理向主机服务器大量递交查询指令,只需数分钟就会把服务器资源消耗掉而导致拒绝服务,常见的现象就是网站慢如蜗牛、ASP程序失效、PHP连接数据库失败、数据库主程序占用CPU偏高。这种攻击的特点是可以完全绕过普通的防火墙防护,轻松找一些Proxy代理就可实施攻击,缺点是对付只有静态页面的网站效果会大打折扣,并且有些Proxy会暴露攻击者的IP地址。攻击工具:
在遭受攻击的服务器上抓包,大量不同IP在请求资源。在实际情况中,也有可能使用代理地址连接。
2.6.2 HTTP Get防护
对是否HTTP Get的判断,要统计到达每个服务器的每秒钟的GET 请求数,如果远远超过正常值,就要对HTTP协议解码,找出HTTP Get及其参数(例如URL等)。
然后判断某个GET 请求是来自代理服务器还是恶意请求。并回应一个带key的响应要求请求发起端作出相应的回馈。如果发起端并不响应则说明是利用工具发起的请求,这样HTTP Get请求就无法到达服务器,达到防护的效果。
2.7 UDP DNS Query Flood攻击
2.7.1 原理
UDP DNS Query Flood攻击实质上是UDP Flood的一种,但是由于DNS服务器的不可替代的关键作用,一旦服务器瘫痪,影响一般都很大。
UDP DNS Query Flood攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名,被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层DNS服务器递归查询域名信息。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。
根据微软的统计数据,一台DNS服务器所能承受的动态域名查询的上限是每秒钟9000个请求。而我们知道,在一台P3的PC机上可以轻易地构造出每秒钟几万个域名解析请求,足以使一台硬件配置极高的DNS服务器瘫痪,由此可见DNS 服务器的脆弱性。同时需要注意的是,蠕虫扩散也会带来大量的域名解析请求。
2.7.2 UDP DNS Query Flood防护
在UDP Flood的基础上对 UDP DNS Query Flood 攻击进行防护
根据域名 IP 自学习结果主动回应,减轻服务器负载(使用 DNS Cache)
对突然发起大量频度较低的域名解析请求的源 IP 地址进行带宽限制
在攻击发生时降低很少发起域名解析请求的源 IP 地址的优先级
限制每个源 IP 地址每秒的域名解析请求次数
3.网络溯源技术
网络安全不能仅依赖于防护,还应该聚焦于检测与响应,其中进行网络攻击溯源是一种有效的响应方式。进行网络溯源的主要目的是重建攻击路径,这样网络管理员就能够识别攻击者的地址;从而进行追责,最终形成威慑。
溯源技术通常被分为两大类:
主动溯源和被动溯源
。其中,主动溯源是在报文传输过程中标记报文信息,攻击一旦发生,管理人员就能够利用这些信息去跟踪路由路径并确定攻击源。被动溯源是在判断攻击发生之后才开始采取措施,使用工具分析流量情况等信息进行溯源。
常见的溯源方案
有以下四种:链路测试技术、日志记录技术、基于ICMP的报文技术和概率包标记技术。
链路测试技术
是逐跳地对路由器进行测试以重建攻击路径。在传统网络中,通常需要安装一个跟踪程序,如DoS Tracker,到靠近攻击者的路由器中,监视传入的数据包,找到攻击路径的上一跳,重复该过程,逐跳回溯,直到找到攻击源。
日志记录技术
是在中转设备上存储途经它的报文信息,在需要处理时,使用大数据分析技术对海量数据进行分析,来达到寻找攻击源的目的。
基于ICMP的报文技术
由Bellovin提出;数据包在通过路由器时以一定概率生成ICMP traceback(iTrace)消息, 一个iTrace消息由下一跳信息、上一跳信息以及一个时间戳组成,目的主机收到足够数量的iTrace消息后,能构造出消息的转发路
径。
概率包标记技术
使用IP分组头部的某些字段,向字段中添加路径信息;这种方法与ICMP溯源法类似,受害者收到足够的分组后重构攻击路径;该方法相对于基于ICMP的报文技术的优势在于不需要生成新的特殊报文。
4.溯源对网络安全的意义
Chris Sanders 指出“预防终将失败”,网络安全应该聚焦到检测和响应上 。网络溯源是一种有效的对网络攻击的响应方式。对网络攻击的响应按照响应时间可以分为两类,一是检测到攻击后立即作出响应,如启动防护方案、迁移功能等;另一种是进行网络溯源,找到攻击源进行事故遏制和取证操作,从源头上解决网络攻击。前一种方法能够快速对攻击作出响应,把攻击隔离在网络之外;但是,这种方式只是对网络进行防护,无法找到攻击的源头,攻击者很难受到惩罚。后一种方法虽然不能快速对网络进行防护,但通过网络溯源找到攻击源,进行取证,进而确认攻击者,才能从根本上解决攻击问题。网络溯源对网络安全具有十分重要的意义,它不仅能够找到攻击者并对其进行屏蔽,并且能够搜集到对攻击者进行法律追究的依据,并形成威慑。因此,从长远考虑,网络攻击溯源对网络安全而言具有重要的意义。