“拒绝服务”这个词来源于英文Denial of Service(简称DoS),它是一种简单的破坏性攻击,通常攻击者利用TCP/IP协议中的某个弱点,或者系统存在的某些漏洞,对目标系统发起大规模的进攻,致使攻击目标无法对合法的用户提供正常的服务。简单的说,拒绝服务攻击就是让攻击目标瘫痪的一种的攻击手段。
拒绝服务攻击可能是蓄意的,也可能是偶然的。当未被授权的用户过量使用资源时,攻击是蓄意的;当合法用户无意地操作而使得资源不可用时,则是偶然的。应该对两种拒绝服务攻击都采取预防措施。 但是拒绝服务攻击问题也一直得不到合理的解决,究其原因是因为这是由于网络协议本身的安全缺陷造成的。
DoS的攻击方式有很多种。最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,致使服务超载,无法响应其他的请求。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者向内的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多么快,内存容量多么大,互连网的速度多么快都无法避免这种攻击带来的后果。
传统上,攻击者所面临的主要问题是网络带宽,由较小的网络规模和较慢的网络速度, 无法使攻击者发出过多的请求。高带宽是大公司所拥有的,而以个人为主的黑客很难享用。为了克服这个缺点,恶意的攻击者开发了分布式的攻击。这样,攻击者就可以利用工具集合许多的网络带宽来对同一个目标发送大量的请求。
有两种拒绝服务攻击类型:
第一种是使一个系统或网络瘫痪。第二种攻击是向系统或网络发送大量信息使系统或网络不能响应。
这两种攻击既可以在本地机上进行也可以通过网络进行。
1、使一个系统或网络瘫痪
如果攻击者发送一些非法的数据或数据包,就可以使得系统死机或重新启动,那么攻击者就进行了一次拒绝服务攻击,因为没有人能够使用资源。以攻击者的角度来看,攻击的刺激之处在于可以只发送少量的数据包就使一个系统无法访问。在大多数情况下,系统重新上线需要管理员的干预。所以,第一种攻击是最具破坏力的,因为做一点点就可以破坏系统,而修复却需要人的干预。
2、使系统或网络不能响应
如果一个系统在一分钟之内只能处理10个数据包,攻击者却每分钟向它发送20个数据包,这时,当合法用户要连接系统时,用户将得不到访问权,因为系统资源已经不足。进行这种攻击时,攻击者必须连续地向系统发送数据包。当攻击者不向系统发送数据包时,攻击停止,系统也就恢复正常了。此攻击方法攻击者要耗费很多精力,因为他必须不断地发送数据。有时,这种攻击会使系统瘫痪,然而大多数情况下,恢复系统只需要少量人为干预。通过控制大量机器实现分布式拒绝服务攻击成为此类攻击方法的主要形式。
由于防范手段的加强,拒绝服务攻击手法也在不断的发展。传统的拒绝服务攻击只是一台机器向受害者发起攻击。然而在1999年8月,一种新型的攻击方式产生了,这就是DDoS(distributed Denial of Service attack,分布式拒绝服务攻击)。
之后这种攻击方法开始大行其道,成为黑客攻击的主流手段。Yahoo、eBay、CNN等众多知 站点相继被身份不明的黑客在短短几天内连续破坏,系统瘫痪达几个小时甚至几十个小时之久。
分布式拒绝服务攻击可以使得分散在互联网各处的机器共同完成对一台主机攻击的操作,从而使主机看起来好象是遭到了不同位置的许多主机的攻击。这些分散的机器由几台主控制机操作进行多种类型的攻击,如UDP flood, SYN flood等。
攻击者可以在多台机器上或与朋友合作,同时向一个目标主机或网络发起攻击。这时就不是仅仅一台主机而是几台主机进行攻击。这就使得防御变得困难,因为攻击者来自于范围广泛的IP地址,而且来自每台主机的少量的数据包有可能从入侵检测系统的眼皮下溜掉。
Ping是一个非常著名的程序,这个程序的目的是为了测试另一台主机是否可达。现在所有的操作系统上几乎都有这个程序,它已经成为系统的一部分。该程序发送一份ICMP回显请求报文给目的主机,并等待返回ICMP回显应答。根据回显应答的内容判断目的主机的状况。这就是我们为什么在测试是否能连接到一台主机采用的是Ping这台主机的原因。
Ping之所以会造成伤害是源于ICMP协议中的一个问题,ICMP协议的报文长度是固定的,大小为64KB。早期的很多操作系统在接收ICMP数据报文的时候,只开辟64KB的缓存区用于存放接收到的数据包。一旦发送过来的ICMP数据包的实际尺寸超过64KB(65536B),操作系统将收到的数据报文向缓存区填写时,报文长度大于64KB,就会产生一个缓存溢出,结果将导致TCP/IP协议堆栈的崩溃,造成主机的重启动或是死机。
Ping之所以能进行这样的攻击原因在于它本身就是一个用于发送ICMP协议的小程序,并且Ping程序有一个“-l”参数可指定发送数据包的尺寸, 因此,使用Ping这个常用小程序就可以简单地实现这种攻击。例如通过这样一个命令:Ping -l 65540 192.168.1.140
,如果对方主机存在这样一个漏洞,就会形成一次拒绝服务攻击。这种攻击被称为死亡之Ping。死亡之Ping是一种很古老的攻击了,现在的操作系统已经不会再有这样的漏洞了。并且很多操作系统中附带的Ping程序都已经被限制了发送数据包的大小(系统返回 Bad value)。
Ping Of Death攻击的攻击特征、检测方法和反攻击方法总结如下:
1、攻击特征:该攻击数据包大于65535个字节。由于部分操作系统接收到长度大于65535字节的数据包时,就会造成内存溢出、系统崩溃、重启、内核失败等后果,从而达到攻击的目的。
2、检测方法:判断数据包的大小是否大于65535个字节。
3、反攻击方法:使用新的补丁程序,当收到大于 65535个字节的数据包时,丢弃该数据包,并进行系统审计。
“泪滴”也被称为分片攻击,它是一种典型的利用TCP/IP协议的问题进行拒绝服务攻击的方式,由于第一个实现这种攻击的程序名称为Teardrop,所以这种攻击也被称为 “泪滴”。
网络中两台计算机在进行通信时,如果传输的数据量较大,无法在一个数据报文中传输完成,就会由TCP将数据拆分成多个分片,在传送到目的计算机后再到堆栈中进行重组。为了能在到达目标主机后进行将数据重组,IP包的TCP首部中包含有信息说明该分段是原数据的哪一段,这样,目标主机在收到数据后,就能根据首部中的信息将各分片还原为数据。
例如,从客户机向服务器发送一个数据报文无法发送完成的数据,这些数据会被分片发送。先发送TCP连接的三次握手报文,接着客户机向服务器发送三个数据报文,在这三个数据报文首部信息中,有每个报文的分片信息。
这就是报文重组的信息:
PSH 1:1025(1024) ack 1, win 4096
PSH 1025:2049(1024) ack 1, win 4096
PSH 2049:3073(1024) ack 1, win 4096
在这个报文中,可以看到在这三个报文中,第1个发送的数据报文中是原数据的第1~1025字节内容,第2个发送的报文包含的是第1025~2048字节,第3个数据报文是第2049~3073个字节,接着后面是继续发送的分片和服务器的确认。当这些分片数据被发送到目标主机后, 目标主机就能够根据报文中的信息将分片重组,还原出数据。
如果入侵者伪造数据报文,向服务器发送含有重叠偏移信息的分段包到目标主机,例如如下所列的分片信息:
PSH 1:1025(1024) ack1, win4096
PSH 1000:2049(1024) ack1, win4096
PSH 2049:3073(1024) ack1, win4096
这样的信息被目的主机收到后,在堆栈中重组时,由于畸形分片的存在,会导致重组出错,这个错误并不仅仅是影响到重组的数据,由于协议重组算法,会导致内存错误,引起协议栈的崩溃。
“泪滴”攻击特征、检测方法及反攻击方法总结如下:
1、攻击特征:Teardrop工作原理是向被攻击者发送多个分片的IP包,某些操作系统收到含有重叠偏移的伪造分片数据包时将会出现系统崩溃、重启等现象。
2、检测方法:对接收到的分片数据包进行分析, 计算数据包的偏移量(Offset)是否有误。
3、反攻击方法:添加系统补丁程序,丢弃收到的病态分片数据包并对这种攻击进行审计。
这种攻击利用RST位来实现。假设现在有一个合法用户(61.61.61.61)已经同服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为61.61.61.61,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为61.61.61.61发送的连接有错误,就会清空缓冲区中建立好的连接。这时,如果合法用户61.61.61.61再发送合法数据,服务器就已经没有这样的连接了,该用户就必须从新开始建立连接。攻击时,攻击者会伪造大量的IP地址,向目标发送RST数据,使服务器不对合法用户服务,从而实现了对受害服务器的拒绝服务攻击。
UDP“洪水”(UDP flood)主要是利用主机能自动进行回复的服务(例如使用UDP协议的chargen服务和echo服务)来进行攻击。
很多提供WWW和Mail等服务设备通常是使用Unix/Linux的服务器,它们默认打开一些被黑客恶意利用的UDP服务。如echo服务会显示接收到的每一个数据包,而原本作为测试功能的chargen服务会在收到每一个数据包时随机反馈一些字符。由于这两个服务的特性,当两个或两个以上系统存在这样的服务时,入侵者伪造其中一台主机向另一台主机的echo或者chargen服务端口发送数据,echo和chargen服务会对发送到服务端口的数据自动进行回复,这样开启echo和chargen服务的主机就会相互回复数据。这种做法使一方的输出成为另一方的输入,两台主机间会形成大量的UDP数据包。当多个系统之间互相产生UDP数据包时,最终将导致整个网络瘫痪。
SYN Flood是当前最流行的 DoS(拒绝服务攻击) 与 DDoS(Distributed Denial Of Service分布式拒绝服务攻击)方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。
SYN Flood拒绝服务攻击是通过三次握手实现的。TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的,这种情况下服务器端一般会重试,并等待一段时间后丢弃这个未完成的连接。 这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级。一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况(伪造IP地址),服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源。即使是简单的保存并遍历半连接列表也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。
实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃——既使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应,这种情况就称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。
SYN“洪水”的防御
1、缩短SYN Timeout时间
由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃该连接的时间,可以成倍的降低服务器的负荷。
2、设置SYN Cookie
就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃。
3、负反馈策略
正常情况下,OS对TCP连接的一些重要参数有一个常规的设置: SYN Timeout时间、SYN_x0002_ACK的重试次数、SYN报文从路由器到系统再到Winsock的延时等等。这个常规设置针对系统优化,可以给用户提供方便快捷的服务;一旦服务器受到攻击,SYN Half link 的数量超过系统中TCP活动Half link最大连接数的设置,系统将会认为自己受到了SYN Flood攻击,并将根据攻击的判断情况作出反应:减短SYN Timeout时间、减少SYN-ACK的重试次数、自动对缓冲区中的报文进行延时等等措施,力图将攻击危害减到最低。
4、退让策略
是基于SYN Flood攻击代码的一个缺陷:SYN Flood一旦攻击开始,将不会再进行域名解析。
切入点:假设一台服务器在受到SYN Flood攻击后迅速更换自己的IP地址,那么攻击者仍在不断攻击的只是一个空的IP地址,并没有任何主机,而防御方只要将DNS解析更改到新的IP地址就能在很短的时间内恢复用户通过域名进行的正常访问。为了迷惑攻击者,我们甚至可以放置一台“牺牲”服务器让攻击者满足于攻击的“效果” 。
5、分布式DNS负载均衡
在众多的负载均衡架构中,基于DNS解析的负载均衡本身就拥有对SYN Flood的免疫力。
基于DNS解析的负载均衡能将用户的请求分配到不同IP的服务器主机上,攻击者攻击的永远只是其中一台服务器,一来这样增加了攻击者的成本,二来过多的DNS请求可以帮助我们追查攻击者的真正踪迹。
6、防火墙
在防火墙设置了正确的规则后,可以识别SYN Flood攻击所采用的攻击方法,并将攻击包阻挡在外。
Land是因特网上最常见的拒绝服务攻击类型,是由著名黑客组织rootshell发现的。
原理很简单,向目标机发送大量的源地址和目标地址相同的包,造成目标机解析Land包时占用大量的系统资源,从而使网络功能完全瘫痪。
Land攻击也是利用TCP的三次握手过程的缺陷进行攻击。Land攻击是向目标主机发送一个特殊的SYN包,包中的源地址和目标地址都是目标主机的地址。目标主机收到这样的连接请求时会向自己发送SYN/ACK数据包,结果导致目标主机向自己发回ACK数据包并创建一个连接。大量的这样的数据包将使目标主机建立很多无效的连接,系统资源被大量的占用。
Land攻击可简要概括如下:
1、攻击特征:用于Land攻击的数据包中的源地址和目标地址是相同的。操作系统接收到这类数据包时,不知道该如何处理堆栈中的这种情况,或者循环发送和接收该数据包,消耗大量的系统资源,从而有可能造成系统崩溃或死机等现象。
2、检测方法:判断网络数据包的源/目标地址是否相同。
3、反攻击方法:适当配置防火墙设备或过滤路由器的过滤规则可以防止这种攻击行为,并对这种攻击进行审计。
Smurf攻击是以最初实现这种攻击方式的程序名Smurf来命名的。攻击方法利用IP欺骗和ICMP回复以引起目标主机网络阻塞而实现拒绝服务攻击。
一个简单的Smurf攻击原理:构造一个回复地址为受害主机广播地址的ICMP应答请求(ping)数据包来淹没受害主机。这将导致该网络的所有主机都对此ICMP应答请求作出答复,导致网络阻塞。它比ping of death洪水的流量高出1或2个数量级。
Fraggle攻击原理与Smurf一样,也是采用向广播地址发送数据包,利用广播地址的特性将攻击放大以使目标主机拒绝服务。不同的是,Fraggle使用的是UDP应答消息(端口7ECHO服务和端口19 Chargen服务)而非ICMP。
攻击者可以向子网广播地址发送源地址为受害网络或受害主机的UDP包,端口号用7或19 ,子网络启用了此功能的每个系统都会向受害者的主机作出响应从而引发大量的包,导致受害网络的阻塞或受害主机的崩溃。
Smurf和Fraggle都利用了反射的特性,这里我们所说的分布式反射拒绝服务攻击主要是利用TCP协议。
电子邮件炸弹是最古老的匿名攻击之一,由于这种攻击方式简单易用,互联网上也很容易找到这些发送匿名邮件的工具,并且入侵者只需要知道对方的电子邮件地址就可以进行攻击了。
1、传统的电子邮件炸弹只是简单的往你的邮箱里发送大量的邮件,入侵者的目的是要用垃圾邮件填满你的邮箱后,正常的邮件就会因空间不够而被服务器拒收。如果用户的邮箱使用空间不受限制,那么电子邮件炸弹攻击就有可能影响到服务器的正常工作了。最有可能的情况是入侵者不断发送大量的电子邮件,由于用户的邮箱空间不受限制,服务器会接收全部的邮件并保存在硬盘上。大量到来的邮件将不断吞噬服务器上的硬盘空间,最终将耗尽服务器上的所有硬盘空间,使得服务器无法再对外服务。
2、还有一种可能是通过设置一台机器不断地大量向同一地址发送电子邮件,入侵者能够耗尽接收者网络的带宽。电子邮件是通过SMTP协议进行发送的,最初的SMTP协议服务是不需要进行身份认证的,在发送电子邮件的过程中不对用户进行身份认证。SMTP不会进行认证,邮件的发送人可以伪造任何邮件地址,甚至可以不写发件人的信息。这就是能发送匿名邮件的原因。针对SMTP的问题,新的SMTP协议规范新增了2个命令,对发送邮件的发件人进行身份认证,在一定程度上降低了匿名电子邮件的风险。
畸形消息攻击是一种有针对性的攻击方式,它利用目标主机或者特定服务存在的安全漏洞进行攻击。目前无论是Windows、Unix、Linux等各类操作系统上的许多服务都存在安全漏洞,由于这些服务在处理信息之前没有进行适当正确的错误校验,所以一旦收到畸形的信息就有可能会崩溃。
这种攻击手法使web服务器或其他类型的服务器由于大量的网络传输而过载,一般这些网络流量是针对某一个页面或一个链接而产生的。
当然这种现象也会在访问量较大的网站上正常的发生,但一定要把这些正常现象和拒绝服务攻击区分开来。如果您的服务器突然变得拥挤不堪,甚至无法响应再多的请求时,您应当仔细检查一下这个资源匮乏的现象,确认在10000次点击里全都是合法用户进行的,还是由5000个合法用户和一个点击了5000次的攻击者进行的。
NetBIOS作为一种基本的网络资源访问接口,广泛的应用于文件共享,打印共享,进程间通信(IPC),以及不同操作系统之间的数据交换。为了在TCP/IP协议栈上实现NetBIOS,RFC规定了一系列交互标准,以及几个常用的TCP/UDP端口:
139:NetBIOS会话服务的TCP端口;
137:NetBIOS名字服务的UDP端口;
136:NetBIOS数据报服务的UDP端口。
WINDOWS操作系统的早期版本(WIN95/98/NT)的网络服务(文件共享等)都是建立在NetBIOS之上的,因此,这些操作系统都开放了139端口(最新版本的WINDOWS 2000/XP/2003等,为了兼容,也实现了NetBIOS over TCP/IP功能,开放了139端口)。
WinNuke攻击就是利用了WINDOWS操作系统的一个漏洞,向这个139端口发送一些携带TCP带外(OOB,out of band)数据报文,但这些攻击报文与正常携带OOB数据报文不同的是,其指针字段与数据的实际位置不符,即存在重合,这样WINDOWS操作系统在处理这些数据的时候,就会崩溃。
WinNuke攻击的特征、检测方法和反攻击方法概括如下:
1、攻击特征:WinNuke攻击又称带外传输攻击,它的特征是被攻击的目标端口通常是139、138、137、113、53,而且URG位设为“1”,即紧急模式。
2、检测方法:判断数据包目标端口是否为139、138、137等,并判断URG位是否为“1”。
3、反攻击方法:适当配置防火墙设备或过滤路由器就可以防止这种攻击手段(丢弃该数据包),并对这种攻击进行审计(记录事件发生的时间,源主机和目标主机的MAC地址和IP地址)
分布式拒绝服务DDoS (Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击,从而成倍地提高拒绝服务攻击的威力。
利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
在进行分布式拒绝服务攻击前,入侵者必须先控制大量的无关主机,并在这些机器上安装进行拒绝服务攻击的软件。互联网上充斥着安全措施较差的主机,这些主机存在系统漏洞或配置上的错误,可能是一些没有足够安全技术力量的小站点或者一些企业的服务器,入侵者轻易就能进入这些系统。
分布式拒绝服务攻击的软件一般分为客户端、服务端与守护程序,这些程序可以使协调分散在互联网各处的机器共同完成对一台主机攻击的操作,从而使主机遭到来自不同地方的许多主机的攻击。
客户端:也称攻击控制台,它是发起攻击的主机
服务端:也称攻击服务器,它接受客户端发来的控制命令
守护程序:也称攻击器、攻击代理,它直接(如SYN Flooding)或者间接(如反射式DDoS)与攻击目标进行通信
入侵者通过客户端软件向服务端软件发出攻击指令,服务端在接收到攻击指令后,控制守护进程向目标主机发动攻击。
采用三层结构的做法是确保入侵者的安全,一旦客户端发出指令后,客户端就能断开连接,由服务端指挥守护进程攻击。客户端连接和发送指令的时间很短,隐蔽性极强。入侵者先控制多台无关主机,在上面安装守护进程与服务端程序。当需要攻击时,入侵者从客户端连接到安装了服务端软件的主机上,发出攻击指令,服务端软件指挥守护进程同时向目标主机发动拒绝服务攻击。
通常情况下,服务端与守护进程间并不是一一对应的关系,而是多对多的关系。也就是说,一个安装了守护进程的主机可以被多个服务端所控制,一个服务端软件也同时控制多个守护进程。
DDoS攻击过程主要有两个步骤:攻占代理主机和向目标发起攻击。具体说来可分为以下几个步骤:
1、探测扫描大量主机以寻找可入侵主机;
2、入侵有安全漏洞的主机并获取控制权;
3、在每台被入侵主机中安装攻击所用的客户进程或守护进程;
4、向安装有客户进程的主控端主机发出命令,由它们来控制代理主机上的守护进程进行协同入侵。
被DDoS攻击时的现象
1、被攻击主机上有大量等待的TCP连接;
2、网络中充斥着大量的无用的数据包,源地址为假;
3、制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯;
4、利用受害主机提供的服务或传输协议上的缺陷,反复高速的发出特定的服务请求,使受害主机无法及时处理所有正常请求;
5、严重时会造成系统死机。
DDoS攻击对Web站点的影响
1、当对一个Web站点执行 DDoS 攻击时,这个站点的一个或多个Web服务会接到非常多的请求,最终使它无法再正常使用。
2、在一个DDoS攻击期间,如果有一个不知情的用户发出了正常的页面请求,这个请求会完全失败,或者是页面下载速度变得极其缓慢,看起来就是站点无法使用。
TFN(Tribe Flood Network)是德国著名黑客Mixter编写的分布式拒绝服务攻击的攻击工具,它是一个典型的分布式拒绝服务攻击的工具。TFN由服务端程序和守护程序组成,能实施ICMP flood、SYN flood、UDP flood和Smurf等多种拒绝服务攻击。其在 Linux、Windows上都能运行,当服务端控制守护进程发动攻击时,可以定制通信使用的协议,TFN2K目前可以使用TCP、UDP、ICMP三种协议中的任何一种。
服务端向守护进程发送的控制指令,守护进程是不会进行回复。由于这一特点,网络中的TFN2K的隐蔽性更强,检测更加困难,因为服务端可以将命令的数据报文的源地址信息进行伪造。
TFN2K所有命令都经过了CAST-256算法(RFC2612)加密。加密关键字在程序编译时定义,并作为TFN2K客户端程序的口令。并且所有加密数据在发送前都被编码(Base64)成可打印的ASCII字符。TFN2K守护程序接收数据包并解密数据。
为保护自身,守护进程还能通过修改进程名方式来欺骗管理员,掩饰自己的真正身份。总之,TFN2K采用的单向通信、随机使用通信协议、通信数据加密等多种技术以保护自身,使得实时检测TFN2K更加困难。
TFN2K有一个独特的设计,在每一个数据包后面填充了16个零(0x00),这样做的目的是为了使数据包的长度不固定,欺骗某些防火墙或者入侵检测系统。然而,这项独特的设计也成为了TFN2K 的弱点。TFN2K的数据包后面填充的零(0x00)在经过Base64编码后就变成了A(0x41)。这样,尾部的数据包就成为了TFN2K的特征。当然这并不是说检测到尾部有0x41的数据包就认为网络存在TFN2K,不过,如果在网络中大量捕获到这种类型的数据包的时候,管理员就该好好检查网络中的主机了。
另一种对TFN2K的检测的方法是采用病毒检测的通用做法,采用特征码。虽然TFN2K服务端和守护进程的文件名可以随意修改,但是程序中必然存在不会改变的特征字符串,这个不会改变的字符串就是程序的特征码,检查系统中是否存在有这样特征码的程序就能发现系统中存在的TFN2K。
TFN2K的抵御方法有:
1、加固系统和网络,以防系统被当做DDoS主机。
2、在边界路由器上设置出口过滤,这样做的原因是或许不是所有的TFN2K源地址都用内部网络地址进行伪装。
3、请求上游供应商配置入口过滤。
Trinoo也是一种比较常见的分布式拒绝服务攻击,Trinoo与TFN2K相比,虽然在很多方面都略逊一筹,但从总体上来说,Trinoo还是一个非常不错的分布式拒绝服务攻击工具。它是一个典型的分布式拒绝服务攻击软件,由两部分组成,服务端和守护进程,而没有专门的客户端软件,客户端软件可以使用通用的如Telnet来代替。
Trinoo的守护进程NC在编译时就将安装有服务程序的主机IP地址包含在内,这样,守护进程NC一旦运行起来,就会自动检测本机的IP地址,并将本机的IP地址发送到预先知道的服务器的31335端口(服务器开启31335UDP端口接收守护进程)。同时,守护进程也在本机打开一个27444的UDP端口等待服务器端过来的命令。
Trinoo的服务器端在收到守护进程发回来的IP地址后,就明白已有一个守护进程准备完毕,可以发送指控命令了。主服务器会一直记录并维护一个已激活守护程序的主机清单。
Trinooo的所有连接都需要口令,连接的口令是编译时就指定的,缺省情况下服务端连接守护进程的口令是“144adsl”,而客户端连接到服务端的口令是“beta almostdone”。不过口令在进行验证时是明文进行传送的。
Trinoo另一个比较有特色的设计是,当客户端连接到服务端时,如果还有其他的连接建立,Trinoo会将一个包含连接IP地址的报警信息发送到已连接的主机。这样,入侵者在控制服务端发动攻击时,还能掌握系统上的用户动向,确保Trinoo客户端的安全。
在master程序(服务端)与代理程序(守护程序)的所有通讯中,Trinoo都使用了UDP协议。入侵检测软件能够寻找使用UDP协议的数据流(类型17)。
Trinoo master程序的监听端口是27655,攻击者一般借助telnet通过TCP连接到master程序所在计算机。入侵检测软件能够搜索到使用TCP (类型6)并连接到端口27655上的数据流。
所有从master程序到代理程序的通讯都包含字符串"l44",并且被引导到代理的UDP 端口27444。入侵检测软件检查到UDP 端口27444的连接,如果有包含字符串l44的信息包被发送过去,那么接受这个信息包的计算机可能就是DDoS代理。
Master和代理之间的通讯受到口令的保护,但是口令不是以加密格式发送的,因此它可以被“嗅探”到并被检测出来。使用这个口令以及Dave Dittrich编写的Trinot脚本,要准确地验证出Trinoo代理的存在是很可能的。
Stacheldraht 也是一个分布式拒绝服务攻击,它很多方面类似于Trinoo和TFN,能发动ICMP Flood、SYN Flood、UDP Flood和Smurf等多种攻击。它的主要特色是能进行自动更新。Stacheldraht跟TFN和trinoo一样也是基于客户机/服务器模式,其中Master程序与潜在的成千个代理程序进行通讯。在发动攻击时,入侵者与master程序进行连接。Stacheldraht增加了以下新功能:攻击者与master程序之间的通讯是加密的,以及使用rcp (remote copy,远程复制)技术对代理程序进行更新。Stacheldraht同TFN一样,可以并行发动数不胜数的DoS攻击,类型多种多样,而且还可建立带有伪装源IP地址的信息包。Stacheldraht所发动的攻击包括UDP洪水、TCP SYN洪水、ICMP回应洪水攻击。
特征1:在发动Stacheldraht攻击时,攻击者访问master程序,向它发送一个或多个攻击目标的IP地址。Master程序再继续与所有代理程序进行通讯,指示它们发动攻击。
防御:Stacheldraht master程序与代理程序之间的通讯主要是由ICMP 回音和回音应答信息包来完成的。配置路由器或入侵检测系统,不允许一切ICMP回音和回音应答信息包进入网络,这样可以挫败Stacheldraht代理。但是这样会影响所有要使用这些功能的Internet程序,例如ping。
特征2:代理程序要读取一个包含有效master程序的IP地址列表。代理会试图与列表上所有的master程序进行联系。如果联系成功,代理程序就会进行一个测试,以确定它被安装到的系统是否会允许它改变“伪造”信息包的源地址。
防御:通过配置入侵检测系统或使用嗅探器来搜寻它们的签名信息,可以探测出这两个行为。
特征2.1:代理会向每个master发送一个ICMP回音应答信息包,其中有一个ID域包含值666,一个数据域包含字符串“skillz”。如果master收到了这个信息包,它会以一个包含值667的ID 域和一个包含字符串“ficken”的数据域来应答。代理和master通过交换这些信息包来实现周期性的基本接触。
防御:通过对这些信息包的监控,可以探测出Stacheldraht。
特征2.2:一旦代理找到了一个有效master程序,它会向master发送一个ICMP信息包,其中有一个伪造的源地址,这是在执行一个伪造测试。这个假地址是“3.3.3.3”。如果master收到了这个伪造地址,在它的应答中,用ICMP信息包数据域中的“spoofworks”字符串来确认伪造的源地址是奏效的。
防御:通过监控这些值,也可以将Stacheldraht检测出来。
特征3:Stacheldraht代理并不检查 ICMP 回音应答信息包来自哪里,因此就有可能伪造 ICMP 信息包将其排除。
特征4:Stacheldraht代理程序与TFN 和trinoo一样,都可以用一个C程序DDoS_scan来探测。
1、不容易定位攻击者的位置
Internet上绝大多数网络都不限制源地址,也就是伪造源地址非常容易;
通过攻击代理的攻击,只能找到攻击代理的位置;
各种反射式攻击,无法定位源攻击者。
2、完全阻止是不可能的,但是防范工作可以减少被攻击的机会
1、有效完善的设计
一个站点越完善,它的状况会越好。如果公司有一个运行关键任务的Web站点,用户必须连接到Internet,但是与路由器之间只有一条单一的连接,服务器运行在一台单一的计算机上,这样的设计就不是完善的。
这种情况下,攻击者对路由器或服务器进行DoS攻击,使运行关键任务的应用程序被迫离线。理想情况下,公司不仅要有多条与Internet的连接,最好有不同地理区域的连接。公司的服务位置越分散,IP地址越分散,攻击同时寻找与定位所有计算机的难度就越大。
2、带宽限制
当DoS攻击发生时,针对单个协议的攻击会损耗公司的带宽,以致拒绝合法用户的服务。例如,如果攻击者向端口25发送洪水般的数据,攻击者会消耗掉所有带宽,所以试图连接端口80的用户被拒绝服务。
一种防范方法是限制基于协议的带宽。例如,端口25只能使用25%的带宽,端口80只能使用50%的带宽。
3、及时给系统安装补丁
当新的DoS攻击出现并攻击计算机时,厂商一般会很快确定问题并发布补丁。如果一个公司关注最新的补丁,同时及时安装,这样被DoS攻击的机会就会减少。
这些措施并不能阻止DoS攻击耗尽公司的资源。还有在安装补丁之前,先要对其进行测试。即使厂商声明它可以弥补DoS漏洞,这并不意味着不会产生新的问题。
4、运行尽可能少的服务
运行尽可能少的服务可以减少被攻击成功的机会。如果一台计算机开了20个端口,这就使得攻击者可以在大的范围内尝试对每个端口进行不同的攻击。相反,如果系统只开了两个端口,这就限制了攻击者攻击站点的攻击类型。
另外,当运行的服务和开放的端口都很少时,管理员可以容易的设置安全,因为要监听和担心的事情都很少了。
5、只允许必要的通信
这一防御机制与上一个标准“运行尽可能少的服务”很相似,不过它侧重于周边环境,主要是防火墙和路由器。关键是不仅要对系统实施最少权限原则,对网络也要实施最少权限原则。确保防火墙只允许必要的通信出入网络。
许多公司只过滤进入通信,而对向外的通信不采取任何措施。这两种通信都应该过滤。
6、封锁敌意IP地址
当一个公司知道自己受到攻击时,应该马上确定发起攻击的IP地址,并在其外部路由器上封锁此IP地址。这样做的问题是,即使在外部路由器上封锁了这些IP地址,路由器仍然会因为数据量太多而拥塞,导致合法用户被拒绝对其他系统或网络的访问。
因此,一旦公司受到攻击应立刻通知其ISP和上游提供商封锁敌方数据包。因为ISP拥有较大的带宽和多点的访问,如果他们封锁了敌意通信,仍然可以保持合法用户的通信,也可以恢复遭受攻击公司的连接。
许多人或工具在监测分布式拒绝服务攻击时常犯的错误是只搜索那些DDoS工具的缺省特征字符串、缺省端口、缺省口令等。人们必须着重观察分析DDoS网络通讯的普遍特征,不管是明显的,还是模糊的。使用网络入侵监测系统(NIDS),根据异常现象在网络入侵监测系统上建立相应规则,能够较准确地监测出DDoS攻击。实际上,DDoS的唯一检测方式是:异常的网络交通流量。
下面将分别介绍5种异常模式及相应的解决办法。
1、根据分析,攻击者在进行DDoS攻击前总要解析目标的主机名。BIND域名服务器能够记录这些请求。由于每台攻击服务器在进行一个攻击前会发出PTR反向查询请求,也就是说在DDoS攻击前域名服务器会接收到大量的反向解析目标IP主机名的PTR查询请求。
2、当DDoS攻击一个站点时,会出现明显超出该网络正常工作时的极限通讯流量的现象。现在的技术能够分别对不同的源地址计算出对应的极限值。当明显超出此极限值时就表明存在DDoS攻击的通讯。因此可以在主干路由器端建立ACL访问控制规则以监测和过滤这些通讯。
3、特大型的ICMP和UDP数据包。正常的UDP会话一般都使用小的UDP包,通常有效数据内容不超过10字节。正常的ICMP消息也不会超过64到128字节。那些明显大得多的数据包很有可能就是控制信息通讯用的,主要含有加密后的目标地址和一些命令选项。一旦捕获到(没有经过伪造的)控制信息通讯,DDoS服务器的位置就无所遁形了,因为控制信息通讯数据包的目标地址是没有伪造的。
4、不属于正常连接通讯的TCP和UDP数据包。隐蔽的DDoS工具随机使用多种通讯协议通过基于无连接通道发送数据。优秀的防火墙和路由规则能够发现这些数据包。另外,那些连接到高于1024而且不属于常用网络服务的目标端口的数据包也是非常值得怀疑的。
5、数据段内容只包含文字和数字字符(例如,没有空格、标点和控制字符)的数据包。这往往是数据经过BASE64编码后而只会含有base64字符集字符的特征。TFN2K发送的控制信息数据包就是这种类型的数据包。TFN2K(及其变种)的特征模式是在数据段中有一串A字符(AAA……),这是经过调整数据段大小和加密算法后的结果。如果没有使用BASE64编码,对于使用了加密算法数据包,这个连续的字符就是“\0”。
分布式拒绝服务攻击给网络经济造成的损失将越来越严重。虽然还没有很好的措施来彻底解决分布式拒绝服务攻击问题,但下面有一些措施能降低系统受到拒绝服务攻击的危害:
1、保持网络安全
本质上,如果攻击者无法获得网络的访问权,无法攻克一台主机,他就无法在系统上安装DDoS服务器。要使一个系统成为服务器,首先要以某种手段攻克它。如果周边环境不会被突破,系统能够保持安全,那么一个公司的计算机系统就不会被用于攻击其他系统。
2、安装入侵检测系统
如果单位的网络连接到了Internet,要阻止所有的攻击是不可能的,总有一些攻击会突破防线。因此,能否尽可能快地探测到攻击是非常关键的。以DDoS的角度来看,单位越快探测到系统被入侵或服务器被用来进行攻击,该单位的网络状况越好。
所有这些的关键是使用入侵检测系统(IDS)。
有两种常用的IDS:基于网络的和基于主机的。
基于网络的IDS是网络上被动的设备,负责嗅探通过给定网段的所有数据包。通过查看数据包,查找显示可能的攻击的签名并对可疑行为发出警报。
基于主机的IDS运行在一台独立的服务器上,并经常查看审计日志以查找可能的攻击信息。
正如有两种类型IDS一样,也有两种构建IDS的技术:样式匹配和不规则探测。
样式匹配技术有一个关于已知攻击特征的数据库。当它找到与给定样式相同的数据包时就发出警报。
不规则探测系统决定什么是网络的正常通信,任何不符合这一规则的通信都被标为可疑的。
可以想象,基于不规则探测的系统实现起来十分困难,因为对于一个公司正常的通信对于另一个公司则是不正常的。因此大多数入侵检测系统都是基于样式匹配技术的。
3、使用扫描工具
由于许多公司网络安全措施都进行得很慢,它们的网络可能已经被攻克并用作了DDoS服务器,因此要扫描这些网络查找DDoS服务器并尽可能的把它们从系统中关闭删除。一些工具可以做到这些,而且大多数商业的漏洞扫描程序都能检测到系统是否被用作DDoS服务器。
4、运行zombie工具
一个公司无法检测是否被用作服务器,只有当攻击发生时才能检测到。这种情况下,网络IDS会注意到大量的通信并注明出现了问题。这时可以使用Zombie Zapper使系统从数据包风暴中解脱出来。对于UNIX和Windows系统各有一个Zombie Zapper版本,现在可防范Trinoo、TFN和Stacheldraht等。
利用总结出的若干拒绝服务攻击数据包的特征,可以进行拒绝服务监控系统的设计,建立网络通信中异常现象的模式库,把实时采集网络数据包与模式库进行模式匹配,得到监控结果。
监控系统结构一般设计如下图。
上图中,采集器用来收集网络通信信息,并向分析单元提供分析所需的数据,同时还能接收分析单元的指令,进一步采集分析单元所需的特定信息。分析单元可以采用人工神经元网络对网络采集信息和模式库进行模式匹配得出分析报告,同时定期进行自学习,更新模式库,及时跟踪并反映拒绝服务攻击模式的最新动态。
无论是DoS还是DDoS攻击,其目的是使受害主机或网络无法及时接收并处理外界请求,表现为:
1、制造大流量无用数据,造成通往被攻击主机的网络拥塞,使被攻击主机无法正常和外界通信。
2、利用被攻击主机提供服务或传输协议上处理重复连接的缺陷,反复高频的发出攻击性的重复服务请求,使被攻击主机无法及时处理其它正常的请求。
3、利用被攻击主机所提供服务程序或传输协议的本身的实现缺陷,反复发送畸形的攻击数据引发系统错误的分配大量系统资源,使主机处于挂起状态。
DoS/DDoS攻击是很有效的攻击方式,必须注意防范这种攻击