SYN Flood攻击:

  在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这 种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒 -2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最 后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从 正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

  防范:

  第一种是缩短SYN Timeout时间

  第二种方法是设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。

  >netstat -n -p tcp >result.txt

Smurf攻击:

  发送伪装的ICMP数据包,目的地址设为某个网络的广播地址,源地址设为要攻击的目的主机,使所有收到此ICMP数据包的主机都将对目的主机发出一个回应,使被攻击主机在某一段时间内收到 成千上万的数据包

  防范:

  在cisco路由器上配置如下可以防止将包传递到广播地址上:

  Router(config-if)# no ip directed-broadcast

Ping of Death:

  "ping ofdeath"攻击就是我们常说的"死亡Ping"  这种攻击主要是由于单个包的长度超过了IP协议规范所规定的包长度。

这种攻击通过发送大于65536字节的ICMP包使操作系统崩溃;通常不可能发送大于65536个字节的ICMP包,但可以把报文分割成片段,然后在目标主机上重组;最终会导致被攻击目标缓冲区溢出,引起拒绝服务攻击。有些时候导致telnet和http服务停止,有些时候路由器重启。"Ping of Death" 就是故意产生畸形的测试Ping(Packet Internet Groper)包,声称自己的尺寸超过 ICMP 上限,也就是加载的尺寸超过 64KB上限,使未采取保护措施的网络系统出现内存分配错误,导致 TCP/IP 协议栈崩溃,最终接收方荡机。 死亡之ping,这种攻击主要是由于单个包的长度超过了IP协议规范所规定的包长度。死亡之ping目前没什么作用了?  Windows操作系统中开一个DOS窗口,输入ping -l 65500 目标ip -t

  1. ping -l 65500 192.168.2.1 -t

ping是如何工作的呢?
        首先是因为以太网长度有限,IP包片段被分片。当一个IP包的长度超过以太网帧的最大尺寸(以太网头部和尾部除外)时,包就会被分片,作为多个帧来发送。接收端的机器提取各个分片,并重组为一个完整的IP包。在正常情况下,IP头包含整个IP包的长度。当一个IP包被分片以后,头只包含各个分片的长度。分片并不包含整个IP包的长度信息,因此IP包一旦被分片,重组后的整个IP包的总长度只有在所在分片都接受完毕之后才能确定。
        在IP协议规范中规定了一个IP包的最大尺寸,而大多数的包处理程序又假设包的长度超过这个最大尺寸这种情况是不会出现的。因此,包的重组代码所分配的内存区域也最大不超过这个最大尺寸。这样,超大的包一旦出现,包当中的额外数据就会被写入其他正常区域。这很容易导致系统进入非稳定状态,是一种典型的缓存溢出(Buffer Overflow)攻击。在防火墙一级对这种攻击进行检测是相当难的,因为每个分片包看起来都很正常。
        由于使用ping工具很容易完成这种攻击,以至于它也成了这种攻击的首选武器,这也是这种攻击名字的由来。当然,还有很多程序都可以做到这一点,因此仅仅阻塞ping的使用并不能完全解决这个漏洞。预防死亡之ping的最好方法是对操作系统打补丁,使内核将不再对超过规定长度的包进行重组。

teardown攻击:

  对于一些大的IP数据包,往往需要对其进行拆分传送,这是为了迎合链路层的MTU(最大传输单元)的要求。比如,一个6 000字节的IP包,在MTU为2 000的链路上传输的时候,就需要分成3个IP 包。在IP报头中有一个偏移字段和一个拆分标志(MF)。如果MF标志设置为1,则表示这个IP包是一个大IP包的片段,其中偏移字段指出了这个片段在整个IP包中的位置。例如,对一个6 000字 节的IP包进行拆分(MTU为2 000),则3个片段中偏移字段的值依次为0,2000,4 000。这样接收端在全部接收完IP数据包后,就可以根据这些信息重新组装这几个分次接收的拆分IP包。在这里就有一个安全漏洞可以利用了,就是如果黑客们在截取IP数据包后,把偏移字段设置成不正确的值,这样接收端在收到这些分拆的数据包后,就不能按数据包中的偏移字段值正确组合这些拆分的数据包,但接收端会不断尝试,这样就可能致使目标计算机操作系统因资源耗尽而崩溃。

Land(LandAttack)攻击:

在Land攻击中,黑客利用一个特别打造的SYN包--它的原地址和目标地址都被设置成某一个服务器地址进行攻击。此举将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留直到超时,在Land攻击下,许多UNIX将崩溃,NT变得极其缓慢(大约持续五分钟)。

IP欺骗:

