DDOS是DOS攻击中的一种方法。
DoS:是Denial of Service的简称,即拒绝服务,不是DOS操作系统,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击
利用程序漏洞或一对一资源耗尽的Denial of Service拒绝服务
DDOS:分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。
一对一的攻击完全拼各自的资源,效果差
多对一的攻击汇聚资源能力,重点在于量大,属于资源耗尽型
Dos分类
D网络
基于巨量的Flood耗尽目标网络带宽资源
如:ICMP Flood, UDP Flood
D协议
攻击协议漏洞发起的拒绝服务攻击
如:Syn Flood、Ping of Death、ARP、DNS、802.11、SSL
D应用
针对应用软件和操作系统漏洞发起的拒绝服务攻击
大量频繁访问消耗系统资源严重的应用(CC)
通常表现为操作系统运行正常,网络流量不大,但服务停止响应
可以是一击毙命的,也可以是耗尽目标资源的
以上分类并不严谨,不必太过执着于此
总结
从攻击者到被害者流程
网络->FW->服务器OS->服务应用
资源耗尽型攻击方面
网络:带宽
FW:吞吐量、并发连接
服务器:CPU、内存、I/O
应用:处理请求能力,对
OS资源的使用权
程序漏洞攻击
缓冲区溢出
协议、程序逻辑漏洞
攻击原理与攻击危害
按照攻击对象的不同,将攻击原理和攻击危害的分析分成3类,分别是攻击网络带宽资源、应用以及系统。
攻击网络带宽资源:
攻击网络带宽资源
攻击系统资源:
攻击系统资源
攻击应用资源:
攻击应用资源
SYN FLOOD攻击
利用服务器的连接缓冲区(Backlog Queue),利用特殊的程序,设置TCP的Header,向服务器端不断地成倍发送只有SYN标志的TCP连接请求。当服务器接收的时候,都认为是没有建立起来的连接请求,于是为这些请求建立会话,排到缓冲区队列中。
如果你的SYN请求超过了服务器能容纳的限度,缓冲区队列满,那么服务器就不再接收新的请求了。其他合法用户的连接都被拒绝掉。可以持续你的SYN请求发送,直到缓冲区中都是你的只有SYN标记的请求。
最通俗的例子,下面的图片是TCP的通信的三次握手,如果说攻击端,发送完第一次握手的数据后,然后就“消失”了,那么服务器就会不断的发送第二次握手的数据,可是攻击端的人找不到了。于是,服务器的资源大量被消耗,直到死机为止。当然要完全弄懂机制,需要对TCP有相当深入的了解。
TCP建立连接:三次握手
1.client: syn
2.server: syn+ack
3.client: ack
image.png
实验
基于python2.7版本
image.png
#apt-get install python-gnuplot 安装scapy相关组件
然后使用攻击脚本攻击脚本:
./syn_flood.py -iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 1.1.1.1 -j DROP -netstat -n I awk ‘/^ tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}‘
Windows系统默认半开连接数10个
使用方法:
– i=IP() 定义i变量(注意IP大小写,一定要大写)
– i.display() 显示ip包头用法
– i.dst="1.1.1.1" 目的地址
– t=TCP() 采用tcp协议发包
– t.display () 查看用法
– t.dport=3389 攻击远程3389端口
– sr1(i/t,verbose=1,timeout=3) 发送数据包()
– sr1(IP(dst=1.1.1.1)/TCP())
当出现这种情况时
我们发一个包释放一个连接,这种达不到攻击郊果。要构成攻击效果可以通过iptables限止发送RST包。这样就可以达到攻击郊果。iptables写法如下:
#iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 192.168.21.117 -j DROP
image.png
重新发包会发现
SYN Flood防御
前文描述过,SYN Flood攻击大量消耗服务器的CPU、内存资源,并占满SYN等待队列。相应的,我们修改内核参数即可有效缓解。主要参数如下:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
分别为启用SYN Cookie、设置SYN最大队列长度以及设置SYN+ACK最大重试次数。
SYN Cookie的作用是缓解服务器资源压力。启用之前,服务器在接到SYN数据包后,立即分配存储空间,并随机化一个数字作为SYN号发送SYN+ACK数据包。然后保存连接的状态信息等待客户端确认。启用SYN Cookie之后,服务器不再分配存储空间,而且通过基于时间种子的随机数算法设置一个SYN号,替代完全随机的SYN号。发送完SYN+ACK确认报文之后,清空资源不保存任何状态信息。直到服务器接到客户端的最终ACK包,通过Cookie检验算法鉴定是否与发出去的SYN+ACK报文序列号匹配,匹配则通过完成握手,失败则丢弃。当然,前文的高级攻击中有SYN混合ACK的攻击方法,则是对此种防御方法的反击,其中优劣由双方的硬件配置决定
tcp_max_syn_backlog则是使用服务器的内存资源,换取更大的等待队列长度,让攻击数据包不至于占满所有连接而导致正常用户无法完成握手。net.ipv4.tcp_synack_retries是降低服务器SYN+ACK报文重试次数,尽快释放等待资源。这三种措施与攻击的三种危害一一对应,完完全全地对症下药。但这些措施也是双刃剑,可能消耗服务器更多的内存资源,甚至影响正常用户建立TCP连接,需要评估服务器硬件资源和攻击大小谨慎设置。
除了定制TCP/IP协议栈之外,还有一种常见做法是TCP首包丢弃方案,利用TCP协议的重传机制识别正常用户和攻击报文。当防御设备接到一个IP地址的SYN报文后,简单比对该IP是否存在于白名单中,存在则转发到后端。如不存在于白名单中,检查是否是该IP在一定时间段内的首次SYN报文,不是则检查是否重传报文,是重传则转发并加入白名单,不是则丢弃并加入黑名单。是首次SYN报文则丢弃并等待一段时间以试图接受该IP的SYN重传报文,等待超时则判定为攻击报文加入黑名单。
首包丢弃方案对用户体验会略有影响,因为丢弃首包重传会增大业务的响应时间,有鉴于此发展出了一种更优的TCP Proxy方案。所有的SYN数据报文由清洗设备接受,按照SYN Cookie方案处理。和设备成功建立了TCP三次握手的IP地址被判定为合法用户加入白名单,由设备伪装真实客户端IP地址再与真实服务器完成三次握手,随后转发数据。而指定时间内没有和设备完成三次握手的IP地址,被判定为恶意IP地址屏蔽一定时间。除了SYN Cookie结合TCP Proxy外,清洗设备还具备多种畸形TCP标志位数据包探测的能力,通过对SYN报文返回非预期应答测试客户端反应的方式来鉴别正常访问和恶意行为。
清洗设备的硬件具有特殊的网络处理器芯片和特别优化的操作系统、TCP/IP协议栈,可以处理非常巨大的流量和SYN队列。
Sockstress相应原理:
放大攻击原理:攻击者向目标发送一个很小的流量,但是会造成产生的攻击流量是一个巨大的、成百上千倍上万倍流量被放大的一个效果,才适合作为一个拒绝服务攻击效果。(实现攻击者很小的流量打垮一个看似很大的被攻击者)
对于主题Sockstress主要作用即:建立了连接,但是不传数据,而且这个连接不会断开,占用资源,最后导致拒绝服务攻击
————————————————
Sockstress是2008年由Jack C. Louis发现的,其主要针对TCP服务的拒绝服务攻击
目的在于:消耗被攻击目标系统资源,但不消耗网络带宽资源,会产生大量TCP连接但不会产生大量流量;在与攻击目标建立大量socket链接;当完成三次握手、最后的ACK包window大小为0(客户端不接收数据)(再回数据的时候,客户端与服务器端都会各自相对方确认自己的空间大小,防止双方各自传送内容过大,主要是流控的作用)
对于攻击者的优势:
1、攻击者资源消耗小(CPU、内存、宽带)
2、异步攻击,单机可拒绝服务高配资源服务器
主要机理在于:window窗口实现的TCP流控(在第三次传送ACK包的时候出现)
:利用流控的攻击特性,造成攻击:攻击者将ACK包中的流控大小修改为0,然后促使ACK不停发向服务器,那么就会造成拒绝服务。在服务器看来就是客户端暂时没有空间来接受数据流量,所以服务器一直处于等待状态;但是攻击者只需要发完ACK包就行,不需要维持这么一个连接,所以对于攻击者就不会消耗巨量的CPU内存、带宽资源(以小搏大,放大)。
Sockstress防范
防御措施
-直到今天sockstress攻击仍然是一种很有效的DoS攻击方式 -甶于建立完整的TCP三步握手,因此使用syn cookie防御无效 -根本的防御方法是采用白名单(不实际)
-折中对策:限制单位时间内每IP建的TCP连接数
■封杀每30秒与80端口建立连接超过10个的IP地址
■iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
■ iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update -¬seconds 30 --hitcount 10 -j DROP
■以上规则对DDoS攻击无效
DNS放大攻击
■产生大流量的攻击方法
-单机的带宽优势
-巨大单机数量形成的流量汇聚
-利用协议特性实现放大效果的流量
■ DNS协议放大效果
-查询请求流量小,但响应流量可能非常巨大
-digANYhp.com @202.106.0.20 (流量放大约8倍)
■攻击原理
-伪造源地址为被攻击目标地址,向递归域名查询服务器发起查询
-DNS服务器成为流量放大和实施攻击者,大量DNS服务器实现DDoS
Scapy构造攻击数据包
IP/UDP/DNS/DNS查询内容
image.png
结合IP地址欺骗,利用大量DNS服务器做傀儡攻击目标