前几天刚学到了TCP Chargen DoS攻击
RFC0864中定义了chargen之服务,其UDP/TCP皆使用Port 19. UDP chargen server若收到
一个封包,就会回一个封包回去;而TCP chargen server若发现与client的连线存在,就会
不断的发送封包给client
UDP chargen范例:
[ccbsd7]/u/gcp/88/8817537 > echo "hello"│nc -u CHARGEN_SERVER 19
$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghi
?
TCP chargen范例:
[ccbsd7]/u/gcp/88/8817537 > telnet CHARGEN_SERVER 19
Trying 140.0.0.0…
Connected to haydn.ntu.edu.tw.
Escape character is ‘^]’.
!"#KaTeX parse error: Expected 'EOF', got '#' at position 71: …\]^_`abcdefg !"#̲%&’()+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefgh "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
abcdefghi
#$%&’()+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghij $%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
abcdefghijk
%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijkl &'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
abcdefghijklm
'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_abcdefghijklmn ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
abcdefghijklmno
C]
telnet> c
Connection closed.
传统上,UDP chargen常被用来做为DDoS中放大网路流量之用.但是,其实TCP的chargen
也可拿来使用DoS之用,而且对於网路造成的影响更大.
攻击法:
使得Client端(如Outlook/Browser)连接一个URL,其中为有提供chargen/TCP的主机
http://CHARGEN_HOST:19/
攻击范例:
在html里置放自动会Load(使用Java/Script)之http://CHARGEN_HOST:19/之URL,则
此主机就会疯狂的透过http proxy server(如果此web browser有设定http proxy)
向CHARGEN_HOST主机抓取大量的资料.而CHARGEN_HOST可以由恶意程式中自动指定
或者使用Scanning技术来设定
原理:
当client连往port 19的TCP/chargen服务,主机就会回传大量的资料
再配合包装成http的型式,就可以让browser收到大量的封包而消耗大量的记忆体
攻击强度:
1)win2000的client端IE,每秒钟会被消耗超过1MB的Virtual Memory,也就是过了数百秒之後
此client就呈现反应迟钝,VM都被用光,然後Win2000会增大VM的大小,就会将C槽整个占满
在实际的测试中,会造成win2000无法进行图形的列印(因为无暂存磁碟空间)
2)client所使用的proxy也会被拖垮
3)可以搭配其它种的client端攻击使用
测试方法
若主机的Port 19有开启,则此主机可用来配合此种攻击
解决方法:
请关闭chargen服务或使用封包过滤器防火墙将Port 19封包过虑
(以上转载自http://netsecurity.51cto.com/art/200511/11964.htm)
看完这些以后想自己再回顾一下DDOS,所以自己做了以下整理。
将正常的请求放大若干倍,通过若干个网络节点同时发起攻击,以达成规模效应。
SYN-Flood不会完成TCP三次握手的第三步,也就是不发送确认连接的信息给服务器。这样,服务器无法完成第三次握手,但服务器不会立即放弃,服务器会不停的重试并等待一定的时间后放弃这个未完成的连接,这段时间叫做SYN timeout,这段时间大约30秒-2分钟左右。若是一个用户在连接时出现问题导致服务器的一个线程等待1分钟并不是什么大不了的问题,但是若有人用特殊的软件大量模拟这种情况,那后果就可想而知了。一个服务器若是处理这些大量的半连接信息而消耗大量的系统资源和网络带宽,这样服务器就不会再有空余去处理普通用户的正常请求(因为客户的正常请求比率很小)。这样这个服务器就无法工作了,这种攻击就叫做:SYN-Flood攻击。
以下补充一下TCP三次握手
TCP三次握手
(1)第一次握手:建立连接时,客户端A发送SYN包[SYN=1,seq=x]到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN,同时自己也发送一个SYN包,即SYN+ACK包[SYN=1,ACK=1,seq=y,ack=x+1],此时服务器B进入SYN_RECV状态。
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK[ACK=1,seq=x+1,ack=y+1],此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
UDP Flood是日渐猖厥的流量型DoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。100k pps的UDP Flood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDP FLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。
突然想说一下UDP和TCP的区别:
(1)TCP是基于连接的,UDP是无连接的
(2)TCP要求系统资源较多,UDP较少
(3)UDP程序结构相对来说较简单
(4)流模式(TCP)与数据报模式(UDP)
(5)TCP保证数据正确性,UDP可能丢包
(6)TCP保证数据顺序,UDP不保证
ICMP协议
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP flood
足够快的数据包速度+足够的带宽,这才是洪水。
ping.exe和IcmpSendEcho速度慢的另一个原因是它们必须等待目标主机返回REPLY信息,这个过程需要花费大量时间,而Flood——
洪水,顾名思义,是速度极快的,当一个程序发送数据包的速度达到了每秒1000个以上,它的性质就成了洪水产生器,洪水数据是从洪水产生器里出来的,但这样还不够,没有足够的带宽,再猛的洪水也只能像公路塞车那样慢慢移动,成了鸡肋。要做真正的洪水,就需要有一条足够宽的高速公路才可以.由于ping.exe无法提速,这就需要专门的工具来做洪水了。
这是一种两败俱伤的方式,实际上,你展开洪水攻击时,攻击程序在消耗对方带宽和资源时,也在消耗你的带宽和资源。这只是个看谁撑得住的攻击而已。实际上,有经验的攻击者都是用被控制的服务器(肉鸡)来代替自己的机器发动攻击的。