这种攻击利用TCP协议栈的RST位来实现,使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。假设有一个合法用户(100.100.100.100)已经同服务器建了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为100.100.100.100,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从100.100.100.100发送的连接有错误,就会清空缓冲区中已建立好的连接。这时,合法用户100.100.100.100再发送合法数据,服务器就已经没有这样的连接了,该用户就被拒绝服务而只能重新开始建立新的连接。

LAND攻击

LAND攻击(局域网拒绝服务攻击,英语:Local Area Network Denial attack,缩写:LAND attack),是拒绝服务攻击(DoS攻击)的一种,通过发送精心构造的、具有相同源地址和目标地址的欺骗数据包,致使缺乏相应防护机制的目标设备瘫痪。这种攻击方法最早在1997年被某人以“m3lt”的名称提出,并于多年之后的Windows Server 2003、Windows XP SP2等操作系统中重现。

这种攻击方式采用了特别构造的TCP SYN数据包(通常用于开启一个新的连接),使目标机器开启一个源地址与目标地址均为自身IP地址的空连接,持续地自我应答,消耗系统资源直至崩溃。这种攻击方法与SYN洪泛攻击并不相同。 [1]

其他类型的LAND攻击在类似SNMP和Windows 88/tcp(Kerberos 协议)的服务中也有发现。类似的系统存在设计上的缺陷,允许设备接受并响应来自网络、却宣称来自于设备自身的数据包,导致循环应答。

===============================================================================================

ICMP flood(ICMP洪水攻击)

参考:http://blog.csdn.net/xlf13872135090/article/details/8059538

ICMP协议
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP报文格式
ICMP报文包含在IP数据报中,IP头部就在ICMP报文的前面。

ICMP头部中的类型域用于说明ICMP报文的作用及格式,此外还有一个代码域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。 RFC定义了13种ICMP报文格式,具体如下:

几种常见的ICMP报文如下:

  1. 响应请求
    ping命令,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常,则目标返回Type=0的ICMP报文,说明这台主机存在。

  2. 目标不可到达、源抑制和超时报文
    这三种报文的格式是一样的。
    a)目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口时,将返回Type=3、Code=3的ICMP报文。常见的不可到达类型还有网络不可到达 (Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。
    b)源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。
    c)无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。

  3. 时间戳
    时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。

这样的攻击有效吗?
ping使用的是ECHO应答,ping的返回很慢,用NetXRAY抓包仅为1–5包/秒,这是为什么呢?事实 上,ICMP本身并不慢(由于ICMP是SOCK_RAW产生的原始报文,速度比SOCK_STREAM的SYN和SOCK_DGRAM的UDP要快几乎 10倍!),这样的速度是ping程序故意延迟的,我测试过一些号称“ping洪水”的程序, 发现它们的效率和ping.exe没什么两样,经过Dependency Walker查看程序调用的函数发现,他们用的是icmp.dll提供的IcmpSendEcho这个API,这个函数是计算ECHO时间的,速度当然慢!

什么是ICMP flood?

  1. ICMP flood的成因
    足够快的数据包速度+足够的带宽,这才是洪水。
    ping.exe和IcmpSendEcho速度慢的另一个原因是它们必须等待目标主机返回REPLY信息,这个过程需要花费大量时间,而Flood—— 洪水,顾名思义,是速度极快的,当一个程序发送数据包的速度达到了每秒1000个以上,它的性质就成了洪水产生器,洪水数据是从洪水产生器里出来的,但这 样还不够,没有足够的带宽,再猛的洪水也只能像公路塞车那样慢慢移动,成了鸡肋。要做真正的洪水,就需要有一条足够宽的高速公路才可以.由于ping.exe无法提速,这就需要专门的工具来做洪水了。

  2. 实现ICMP洪水的前提
    最大的前提是攻击者的速度,其次是你的机器运行速度和数据吞吐量,由于涉及IP校验和的计算,如果数据处理能力不够,在这步就慢了一个级别,效果当然大打折扣。最后就是目标机器的带宽!如果对方比你大很多那么任何Flood都是无病呻吟。还有许多人都忽略的问题:发送的速度与数据包大小成反比,而且太大的数据包会被路由器等设备过滤掉!找到一个合适的数据包大小,对提高Flood的效率有很大帮助!

  3. 洪水——两败俱伤的攻击方式
    别以为洪水无所不能,实际上,你展开洪水攻击时,攻击程序在消耗对方带宽和资源时,也在消耗你的带宽和资源。这只是个看谁撑得住的攻击而已。实际上,有经验的攻击者都是用被控制的服务器(肉鸡)来代替自己的机器发动攻击的,不到万不得已或者你对自己的机器网速有自信,否则尽量少用自己的机器来拼搏!

