DoS
(Denial of Service, 拒绝服务)是指阻止或拒绝合法使用者存取网络服务器。造成DoS 的攻击行为被称为DoS攻击,将大量的非法申请封包传送给指定的目标主机,其目的是完全消耗目标主机资源,使计算机或网络无法提供正常的服务。
DoS攻击的原理
是借助网络系统或协议的缺陷,以及配置漏洞进行网络攻击,使网络拥塞、系统资源耗尽或系统应用死锁,妨碍目标主机和网络系统对正常用户服务请求的及时响应,造成服务的性能受损,甚至导致服务中断。
最常见的DoS攻击
包括计算机网络带宽攻击和连通性攻击。带宽攻击是指以极大的通信量冲击网络,使得所有可用的网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。连通性攻击是指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。
DoS攻击的基本过程
是首先攻击者向服务器发送众多的带有虚假地址的请求,服务器发送回复信息后等待回传信息。由于地址是伪造的,所以服务器一直等不到回传的消息,分配给这次请求的资源就始终没有被释放。当服务器等待一定的时间后,连接会因超时而被切断,攻击者会再度传送一批新的请求,在这种反复发送伪地址请求的情况下,服务器资源最终会被耗尽,而导致服务中断,如下图所示:
拒绝服务攻击可以是"物理的"(又称"硬件的"),也可以是"逻辑的"(又称“软件的")。
1、物理形式的攻击,如偷窃、破坏物理设备,破坏电源等。
2、逻辑的攻志,如通过软件破坏网络、系统资源与服务,如邮件服务、DNS服务、CPU资源等。
按攻击的目标,拒绝服务攻击又可分为节点型和网络连接型。
1、节点型:
旨在消耗节点(主机Host) 资源。节点型又可以进一步细分为主机型和应用型。
●主机型攻击:其目标主要是主机中的公共资源,如CPU、磁盘等,使得主机对所有的服务都不能响应。
●应用型攻击:其目标是网络中特定的应用,如邮件服务、DNS服务、Web服务等。受攻击时,受害者使用的其他服务可能不受影响或者受影响的程度较小(与受攻击的服务相比而言)。
2、网络连接型:旨在消耗网络连接和带宽。
按照攻击方式,拒绝服务攻击可以分为资源消耗、服务中止和物理破坏。
1、资源消耗:指攻击者试图消耗目标的合法资源,如网络带宽、内存和磁盘空间、CPU使用率等。根据资源类型的不同,资源消耗可分带宽耗尽和系统资源耗尽两类。带宽耗尽攻击其本质是攻击者通过放大等技巧,消耗掉目标网络的所有可用带宽。
系统资源耗尽攻击
:指对系统内存、CPU或程序中的其他资源进行消耗,使其无法满足正常提供服务的需求。SYN Flood攻击即是通过向目标服务发送大量的数据包,造成服务的连接队列耗尽,无法再为其他正常的连接请求提供服务。
2、服务中止:指攻击者利用服务中的某些缺陷导致服务崩溃或中止。
3、物理破坏:指雷击、电流、水、火等以物理接触的方式导致的拒绝服务攻击。
按受害者类型,拒绝服务攻击可以分为服务器端拒绝服务攻击和客户端拒绝服务攻击。
1、服务器端拒绝服务攻击:指攻击的目标是特定的服务器,使之不能提供服务(或者不能向某些客户端提供某种服务),如攻击一个Web服务器使之不能访问。
2、客户端拒绝服务攻击:针对特定的客户端,使之不能使用某种服务,如游戏、聊天室中的“踢人”,也就是使某个特定的用户不能登录游戏系统或聊天室中,使之不能使用系统的服务。
大多数的拒绝服务攻击(无论从种类还是发生的频率角度)是针对服务器的,针对客户端的攻击一般发生得少些,同时因为涉及面小,其危害也会小很多。按攻击是否直接针对受害者,拒绝服务攻击又可以分为直接拒绝服务攻击和间接拒绝服务攻击,如要对某个E-mail账号实施拒绝服务攻击,直接对该账号用邮件炸弹攻击就属于直接攻击为了使某个邮件账号不可用,攻击邮件服务器而使整个邮件服务器不可用就是间接攻击。
拒绝服务攻击按攻击地点可以分为本地攻击和远程(网络)攻击。本地攻击是指不通过网络,直接对本地主机的攻击,远程攻击则必须通过网络连接。由于本地攻击要求攻击者与受害者处于同一地,这对攻击者的要求太高,通常只有内部人员能够做到。本地攻击通常可以通过物理安全措施及对内部人员的严格控制予以解决。
拒绝服务攻击的攻击者想尽办法让目标机器停止提供服务或资源访问,这些资源包括磁盘空间、内存、进程,甚至网络带宽,从而阻止正常用户的访问。只要能够对目标造成麻烦,使某些服务被暂停甚至主机死机,都属于拒绝服务攻击。
攻击者进行拒绝服务攻击,实际上是让服务器实现两种效果一是迫使服务器的缓冲区满,不接收新的请求;二是使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。
Land程序攻击是利用向目标主机发送大量的源地址与目标地址相同的数据包,造成目标主机解析Land包时占用大量的系统资源,从而使网络功能完全瘫痪的攻击手段。其方法是将一个特别设计的SYN包中的源地址和目标地址都设置成某个被攻击服务器的地址,这样服务器接收到该数据包后会向自己发送一个SYN- ACK回应包,SYN- ACK又引起一个发送给自己的ACK包,并创建个空连接。 每个这样的空连接都将暂存在服务器中,当队列足够 长时,正常的连接请求将被丢弃,造成服务器拒绝服务的现象。
SYN Flood是当前最流行的DoS (拒绝服务攻击)与DDoS (Distributed Denial of Service,分布式拒绝服务攻击)的方式之一,这是一种利用TCP缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满 负荷或内存不足)的攻击方式。其实现过程如下。
1、攻击者向被攻击服务器发送个包含SYN标志的TCP报文, SYN会指明客户端使用的端口及TCP连接的初始序号,这时同被攻击服务器建立了第1次握手。
2、受害服务器在收到攻击者的SYN后,将返回一个SYN+ACK的报文,表示攻击者的请求被接受,同时TCP序号被加1,ACK即确认,这样就同被攻击服务器建立了第2次握手。
3、攻击者也返回一个确认报文ACK给受害服务器,同样TCP序列号被加1,到此一个TCP连接完成,第3次握手完成。
在TCP连接的3次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第3次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端),并等待一段时间后丢弃这个未完成的连接。这段时间的长度称为SYN Timeout,,一般来说,这个时间是分钟的数量级(大约为30秒至2分钟)。一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况(伪造IP地址),服务 器端将为了维护一个非常大的半连接列表而消耗非常多的资源。即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断地对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP /IP栈不够强大,最后的结果往往是堆栈溢出崩溃即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求,而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常小),此时从正常客户的角度来看,服务器失去响应,这种情况就称作服务器端受到了SYN Flood攻击(SYN洪水攻击)。防攻击方法是当接收到大量的SYN数据包时,通知防火墙阻断连接请求或丢弃这些数据包,并进行系统审计。
这种攻击利用RST位来实现。假设现在有一个合法用户(61.61.61.61) 已经同服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为61.61.61.61,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从61.61.61.61发 送的连接有错误,就会清空缓冲区中已经建立好的连接。这时,如果合法用户61.61.61.61再发送合法数据,服务器就已经没有这样的连接了,该用户就必须重新开始建立连接。攻击时,攻击者会伪造大量的IP地址,向目标发送RST数据,使服务器不为合法用户服务,从而实现了对受害服务器的拒绝服务攻击。
Smurf攻击结合IP欺骗和ICMP回复,是一种放大效果的ICMP攻击方式,其方法是攻击者伪装成被攻击者向某个网络上的广播设备发送请求,该广播设备会将这个请求转发到该网络的其他广播设备,导致这些设备都向被攻击者发出回应,从而达到以较小代价引发大量攻击的目的。
例如,攻击者冒充被攻击者的IP,使用ping来对一个C类网络的广播地址发送ICMP包,该网络上的254台主机就会对被攻击者的IP发送ICMP回应包,这样攻击者的攻击行为就被放大了254倍。
这种攻击通过发送大于65536字 节的ICMP包造成操作系统内存溢出、系统崩溃、重启、内核失败等后果,从而达到攻击的目的。通常不可能发送大于65536个字节的ICMP包, 但可以把报文分割成片段,然后在目标主机上重组,最终会导致被攻击目标缓冲区溢出。
防止系统受到Ping of Death攻击的方法与防范Smurf和Fraggle攻击是相同的,可以在防火墙上过滤掉ICMP报文,或者在服务器上禁止ping,并且只在必要时才打开ping服务。
泪滴(Teardrop) 攻击是基于UDP的病态分片数据包的攻击方法,利用在TCP/IP堆栈中实现信任IP碎片的包的标题头所包含的信息来实现自己的攻击。IP分段含有指明该分段所包含的是原包的哪一段的信息,某些操作系统TCP/IP (包括Service pack 4以前的Windows NT)在收到含有重叠偏移的伪造分段时将会出现系统崩溃、重启等现象。
检测方法是对接收到的分片数据包进行分析,计算数据包的片偏移量(Offset) 是否有误。可以通过添加系统补丁程序,丢弃收到的病态分片数据包,并对这种攻击进行审计等方法预防该攻击。
WinNuke攻击又称带外传输攻击,它的特征是攻击目标端口,被攻击的目标端口通常是139、138、137、113、53, 且URG位设为“1”,即紧急模式。可以通过判断数据包目标端口是否为139、138、137等,并判断URG位是否为“1”来检测该攻击。
适当配置防火墙设备或过滤路由器就可以防止这种攻击手段(丢弃该数据包),并对这种攻击进行审计(记录事件发生的时间,源主机和目标主机的MAC地址和IP地址)。
分布式拒绝服务是种基于DoS的特殊形式的拒绝服务攻击,是一种分布、 协作的大规模攻击方式,主要瞄准比较大的站点,像商业公司、搜索引擎或政府部门门的站点。DoS攻击只要一台单机和一个Modem就可实现;而DDoS攻击是利用一批受控制的机器向一台机器发起攻击,这样来势迅猛的攻击令人难以防备,因此具有较大的破坏性。
DDoS攻击分为3层:攻击者、主控端和代理端,三者在攻击中扮演着不同的角色。
1、攻击者:
攻击者所用的计算机是攻击主控台,可以是网络上的任何一台主机,甚至可以是一个活动的便携机。攻击者操纵整个攻击过程,它向主控端发送攻击命令。
2、主控端:
主控端是攻击者非法侵入并控制的一些主机,这些主机还分别控制大量的代理主机。在主控端主机上安装了特定的程序,因此它们可以接收攻击者发来的特殊指令,并且可以把这些命令发送到代理主机上。
3、代理端:
代理端同样也是攻击者侵入并控制的一批主机,其上运行攻击器程序,接收和运行主控端发来的命令。代理端主机是攻击的执行者,真正向受害者主机发送攻击。
攻击者发起DDoS攻击的第一步, 就是寻找在Internet上有漏洞的主机,进入系统后在其上安装后门程序,攻击者入侵的主机越多,其攻击队伍就越壮大;第二步在入侵主机上安装攻击程序,其中一部分主机充当攻击的主控端,另一部分主机充当攻击的代理端,最后各部分主机各司其职,在攻击者的调遣下对攻击对象发起攻击。由于攻击者在幕后操纵,所以在攻击时不会受到监控系统的跟踪,身份不易被发现。
Trinoo的攻击方法是向被攻击目标主机的随机端口发出全零的4字节UDP包,在处理这些超出其处理能力的垃圾数据包的过程中,被攻击主机的网络性能不断下降,直到不能提供正常服务,乃至崩溃。
Trinoo对IP地址不进行修改,采用的通信端口如下:
1、攻击者主机到主控端主机:27665/TCP ;
2、主控端主机到代理端主机: 27444/UDP ;
3、代理端主机到主服务器主机: 31335/UDP;
TFN由主控端程序和代理端程序两部分组成,它主要采取的攻击方法为SYN风暴、ping风暴、UDP炸弹和SMURF,具有伪造数据包的能力。
TFN2K是由TFN发展而来的,在TFN所具有的特性上,TFN2K又新增些特性。它的主控端和代理端的网络通信是经过加密的,中间还可能混杂了许多虚假数据包,而TFN对ICMP的通信没有加密。攻击方法增加了Mix和Targa3,并且TFN2K可配置代理端进程端。
Stacheldraht也是从TFN派生出来的,因此它具有TFN的特性。此外,它增加了主控端代理端的加密通信能力,它对命令源作假,可以防范一些路由器的RFC 2267过滤。 Stacheldraht中有一个内嵌的代理升级模块,可以自动下载并安装最新的代理程序。
3.1、根据异常情况分析
当网络的通信量突然急剧增长,超过平常的极限值时,一定要提高警惕,检测此时的通信;当网站的某-特定 服务总是失败时,也要多加注意;当发现有特大型的ICP和UDP数据包通过或数据包内容可疑时都要留神。总之,当机器出现异常情况时,最好分析这些情况,防患于未然。
3.2、使用DDoS检测工具
当攻击者想使其攻击阴谋得逞时,首先要扫描系统漏洞,目前市面上的一些网络入侵检测系统,可以杜绝攻击者的扫描行为。另外,一些扫描器工具可以发现攻击者植入系统的代理程序,并可以把它从系统中删除。
1、及早发现系统存在的攻击漏洞,及时安装系统补丁程序。对一些重要的信息建立完善的备份机制,如系统配置信息的备份。对一些特权账号(如管理 员账号)的密码设置要谨慎,最好采用强密码。通过这样一系列的措施 可以把攻击者的可乘之机降低到最小。
2、在网络管理方面,要经常检查系统的物理环境,禁止那些不必要的网络服务。经常检测系统配置信息,并注意查看每天的安全日志。
3、利用网络安全设备(如防火墙)来加固网络的安全性,配置好它们的安全规则,过滤掉所有可能的伪造数据包。
4、比较好的防御措施就是和网络服务提供商协调工作,让他们帮助实现路由访问控制和对带宽总量的限制。
5、当发现正在遭受DDoS攻击时,应当及时启动应付策略,尽可能快地追踪攻击包,并且要及时联系ISP和有关应急组织,分析受影响的系统,确定涉及的其他节点,从而阻挡已知攻击节点的流量。
6、如果是潜在的DDoS攻击受害者,发现计算机被攻击者用作主控端和代理端时,不能因为系统暂时没有受到损害而掉以轻心,攻击者已发现系统的漏洞,这对于系统是一个很大的威胁。所以一旦发现系统中存在DDoS攻击的工具软件要及时把它清除,以免留下后患。
拒绝服务攻击的防护一般包含两个方面:
1、针对不断发展的攻击形式,尤其是采用多种欺骗技术的技术,能够有效地进行检测;
2、降低对业务系统或者是网络的影响,从而保证业务系统的连续性和可用性。
首先能够从网络流量中精确地区分攻击流量并阻断;然后检测发现攻击,降低攻击对服务的影响;同时能够在网络多个边界进行部署,阻断内外不同类型的攻击;最后保障网络系统具备很强的扩展性和良好的可靠性。
通常以采取以下手段来保障网络能够抵御拒绝服务攻击:
1、增加网络核心设备的冗余性,提高对网络流量的处理能力和负载均衡能力。
2、通过路由器配置访问列表,过滤掉非法流量。
3、部署防火墙,提高网络抵御网络攻击的能力。
4、部署入侵检测设备,提高对不断更新的DoS攻击的识别和控制能力。
写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取。
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!
全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。