一、从DoS到DDoS
拒绝服务(Denial of Service,DoS)由来已久。自从有了Inte.net,就有了拒绝服务式攻击方法。由于过去没有大型网站或机构受到过这种攻击,其劣性并不突出。直到2000年初,Yahoo!、eBay及Amazon等遭其暗算,它才露出庐山真面目。
在典型的Internet连接中,用户访问一个网站时,客户端会先向网站服务器发送一条信息要求建立连接,只有当服务器确认该请求合法,并将访问许可返回给用户时,用户才可对该服务器进行访问。DoS攻击的方法是,恶意用户会向服务器发送多个连接请求,使其呈满负载状态,并且将所有请求的返回地址进行伪造。这样,在服务器企图将认证结构返回给用户时,它将无法找到这些用户。此时,服务器只好等待,有时可能会等上1分钟才关闭此连接。可怕的是,在服务器关闭连接后,攻击者又会发送新的一批虚假请求,重复上一次过程,直到服务器因过载而拒绝提供服务。这些攻击事件并没有入侵网站,也没有篡改或是破坏资料,只是利用程序在瞬间产生大量的网络封包,让对方的网络及主机瘫痪,使正常使用者无法获得主机及时的服务。
然而,年初攻击Yahoo!的元凶还不是简单的DoS,虽然与DoS攻击一样,也是向被攻击目标连续发送大量伪造的IP包,以导致服务器不能为合法用户提供正常服务(比如此次给Yahoo!站点路由器发出的无效请求高达1GB/s),但是它区别于DoS的“绝妙”之处在于: 动员了大量“无辜”的计算机向目标共同发起进攻,采用了分布式拒绝服务(Distributed Denial of Service,DDoS)攻击手段。
DDoS把DoS又向前发展了一步,DDoS的行为更为自动化,它可以方便地协调从多台计算机上启动的进程,让一股DoS洪流冲击网络,并使网络因过载而崩溃。确切地讲,DDoS攻击是指在不同的高带宽主机上安装大量的DoS服务程序,它们等待来自中央客户端的命令,中央客户端随后通知全体受控服务程序,并批示它们对一个特定目标发送尽可能多的网络访问请求。作为攻击者,必须通过telnet连接到他想利用的每一台远程主机上,并以用户身份登录,然后手工输入命令,启动每一台主机向攻击目标发送海量信息流。
DDoS与DoS的最大区别是人多力量大。原来的DoS是一台机器攻击目标,现在的DDoS是很多台机器利用他们的高带宽攻击目标,更容易将目标网站攻掉。除此之外,DDoS攻击方式较为自动化,攻击者可以把他的程序安装到网络中的多台机器上,所采用的攻击工具致使被攻击对象难以察觉,只要攻击者发下攻击命令,这些机器便发起进攻。
二、DoS的攻击方法
对DoS而言,其攻击方式很多,主要使用的攻击有3种,分别是TCP-SYN flood、UDP flood和ICMP flood。
当用户进行一次标准的TCP连接时,会有一个3次握手过程。首先是请求服务方发送一个SYN消息,服务方收到SYN后,会向请求方回送一个SYN-ACK表示确认,当请求方收到SYN-ACK后,再次向服务方发送一个ACK消息,这样,一次TCP连接建立成功。但是TCP-SYN flood在实现过程中只进行前2个步骤:当服务方收到请求方的SYN-ACK确认消息后,请求方由于采用源地址欺骗等手段使得服务方收不到ACK回应,于是,服务方会在一定时间处于等待接收请求方ACK消息的状态。对于某台服务器来说,可用的TCP连接是有限的,如果恶意攻击方快速连续地发送此类连接请求,该服务器可用的TCP连接队列将很快被阻塞,系统可用资源急剧减少,网络可用带宽迅速缩小,长此下去,网络将无法向用户提供正常的服务。
由于UDP(用户数据包协议)在网络中的应用比较广泛,基于UDP攻击种类也较多。如今在Internet上提供WWW和Mail等服务设备通常是使用Unix的服务器,它们默认一些被恶意利用的UDP服务,如echo和chargen服务,它会显示接收到的每一个数据包,而原本作为测试功能的chargen服务会在收到每一个数据包时随机反馈一些字符,如果恶意攻击者将这2个UDP服务互指,则网络可用带宽将很快耗尽。
三、DDoS的攻击方法
目前,我们知道的对网络进行DDoS攻击所使用的工具有:Trinoo、Tribe Flood Network(TFN)、TFN2k和Stacheldraht等。它们的攻击思路基本相近。
1.Trinoo:它是基于UDP flood的攻击软件,它向被攻击目标主机的随机端口发出全零的4字节UDP包,在处理这些超出其处理能力垃圾数据包的过程中,被攻击主机的网络性能不断下降,直到不能提供正常服务,乃至崩溃。它对IP地址不做假,此攻击方法用得不多。
2.TFN:它是利用ICMP给代理服务器下命令,其来源可以做假。它可以发动SYN flood、UDP flood、ICMP flood及Smurf(利用多台服务器发出海量数据包,实施DoS攻击)等攻击。TFN的升级版TFN2k的特点是:对命令数据包加密、更难查询命令内容、命令来源可以做假,还有一个后门控制代理服务器。
3.Stacheldraht:对命令来源做假,而且可以防范一些路由器用RFC2267过滤。若检查出有过滤现象,它将只做假IP地址最后8位,从而让用户无法了解到底是哪几个网段的哪台机器被攻击。此外,它还具有自动更新功能,可随软件的更新而自动更新。
值得一提的是,像Trinoo和TFN等攻击软件都是可以从网上随意找到的公开软件,所以任何一个上网者都可能构成网络安全的潜在威胁。面对凶多吉少的DDoS险滩,我们该如何对付随时出现的黑客攻击呢?杨宁先生说,那要看用户处于何种状态,是正身处被攻击的困围中,还是准备事先预防。
四、怎样对付正在进行的攻击
如果用户正在遭受攻击,他所能做的抵御工作非常有限。因为在原本没有准备好的情况下有大流量的灾难性攻击冲向用户,很可能用户在还没回过神之际,网络已经瘫痪。但是,用户还是可以抓住机会寻求一线希望的。
首先,检查攻击来源,通常黑客会通过很多假的IP地址发起攻击,此时,用户若能够分辨出哪些是真IP地址,哪些是假IP地址,然后了解这些IP来自哪些网段,再找网段管理员把机器关掉,即可消除攻击。
其次,找出攻击者所经过的路由,把攻击屏蔽掉。比如黑客发射SNP包,用户可把此包过滤掉。若黑客从某些端口发动攻击,用户可把这些端口屏蔽掉,以狙击入侵。
最后一种比较折衷的方法是在路由器上滤掉ICMP(Internet Control Message Protocol)和UDP。ICMP用于提交错误和改变控制信息,常用来判断网络的连通性。
五、如何事先预防攻击
其实,很多攻击方法并不新,存在时间也很长了(就像DoS),基本上人们对它们已经有所了解,只是当它被有恶意的人利用,破坏网络安全,人们才意识到问题的严重性。因此,人们应充分重视建立完善的安全系统,防患于未然。在具体工作中,我们不妨从以下一些方面预防黑客攻击。
1.用足够的机器承受黑客攻击。这是一种较为理想的应对策略。如果用户拥有足够的容量和足够的资源给黑客攻击,在它不断访问用户、夺取用户资源之时,自己的能量也在逐渐耗失,或许未等用户被攻死,黑客已无力支招儿。
2.充分利用网络设备保护网络资源。所谓网络设备是指路由器、防火墙等负载均衡设备,它们可将网络有效地保护起来。当Yahoo!被攻击时最先死掉的是路由器,但其他机器没有死。死掉的路由器经重启后会恢复正常,而且启动起来还很快,没有什么损失。若其他服务器死掉,其中的数据会丢失,而且重启服务器又是一个漫长的过程,相信没有路由器这道屏障,Yahoo!会受到无法估量的重创。
3.使用Inexpress、Express Forwarding过滤不必要的服务和端口,即在路由器上过滤假IP。比如Cisco公司的CEF(Cisco Express Forwarding)可以针对封包 Source IP 和 Routing Table 做比较,并加以过滤。
4.使用Unicast Reverse Path Forwarding检查访问者的来源。它通过反向路由表查询的方法检查访问者的IP地址是否是真,如果是假的,它将予以屏蔽。许多黑客攻击常采用假IP地址方式迷惑用户,很难查出它来自何处,因此,利用Unicast Reverse Path Forwarding可减少假IP地址的出现,有助于提高网络安全性。
5.过滤所有RFC1918 IP地址。RFC1918 IP地址是内部网的IP地址,像10.0.0.0、192.168.0.0和172.16.0.0,它们不是某个网段的固定IP地址,而是Internet内部保留的区域性IP地址,应该把它们过滤掉。
6.限制SYN/ICMP流量。用户应在路由器上配置SYN/ICMP的最大流量来限制 SYN/ICMP 封包所能占有的最高频宽,这样,当出现大量的超过所限定的SYN/ICMP流量时,说明不是正常的网络访问,而是有黑客入侵。
六、几点忠告
DDoS给著名网站带来巨大灾难的同时,也给人们再次敲响了警钟,作为网络用户,特别是负责网络安全的管理员、决策者,应该怎样维护好网络安全呢?
1.一个企业必须有专人负责其网络安全,至少有一个人全权进行系统安全维护,他应该对企业网络中的所有机器进行检查,以减少漏洞。
2.作为专门负责网络安全的管理员,必须对攻击方法了如指掌,换句话说,他要了解黑客是怎么工作的,只有这样,他才能保护好自己的机器。甚至负责人可在局域网中模仿黑客,“入侵”自己的系统,以发现网络漏洞,及时补漏。
3.网络安全管理员应该尽职尽责,仔细认真。在已发生的黑客攻击中,相当一部分事件是因为管理员工作疏忽造成的。
4.严格控制密码,提高密码保险性。在网络中,有些密码设置得较易被破获,因此应尽量减少知道密码的人数,分别给不同的人设定不同的使用权限。
5.选择一款优秀的防黑安全产品。即配备监测工具,不断提高对系统的认识。无论是从网上下载公开源代码的监测工具,还是购买网络监测工具,都要实时监测别人是否在扫描自己的端口。若有人扫描端口,意味着有人可能要攻击此网络。