不同方式的ICMP洪水

  1. 直接Flood
    要做这个的首要条件是你的带宽够,然后就是要一个好用的ICMP Flooder。直接攻击会暴露自己IP(如果对方没有还击能力那还无所谓,固定IP用户不推荐使用这种Flood),如果可以伪造IP一般还是别用为妙。
    简单示意图:
    攻击者[IP=211.97.54.3]—— ICMP—–>受害者[截获攻击者IP=211.97.54.3]==>换IP回来反击,嘿嘿
  2. 伪造IP的Flood
    如果你是Win2000/XP并且是Administrator权限,可以试试看FakePing,它能随意伪造一个IP来Flood,让对方摸不到头脑,属于比较隐蔽阴险的Flood。
    简单示意图:
    攻击者[IP=211.97.54.3]——伪造IP=1.1.1.1的ICMP——>受害者[截获攻击者IP=1.1.1.1]==>倒死
  3. 反射
    这种攻击模式里,最终淹没目标的洪水不是由攻击者发出的,也不是伪造IP发出的,而是正常通讯的服务器发出的!实现的原理也不算复杂,Smurf方式把源IP设置为受害者IP,然后向多台服务器发送ICMP报文(通常是ECHO请求),这些接收报文的服务器被报文欺骗,向受害者返回ECHO应答(Type=0),导致垃圾阻塞受害者的门口。从示意图可以看出,它比上面两种方法多了一级路径——受骗的主机(称为“反射源”),所以,一个反射源是否有效或者效率低下,都会对Flood效果造成影响!
    简单示意图:
    攻击者[IP=211.97.54.3]—-伪造受害者的ICMP—->正常的主机—-应答—>受害者[截获攻击者IP=网易?!]==>哭啊……

以上是几种常见的Flood方式,在测试中,我发现一个有趣的现象:一些防火墙(如天网)只能拦截ECHO请求(Ping)的ICMP报文,对于其他 ICMP报文一概睁只眼闭只眼,不知道其他防火墙有没有这个情况。所以想神不知鬼不觉对付你的敌人时,请尽量避开直接ECHO Flood,换用Type=0的ECHO应答或Type=14的时间戳应答最好,其他类型的ICMP报文没有详细测试过,大家可以试试看Type=3、 4、11的特殊报文会不会有更大效果。

==========================================================================================

如何防止基于ICMP的网络攻击

许多网络攻击都基于ICMP协议。在下面这篇文章里,我们将首先介绍ICMP协议,然后探究常见的基于ICMP的网络攻击,最后分析防火墙怎样才能够防止和减轻这种攻击所造成的危害。

如何防止基于ICMP的网络攻击

■作者:Nathan Ashelman

ICMP(Internet控制消息协议, Internet Control Message Protocol)协议用来给IP协议提供控制服务,允许路由器或目标主机给数据的发送方提供反馈信息。需要发送反馈信息的情况包括:数据包不能被发送到目标主机,路由器缓冲区溢出导致数据包被删除,路由器想要把流量重定向到另外一个更短的路由上等。ICMP协议是IP协议的一部分,任何实现了IP协议的设备同时也被要求实现ICMP协议。

ICMP协议的格式如图1所示,ICMP协议头位于IP数据包头之后,使用类型和代码来区分不同的控制消息。到现在为止,人们已经定义了27种不同的ICMP类型。ICMP代码用来区分不同的ICMP子类型,图2列出了常用的ICMP类型。ICMP数据位于ICMP协议头之后,不同的ICMP类型对应的数据的长度也不相同。通常ICMP数据包含原始数据包的信息、被报告的错误或者用来测试的数据。
图1:ICMP包结构

IP Header (20 bytes)
Type (1 byte) Code (1 byte) Checksum (2 bytes)
Content varies depending on type (variable bytes)

图2:常用的ICMP消息类型

类型 描述 用途
0 Echo reply 用来回答类型8,把数据原封不动的回显给发送方
3 Destination unreachable 数据包不能被进一步发送
4 Source quench 用来指示发送方降低数据传送率
5 Redirect 用于改变缺省路由
8 Echo request 被PING命令使用,用来测试网络的连通性
9 Router announcement 通知主机位于本地子网上的路由器
10 Router solicitation 请求路由器发送Routers announcement
11 TTL exceeded 数据包不能被发送,因为TTL值无效
12 Parameter problem 数据包被删除,因为IP头信息不正确

ICMP类型属于PING命令,可以测试网络的连通性。一个ICMP Echo Request可以包含64K的数据,它被发送后,接收方会返回一个ICMP Echo Reply,返回的数据中包含了接收到的数据的拷贝。

常见的ICMP攻击

基于ICMP的攻击可以分为三类,并且都可以归类为拒绝服务攻击(DoS, Denial of Service):针对带宽的DoS攻击,利用无用的数据来耗尽网络带宽;针对主机的DoS攻击,攻击操作系统的漏洞;针对连接的DoS攻击,可以终止现有的网络连接。

