IP Spoof技术介绍(IP 欺骗)
作者:
IP Spoof技术介绍(IP 欺骗)
第一部分
1.什么是IP spoof?
IP spoof即IP 电子欺骗,我们可以说是一台主机设备冒充另外一台主机的IP地址,与其它设备通信,从而达到某种目的技术。
2.IP spoof可以实现吗?
可以实现,早在1985年,贝尔实验室的一名工程师Robbert Morris在他的一篇文章A weakness in the 4.2bsd
unix TCP/IP software中提出了IP spoof的概念,有兴趣的读者可参见原文:
http://www.coast.net/~emv/tubed/archives/Morris_weakness_in_TCPIP.txt
但要注意的是单纯凭借IP spoof技术不可能很好的完成一次完整的攻击,因为现有IP
spoof技术是属于一种“盲人”式的入侵手段,下面会解释“盲人”的概念。
3.IP spoof的实现原理
我们知道,IP是网络层的一个非面向连接的协议, IP数据包的主要内容由源IP地址,目地IP地址,所传数据构成,
IP的任务就是根据每个数据报文的目的地址,路由完成报文从源地址到目的地址的传送。至于报文在传送过程中是否丢失或出现差错,
IP不会考虑。对IP来讲,源设备与目的设备没有什么关系,它们是相互独立的。IP包只是根据数据报文中的目的地址发送,因此借助高层协议的应用程序来伪造IP地址是比较容易实现的。
与此同时,TCP作为保障两台通讯设备之间数据有保证的顺序传输的协议,是面向连接的,它需要连接双方?quot;同意"才能进行通讯。TCP传输双方传送的每一个字节都伴随着一个序列号(SEQ),它期待对方在接收到后产生一个应答(ACK),
应答一方面通知对方数据成功收到,另一方面告知对方希望接收的下一个字节。同时,任何两台设备之间欲建立TCP连接都需要一个两方确认的起始过程,称三次握手,可分解如下面来表示:
第一步:请求方向服务方发送SYN,表示想发起一次TCP连接。我们假定这次的序列号是某个数值X
Trust ->Target
SYN
SEQ:X
第二步:服务方产生SYN,ACK响应,并向请求方发送ACK,
ACK的值为X+1,表示数据成功接收到,且告知下一次希望接收到字节的SEQ是X+1。同时, 服务方向请求方发送自己的SEQ,
我们假定它的序列号是某个数值Y。
Target -> Trust
SYN,ACK
SEQ:Y
ACK:X+1
第三步: 请求方向服务方发送ACK,表示接收到服务方的回应。这次它的SEQ值为X+1,同时它的ACK值为Y+1,原理同上。
Trust ->Target
ACK
SEQ:X+1
ACK:Y+1
完成这一步以后, 请求方与服务方之间的连接开放,数据可以进行传输了.
1.什么是IP spoof?
IP spoof即IP 电子欺骗,我们可以说是一台主机设备冒充另外一台主机的IP地址,与其它设备通信,从而达到某种目的技术。
2.IP spoof可以实现吗?
可以实现,早在1985年,贝尔实验室的一名工程师Robbert Morris在他的一篇文章A weakness in the 4.2bsd
unix TCP/IP software中提出了IP spoof的概念,有兴趣的读者可参见原文:
http://www.coast.net/~emv/tubed/archives/Morris_weakness_in_TCPIP.txt
但要注意的是单纯凭借IP spoof技术不可能很好的完成一次完整的攻击,因为现有IP
spoof技术是属于一种“盲人”式的入侵手段,下面会解释“盲人”的概念。
3.IP spoof的实现原理
我们知道,IP是网络层的一个非面向连接的协议, IP数据包的主要内容由源IP地址,目地IP地址,所传数据构成,
IP的任务就是根据每个数据报文的目的地址,路由完成报文从源地址到目的地址的传送。至于报文在传送过程中是否丢失或出现差错,
IP不会考虑。对IP来讲,源设备与目的设备没有什么关系,它们是相互独立的。IP包只是根据数据报文中的目的地址发送,因此借助高层协议的应用程序来伪造IP地址是比较容易实现的。
与此同时,TCP作为保障两台通讯设备之间数据有保证的顺序传输的协议,是面向连接的,它需要连接双方?quot;同意"才能进行通讯。TCP传输双方传送的每一个字节都伴随着一个序列号(SEQ),它期待对方在接收到后产生一个应答(ACK),
应答一方面通知对方数据成功收到,另一方面告知对方希望接收的下一个字节。同时,任何两台设备之间欲建立TCP连接都需要一个两方确认的起始过程,称三次握手,可分解如下面来表示:
第一步:请求方向服务方发送SYN,表示想发起一次TCP连接。我们假定这次的序列号是某个数值X
Trust ->Target
SYN
SEQ:X
第二步:服务方产生SYN,ACK响应,并向请求方发送ACK,
ACK的值为X+1,表示数据成功接收到,且告知下一次希望接收到字节的SEQ是X+1。同时, 服务方向请求方发送自己的SEQ,
我们假定它的序列号是某个数值Y。
Target -> Trust
SYN,ACK
SEQ:Y
ACK:X+1
第三步: 请求方向服务方发送ACK,表示接收到服务方的回应。这次它的SEQ值为X+1,同时它的ACK值为Y+1,原理同上。
Trust ->Target
ACK
SEQ:X+1
ACK:Y+1
完成这一步以后, 请求方与服务方之间的连接开放,数据可以进行传输了.