利用Ip协议的缺陷:
1.ping of death :死亡之ping
一个ip分组的最大可以容纳的数据为65535字节,一些网络因为设备等原因会限制帧的大小,所以ip得分片传输。而分片是没有记录该分组的总长度的,所以分片的总量超过了
ip的大小范围也不会被知道。此攻击就利用这个机理,制造许多分片,使他们组合起来
的大小大于ip的分组容量,造成接收方内存的溢出(内存一般只为分组准备65535的容量)。
2.泪滴攻击:
使ip分组的偏移量错误(如减少偏移量),导致ip分组的重叠,出错。
利用tcp协议的缺陷:
1.land攻击:
利用三次握手协议的缺陷
攻击者把源地址也设成目标地址向接受方申请连接,接收方发出的应答却因为源地址是自己而发回了给自己。此时接受方也在等待发送方的应答,但它收到自己的应答时以为是发送方的,但其应答号不满足自己的要求,于是向发送方(其实是自己)重发。就这样受害者就这样一直对自己发送消息。
由于TCP是具有高优先权的内核级进程,可中断其它的正常操作系统以获得更多的内核资源来处理进入的数据。这样,无限循环很快就会消耗完系统资源而引起大多数系统死机。
2.去同步攻击
握手1:客户端 ===============> 服务端
SYN, CLT_SEQ (初始)
客户等待服务器应答。
握手2:客户端 <=============== 服务端
ACK= CLT_SEQ+1
SVR_SEQ (初始)
服务器等待客户应答。
握手3:攻击者出现,以客户端身份向服务器发送连接复位包(RST)。服务器收到该包后,认为握手过程出错而中断与客户端的连接,并侦听新的连接请求。客户端由于不知连接已关闭,向服务器发送握手3的应答包,被服务器忽略。
客户状态:认为连接已经建立,自己处于连接状态,认为服务器处于激活状态。
服务器状态:认为客户端出了问题(收到攻击者的RST包),关闭连接,但客户端并没有关闭连接。
攻击者现可以假冒客户端身份进行三次握手过程:
握手1:攻击者(假冒客户端) ===============> 服务端
Attack_SEQ
握手2:真客户端 <=============== 服务端
ACK= Attack_SEQ+1
New_SVR_SEQ
由于应答号与真客户等待的不符,ACK被真客户端忽略。
握手3:攻击者(假冒客户端) ===============> 服务端
ACK= New_SVR_SEQ +1
Attack_SEQ=Attack_SEQ +1
至此,服务器和客户端一样也处于连接状态。但由于客户和服务器之间的序列号无法一致,它们之间不能真正进行通信,各自发往对方的数据包均将被忽略。
攻击过程:
(1) 造成去同步状态
去同步状态指双方都处于连接建立状态,但还没有数据要发送,并且
SVR_SEQ != CLT_ACK
CLT _SEQ != SVR _ACK
此时只要没有数据发送就是稳定的。
若有数据要发送,则存在两种情况:
(i) 若CLT _SEQ < SVR _ACK + SVR_WIND 以及CLT _SEQ > SVR _ACK
则数据包是可以接收的,但被存储已备后用,这是因为数据流的开始部分(从序列号SVR _ACK开始)丢失了。
(ii) 若CLT _SEQ > SVR _ACK + SVR_WIND 或CLT _SEQ < SVR _ACK
包不可接收,被丢弃。
在以上两种情况下,虽然处于连接建立状态,数据交换不可能。
(2) 实施攻击
攻击者使连接双方处于一个去同步状态,使它们不可能进行数据交换,然后攻击者可以产生客户和服务器均能接受的包。
攻击者假冒客户向服务器发送包
SEG_SEQ=SVR_ACK=(Attack_SEQ+1)
SEG_ACK= New_SVR_SEQ +1
服务器接受,数据被处理。
攻击者假冒服务器向客户发送包
SEG_SEQ= SVR_SEQ+1
SEG_ACK= 上次的客户发送的CLT_SEQ + 1
客户接受,数据被处理。
注:去同步攻击(TCP会话劫持攻击)假定攻击者能够对网络通信进行侦听,从而确定序列号。