Pingflood、pong、echok、flushot、fraggle 和 bloop是常用的ICMP攻击工具。通过高速发送大量的ICMP Echo Reply数据包,目标网络的带宽瞬间就会被耗尽,阻止合法的数据通过网络。ICMP Echo Reply数据包具有较高的优先级,在一般情况下,网络总是允许内部主机使用PING命令。这种攻击仅限于攻击网络带宽,单个攻击者就能发起这种攻击。更厉害的攻击形式,如smurf和papa-smurf,可以使整个子网内的主机对目标主机进行攻击,从而扩大ICMP流量。使用适当的路由过滤规则可以部分防止此类攻击,如果完全防止这种攻击,就需要使用基于状态检测的防火墙。

“Ping of Death”及其相关的攻击利用主机操作系统的漏洞直接对目标主机发起攻击。通过发送一个非法的ICMP Echo Request数据包,就可以使目标系统崩溃或重启。许多系统包括Windows、Unix、Macintosh ,甚至还有一些路由器和打印机,都容易遭受此类攻击。如果用户使用的操作系统的版本过于陈旧,请确保是否打好了补丁。这类攻击包括pinger、pingexploit、jolt、 jolt2、Sping、Ssping、IceNewk和 ICMPbug。一个能执行详细数据包完整性检测的防火墙可以防止所有这种类型的攻击。

针对网络连接的DoS攻击会影响所有的IP设备,因为它使用了合法的ICMP消息。Nuke通过发送一个伪造的ICMP Destination Unreachable或Redirect消息来终止合法的网络连接。更具恶意的攻击,如puke和smack,会给某一个范围内的端口发送大量的数据包,毁掉大量的网络连接,同时还会消耗受害主机CPU的时钟周期。还有一些攻击使用ICMP Source Quench消息,导致网络流量变慢,甚至停止。Redirect和Router Announcement消息被利用来强制受害主机使用一个并不存在的路由器,或者把数据包路由到攻击者的机器,进行攻击。针对连接的DoS攻击不能通过打补丁的方式加以解决。通过过滤适当的ICMP消息类型,防火墙可以阻止此类攻击。

选择合适的防火墙

有效防止ICMP攻击,防火墙应该具有状态检测、细致的数据包完整性检查和很好的过滤规则控制功能。

状态检测防火墙通过跟踪它的连接状态,动态允许外出数据包的响应信息进入防火墙所保护的网络。例如,状态检测防火墙可以记录一个出去的PING(ICMP Echo Request),在接下来的一个确定的时间段内,允许目标主机响应的ICMP Echo Reply直接发送给前面发出了PING命令的IP,除此之外的其他ICMP Echo Reply消息都会被防火墙阻止。与此形成对比的是,包过滤类型的防火墙允许所有的ICMP Echo Reply消息进入防火墙所保护的网络了。许多路由器和基于Linux内核2.2或以前版本的防火墙系统,都属于包过滤型,用户应该避免选择这些系统。

新的攻击不断出现,防火墙仅仅能够防止已知攻击是远远不够的。通过对所有数据包进行细致分析,删除非法的数据包,防火墙可以防止已知和未知的DoS攻击。这就要求防火墙能够进行数据包一致性检查。安全策略需要针对ICMP进行细致的控制。因此防火墙应该允许对ICMP类型、代码和包大小进行过滤,并且能够控制连接时间和ICMP包的生成速率。

配置防火墙以预防攻击

一旦选择了合适的防火墙,用户应该配置一个合理的安全策略。以下是被普遍认可的防火墙安全配置惯例,可供管理员在系统安全性和易用性之间作出权衡。

防火墙应该强制执行一个缺省的拒绝策略。除了出站的ICMP Echo Request、出站的ICMP Source Quench、进站的TTL Exceeded和进站的ICMP Destination Unreachable之外,所有的ICMP消息类型都应该被阻止。下面是针对每个ICMP消息类型的过滤规则的详细分析。

Echo Request和Reply(类型8和0):允许Echo Request消息出站以便于内部用户能够PING一个远程主机。阻止入站Echo Request和出站Echo Reply可以防止外部网络的主机对内部网络进行扫描。如果您使用了位于外部网络的监视器来监视内部网络,就应该只允许来自于特定外部IP的Echo Request进入您的网络。限制ICMP Echo包的大小可以防止“Ping Floods”攻击,并且可以阻止那些利用Echo Request和Reply来“偷运”数据通过防火墙的木马程序。

Destination unreachable (类型3): 允许其入站以便于内部网用户可以使用traceroute。需要注意的是,有些攻击者可以使用它来进行针对会话的DoS攻击,如果您曾经历过类似的攻击,也可以阻止它。阻止出站的ICMP Destination unreachable消息,因为它可能会泄漏内部网络的结构。不过有一个例外,对于那些允许外部网络通过TCP访问的内部主机(如位于DMZ区的Web服务器)发出的Destination unreachable,则应该允许它通过。为了能够支持“Path MTU Discovery”,您应该允许出站的“Packet Too Big”消息(类型3,代码4)到达那些主机。

Source quench(类型4):阻止其入站,因为它可以作为一种DoS攻击,能够降低发送者的发送速度。允许其出站以便于内部主机能够控制发送端发送数据的速度。有些防火墙会忽略所有直接发送到防火墙端口的Source Quench消息,以防止针对于防火墙的DoS攻击。

Redirect、Router announcement、 Router selection(类型5,9,10):这些消息都存在潜在危险,因为它们可以用来把数据重定向到攻击者的机器。这些消息都应该被阻止。

TTL exceeded(类型11):允许其进站以便于内部用户可以使用traceroute。“firewalking”使用很低的TTL值来对网络进行扫描,甚至可以通过防火墙对内网进行扫描,所以应该禁止其出站。一些防火墙可以阻止TTL值小于设定值的数据包进入防火墙。

Parameter problem(类型12):禁止其入站和出站。通过使用一个能够进行数据包一致性检查的防火墙,错误和恶意的数据包都会被阻塞。

=====================================================================================================

ICMP Flood 攻击、UDP Flood 攻击、SYN Flood 攻击

ICMP Flood 攻击检测、UDP Flood 攻击检测、SYN Flood 攻击检测、连接数限制和扫描攻击检测。

  1. ICMP Flood攻击检测
    短时间内向特定目标不断请求 ICMP 回应,致使目标系统负担过重而不能处理合法的传输任务,就发生了 ICMP Flood。启用 ICMP Flood 攻击检测功能时,要求设置一个连接速率阈值,一旦发现保护主机 ICMP 连接速率超过该值,防火墙会输出发生 ICMP Flood 攻击的告警日志,并且根据用户的配置可以阻止发往该主机的后续连接请求。

  2. UDP Flood攻击检测
    短时间内向特定目标不断发送 UDP 报文,致使目标系统负担过重而不能处理合法的传输任务,就发生了 UDP Flood。启用 UDP Flood 攻击检测功能时,要求设置一个连接速率阈值,一旦发现保护主机响应的 UDP 连接速率超过该值,防火墙会输出发生 UDP Flood 攻击的告警日志,并且根据用户的配置可以阻止发往该主机的后续连接请求。

  3. SYN Flood攻击检测
    由于资源的限制,TCP/IP 栈只能允许有限个 TCP 连接。SYN Flood 伪造 SYN 报文向服务器发起连接,服务器在收到报文后用 SYN_ACK 应答,此应答发出去后,不会收到 ACK 报文,造成一个半连接。若攻击者发送大量这样的报文,会在被攻击主机上出现大量的半连接,耗尽其资源,使正常的用户无法访问,直到半连接超时。在一些创建连接不受限制的实现里,SYN Flood 具有类似的影响,它会消耗掉系统的内存等资源。
    启用 SYN Flood 攻击检测功能时,要求设置一个连接速率阈值和半开连接数量阈值,一旦发现保护主机响应的 TCP 新建连接速率超过连接速度阈值或者半开连接数量超过半开连接数量阈值,防火墙会输出发生 SYN Flood 攻击的告警日志,并且可以根据用户的配置采取以下三种措施:

    • 阻止发往该保护主机的后续连接请求;
    • 切断保护主机上的最老半连接会话;
    • 向 TCP Proxy 添加受保护 IP 地址。
  4. 连接数限制
    连接数限制包括源 IP 连接数限制和目的 IP 连接数限制。启用连接数限制功能时,要求设置一个连接数阈值,一旦 IP 的连接数超过该值,防火墙会输出告警日志,并用可以根据用户配置阻止该 IP新建连接。

  5. 扫描攻击检测
    攻击者运用扫描工具探测目标地址和端口,用来确定哪些目标系统连接在目标网络上以及主机开启哪些端口服务。启用扫描攻击保护功能时,要求设置一个扫描速率阈值,一旦存在 IP 主动发起的连接速率超过该值,则判定该 IP 正在进行扫描探测,防火墙会输出发生扫描攻击的告警日志,阻止扫描者发起的后续连接,并且可以根据用户配置将扫描者加入到黑名单。

TCP代理

1. SYN Flood攻击详细介绍

一般情况下,TCP 连接的建立需要经过三次握手,即:
(1) TCP 连接请求的发起者向目标服务器发送 SYN 报文;
(2) 目标服务器收到 SYN 报文后,建立处于 SYN_RECEIVED 状态的 TCP 半连接,并向发起者回复 SYN ACK 报文,等待发起者的回应;
(3) 发起者收到 SYN ACK 报文后,回应 ACK 报文,这样 TCP 连接就建立起来了。利用 TCP 连接的建立过程,一些恶意的攻击者可以进行 SYN Flood 攻击。攻击者向服务器发送大量请求建立 TCP 连接的 SYN 报文,而不回应服务器的 SYN ACK 报文,导致服务器上建立了大量的 TCP 半连接。从而达到耗费服务器资源,使服务器无法处理正常业务的目的。

2. TCP Proxy功能简介

TCP Proxy 功能用来防止服务器受到 SYN Flood 攻击。客户端通过 TCP 代理请求与受保护的服务器建立连接时,TCP 代理首先验证客户端的请求是否为 SYN Flood 攻击,验证通过后客户端和服务器之间才能建立 TCP 连接,从而避免服务器受到攻击。
TCP Proxy 支持两种代理方式:单向代理和双向代理。单向代理方式是指仅对 TCP 连接的正向报文进行处理;双向代理是指对 TCP 连接的正向和反向报文都进行处理。用户可以根据实际的组网情况进行选择。

例如:在如 图 1-1 所示的组网中,从客户端发出的报文经过TCP代理,而从服务器端发出的报文不经过TCP代理,此时只能使用单向代理方式;在如 图 1-2 所示的组网中,从客户端发出的报文经和从服务器端发出的报文都经过TCP代理,此时可以使用单向代理方式,也可以使用双向代理方式。

3. TCP Proxy处理流程

3.1. 单向代理

单向代理方式下,TCP Proxy的处理流程如 图 1-3 所示。

TCP 代理收到某客户端发来的与受保护服务器(匹配某个受保护 IP 表项)建立 TCP 连接的请求(SYN 报文)后,先代替服务器向客户端回应序号错误的 SYN ACK 报文。如果收到客户端回应的RST 报文,则认为该 TCP 连接请求通过 TCP 代理的验证。一定时间内,TCP 代理收到客户端重发的 SYN 报文后,直接向服务器转发,在客户端和服务器之间建立 TCP 连接。TCP 连接建立后,TCP代理直接转发后续的报文,不对报文进行处理。

3.2. 双向代理

双向代理方式下,TCP Proxy的处理流程如 图 1-4 所示。

TCP 代理收到某客户端发来的与受保护服务器建立 TCP 连接的请求(SYN 报文)后,先代替服务器向客户端回应正常的 SYN ACK 报文(窗口值为 0)。如果收到客户端回应的 ACK 报文,则认为该 TCP 连接请求通过 TCP 代理的验证。TCP 代理再向服务器发送同样的 SYN 报文,并通过三次握手与服务器建立 TCP 连接。双向代理方式中,在客户端和 TCP 代理、TCP 代理和服务器之间建立两个 TCP 连接。由于两个 TCP 连接使用的序号不同,TCP 报文交互过程中,TCP 代理接收到客户端或服务器发送的报文后,需要修改报文序号,再转发给对端,这样才能保证通信正常。

=================================================================

icmp flood属于flood的其中一种.
达到效果有以下实现方法

1.两败俱伤

大量的 ICMP消息发送给目标系统,使得它不能够对合法的服务请求做出响应。中美黑客大战中的多数中国黑客采用的正是此项技术。ICMP FLOOD攻击实际上是一种两败俱伤的攻击方式,在主机"疯狂"地向攻击目标发送ICMP消息的时候,主机也在消耗自身的系统资源。如果自身的网络资源小 于目标的话,这种攻击就是"蚍蜉撼大树"。因此,ICMP FLOOD攻击为了达到很好的效果,往往要联合多台机器同时攻击同一台机器,从而形成分布式拒绝服务攻击(DDoS)。

2.借刀杀人

攻击者向许多地址发送ICMP Echo Request,但是它却告诉这些地址ICMP Echo Request不是它自己发的,而是"某某"发的,这个"某某"就会成为"众矢之的"。通过伪装目的主机的IP地址,向多个IP 网络的广播地址发送ICMP Echo Request数据包,使得目的主机需要消耗大量CPU 资源和有效带宽来处理来自众多节点的ICMP Reply数据包。该攻击的原理如下图:

v979yc5i62ve[1].gif

从图中可以看出,带宽仅为128Kbps的攻击者可以击溃带宽比其更大(512Kbps)的目标,因为ICMP SMURF采用的手段是"借刀杀人"!它本身并不向目标发送ICMP消息,而是向许多远程主机"诬告"攻击目标向他们发送了ICMP Echo,于是这些远程主机纷纷向攻击目标发送ICMP Reply,导致攻击目标崩溃。有明一代名将袁崇焕督师就是因为满人的反间计而被崇祯凌迟,并被当时的北京市民争其肉而食的。网络攻击中的"借刀杀人"照 样威力无穷。

2014033123061208437[1].png

305dd7ea50e1706daeafd55c[1].jpg

//定义ICMP首部
typedef struct _icmphdr{
unsigned char i_type; //8位类型
unsigned char i_code; //8位代码
unsigned short i_cksum; //16位校验和, 从TYPE开始,直到最后一位用户数据,如果为字节数为奇数则补充一位
unsigned short i_id ; //识别号(一般用进程号作为识别号), 用于匹配ECHO和ECHO REPLY包
unsigned short i_seq ; //报文序列号, 用于标记ECHO报文顺序
unsigned int timestamp; //时间戳
}ICMP_HEADER;

计算校验和的经典函数:

SHORT checksum(USHORT* buffer, int size)
{unsigned long cksum = 0;while(size>1){cksum += *buffer++;size -= sizeof(USHORT);}if(size){cksum += *(UCHAR*)buffer;}cksum = (cksum>>16) + (cksum&0xffff); cksum += (cksum>>16); return (USHORT)(~cksum);
}

计算校验和的经典函数:

SHORT checksum(USHORT* buffer, int size)
{unsigned long cksum = 0;while(size>1){cksum += *buffer++;size -= sizeof(USHORT);}if(size){cksum += *(UCHAR*)buffer;}cksum = (cksum>>16) + (cksum&0xffff); cksum += (cksum>>16); return (USHORT)(~cksum);
}
<meta charset="utf-8">[cpp] [view plain](http://blog.csdn.net/hwhaocool/article/details/22697325#) [copy](http://blog.csdn.net/hwhaocool/article/details/22697325#) [print?](http://blog.csdn.net/hwhaocool/article/details/22697325#)1.  /生成ICMP会送请求报文
2.  char icmp_data[65535]={0};                  //要发送的字符串  4.  ((IcmpHeader*)icmp_data)->chksum=0;
5.  ((IcmpHeader*)icmp_data)->type=8;                //会送请求
6.  ((IcmpHeader*)icmp_data)->code=0;                //
7.  ((IcmpHeader*)icmp_data)->id=2;
8.  ((IcmpHeader*)icmp_data)->timestamp=GetTickCount();         //设置时间戳
9.  ((IcmpHeader*)icmp_data)->seq=0;                             //序列号  11.  memset(icmp_data+sizeof(IcmpHeader),'E',PACKET_SIZE);
12.  ((IcmpHeader*)icmp_data)->chksum=
13.  checksum((USHORT*)icmp_data,sizeof(IcmpHeader)+PACKET_SIZE);  //填入校验和
14.  int datasize=sizeof(IcmpHeader)+PACKET_SIZE;  16.  //开始发送数据报文了
17.  sockaddr_in dst;
18.  dst.sin_family=AF_INET;
19.  dst.sin_addr.S_un.S_addr=inet_addr(dstIP);
20.  DWORD dwStart=GetTickCount();
21.  while(GetTickCount()-dwStart<10)          //程序运行10秒后退出
22.  sendto(sockRAW,icmp_data,datasize,0,(struct sockaddr*)&dst,sizeof(dst));
/生成ICMP会送请求报文char icmp_data[65535]={0};                  //要发送的字符串((IcmpHeader*)icmp_data)->chksum=0;((IcmpHeader*)icmp_data)->type=8;               //会送请求((IcmpHeader*)icmp_data)->code=0;               //((IcmpHeader*)icmp_data)->id=2; ((IcmpHeader*)icmp_data)->timestamp=GetTickCount();         //设置时间戳((IcmpHeader*)icmp_data)->seq=0;                             //序列号memset(icmp_data+sizeof(IcmpHeader),'E',PACKET_SIZE);((IcmpHeader*)icmp_data)->chksum=checksum((USHORT*)icmp_data,sizeof(IcmpHeader)+PACKET_SIZE);  //填入校验和int datasize=sizeof(IcmpHeader)+PACKET_SIZE;//开始发送数据报文了sockaddr_in dst;dst.sin_family=AF_INET;dst.sin_addr.S_un.S_addr=inet_addr(dstIP);DWORD dwStart=GetTickCount();while(GetTickCount()-dwStart<10)          //程序运行10秒后退出sendto(sockRAW,icmp_data,datasize,0,(struct sockaddr*)&dst,sizeof(dst));

ip icmp flood 等 常见的攻击相关推荐

  1. ICMP flood(ICMP洪水攻击)

    最近在学习DDos相关知识,参考一些知识,做了摘要,供自己参考. 参考:http://blog.csdn.net/xlf13872135090/article/details/8059538 什么是I ...

  2. 高防IP是如何来防御DDoS攻击的呢?

    DDoS攻击是目前互联网中最常见的网络攻击方式之一,通过大量虚假流量对目标服务器进行攻击,堵塞网络耗尽服务器性能,导致服务器崩溃,真正的用户也无法正常访问了.以前大型企业常用的防御手段就是高防服务器, ...

  3. web安全知识点(常见web攻击总结)

    目录 一.XSS-跨站脚本攻击 1.原理 2.非持久XSS(反射型XSS) 2.1.特点 2.2.如何防止 3.持久性XSS(存储型XSS) 3.1.条件 3.2.特点 二.CSRF-跨站请求伪造攻击 ...

  4. 浅谈ICMP Flood***原理

    我们经常听到常规主流的DDOS***.CC***,SYN Flood***,HTTPS***等,刚好有客户问ICMP Flood***是什么?那我们今天就谈谈ICMP Flood***原理吧. ICM ...

  5. 常见的攻击手段及其防御方式

    本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scripting),指攻击 ...

  6. 遇到黑客攻击遭遇勒索保护费怎么办?黑客最常见的攻击手段

    经常会有遇到一些客户过来咨询自己遭到了网络进犯,对方勒索钱财,要是不给就会一直继续进犯下去,许多客户遇到这种状况,找到了小蚁云安全问询这种状况有什么方法处理. 首先遇到这种事情,报警有没有用呢?不说报 ...

  7. servu ip段访问_高防IP是如何防御DDOS/CC攻击的,防御原理是什么?

    高防IP是网络安全公司针对解决互联网服务器在遭受大流量的DDoS攻击后导致服务不可用的情况,推出的付费增值服务.企业可以通过配置DDoS高防IP服务,把域名解析到高防IP(Web业务把域名解析指向高防 ...

  8. 常见的攻击方式以及防护策略

    本文主要给大家介绍一下常见的几种网络攻击方式(包括CC,UDP,TCP)和基础防护策略! 1.0 常见的网络攻击方式 第一种CC攻击 CC攻击( ChallengeCoHapsar,挑战黑洞 )是DD ...

  9. 常见 Web 攻击(前端篇)

    XSS Cross Site Scripting(跨站脚本攻击),因为缩写和 CSS 重叠,所以改叫 XSS.跨站脚本攻击是指通过存在安全漏洞的 Web 网址注册用户的浏览器内运行非本站点 HTML ...

  10. 从交换机安全配置,看常见局域网攻击

    前言 构建零信任网络,自然离不开网络准入(NAC),这就涉及到交换机的一些安全测试,于是有了此文<从交换机安全配置看常见局域网攻击>. 交换机安全配置 如本文标题所说从交换机安全配置看常见 ...

最新文章

  1. 零基础自学python的app-零基础学Python需要用哪些软件?
  2. 利用Traefik+Docker构建可弹性扩展的微服务或服务集群
  3. python制作点亮图片_MicroPython拼插编程实例:点亮心形8x8点阵
  4. 阿里云开源EasyTransfer:业界首个面向NLP场景深度迁移学习框架
  5. C++ 重载数学运算符
  6. 软件测试知识点 | Jmeter实现接口关联小结
  7. Spring Boot 三大开发工具,你都用过几个?
  8. 2.PHP7内核剖析 --- SAPI
  9. 基于开源文本摘要模块sumy的文本摘要生成实践
  10. springboot进行微信公众号相关开发:(二)获取微信公众号access_token用以微信公众号各功能接口的调用
  11. 简易数字时钟 按键可校准
  12. 如何彻底清除流氓的2345安全卫士及2345SafeCenterSvc服务?
  13. PCB板材及叠层结构(转)
  14. 转型后的运维太叛逆了!和研发又打起来咋办?丨话题接力
  15. 洛谷P1039 侦探推理
  16. JAVA音视频解决方案----音频处理方案
  17. metasploit-framework(MSF)--Github翻译
  18. C语言训练-1522-对称矩阵的判定
  19. 爬取天猫店铺列表页的所有数据
  20. FinalShell离线激活

热门文章

  1. 怎么样优化可以避免百度的冰桶算法?
  2. MYSQL查看进程和kill进程
  3. java中多线程介绍
  4. CSAPP第六章家庭作业(原书第二版)
  5. PTA:7-32 计算天数
  6. PAT乙级做题部分总结
  7. 关闭或者开启Windows defender防火墙
  8. sir模型初始值_SIR模型简单了解(Susceptible Infected Recovered Model)
  9. 服务器 字体文件太大,网页的字体文件过大
  10. YY 0709|视觉报警信号的要求和测试方法