1、IP协议
IP协议是TCP/IP协议族中至关重要的一个协议,借助于IP协议,使得互联网上的异构计算机系统(包括不同类型的计算机和不同操作系统)能够连接 成为一个网络。
IP协议实现两个基本功能:寻址和分段
- 寻址:IP协议可以根据数据报报头中包括的目的地址将数据报传送到目的地址,即数据包从一个节点发送到另一个节点,最终发送至数据的接收方。
- 分段:如果存在过大的数据包,有些网络内只能传送小数据报,IP协议支持将数据包拆分成不同的小包,重新组装并在报头域内注明而进行传递。
(1) IP协议消息格式
- 版本:记录数据报属于哪个版本的协议,例如可以用此区分出IPv4和IPv6.
- 包头长度:标明IP协议报头有多长,其单位是32bit即4个字节
- 服务类型:用来指示当数据报在一个特定网络中传输时对实际服务质量的要求是什么
- 总长:是指整个数据报的长度,包括头部和数据部分
- 16位标识:标识字段用于IP包的分段与重组,所有属于同一分组的报文分段都包含相同的标识。
- 3位标志(Flag):长度为3bit,Flag字段的作用是用来表示IP包被分割的情况。其三位的含义分别为:不允许IP包分割(DF,do not fragment)、IP包已被分割和其后尚有被分割的IP包(MF,more fragment)。 保留位始终为 0,DF位为 1 时表示该分组不能被分段,MF位为 1 时表示后面还有该分组的分段。
- 分段移位标志:标记该分段在数据报的位置,单位是8个字节,第一个分段的偏移是 0
- 生存期:用来限制分组生命周期的计数器,单位是秒,该字段长度为 8bit ,说明存储的最大数值是 255 ,在实际的应用过程中是以经过的节点计数的,每经过一个节点计数减 1 ,计数减到 0 时,分组要被丢弃。
- 8位协议标识(Protocol):该字段用来标识所传递的数据是上层的何种协议。例如:0x06表示TCP、 0x11表示UPD、0x01表示ICMP等。
- 报头效验和:只对头部进行效验,由于头部的一些字段始终在变化(例如:生命期字段),头部效验和在每个节点都得重新进行计算。
- 32位源IP地址(Source IP address)和32位目的IP地址:该字段包含发送方和接收方的IP地址。
- 选项(Option):传送方可以根据需求在IP包中额外加入一些字段,例如:路由记录(record route)、源路由(source route)、时戳(timestamp)等。
2、IP协议的安全威胁及防御
(1) 安全威胁
IP窃听
IP协议在传输过程中没有加密 ,是以明文进行传递,攻击者只要进行窃听就能够截取到IP头的信息及IP报文。
IP假冒攻击(IP Spoofing)
根据IP协议,路由器只是根据IP分组的目的IP地址来确定该IP分组从哪一个端口发送,而不关心该IP分组的源IP地址。所以攻击者可以通过修改源IP地址或者目的IP地址,网络设备无法判断相关信息是否被修改过。
攻击者可以轻易通过libpcap/winpcap库或者raw socket编程实现对IP地址的修改。
IP假冒攻击具有很大的危害,为拒绝服务攻击提供支持, 避免被追踪而受到惩罚,构造针对同一目的 IP 地址的 IP 分组,而源 IP 地址为随 机的 IP地址
IP碎片攻击:
在IP协议中,允许发送者或中间转发者(如路由器)对IP报进行分片。
攻击者可以利用IP协议的这个功能,将IP包切分为非常小的碎片,然后发送给被攻击目标。
IP分片在网络传输过程中不会重组,而只会在接收方重组
接收方会由于重组这些极小的分片而浪费大量计算资源
(2) IP协议安全威胁的防御办法
入口过滤
- 在网络入口设置一个网关
- 配置网关过滤源IP地址非 法的IP分组
出口过滤
- 在网络出口设置一个网关
- 配置网关过滤源IP地址非 法的IP分组
IP回溯
- 回溯一个IP分组在网络中所经过的路径
- 追踪攻击者所在地址或网络
更完善的IP协议安全威胁的解决方法是采用安全的IP协议(IPSec)
3、TCP协议
TCP协议是一个面向连接的协议,即在传送数据的时候,需要通信双方先建立连接
(1) TCP协议的消息格式
- TCP源端口:发送数据端套接字的端口号
- TCP目的端口:目的套接字端口号
- ***:32位,用于标识TCP分片在整个数据流中的位置,用作标识该报文段***,在- - 传输中,发送一个分片后***加1
- 确认号:32位;用于标识接收方期待发送方发送的分片,算作是对收到报文的一个确认。ACK标志为 0 时,应答号部分无效(例如首个连接的[SYN]数据包),ACK标志为1时应答号才有效。
- 包头长度:标明TCP协议包头长度,单位是32bit即4个字节。确认号的变化,不是简单的加1,取决于收到分片的大小
- 保留:保留字段长度为3位,必须全置为0
-
控制位:用来标识TCP的包的类型和含义
URG:紧急指针有效
PSH:泛洪式发送
RST:重置连接
ACK:确认***有效
SYN:同步有效,协商***
FIN:释放连接 - 窗口:表示发送方还可以接受数据大小,防止对方发送数据大于自己的缓冲数据区,从应答字段的顺序号开始计。
- 校验和:效验和覆盖整个TCP报文段,强制字段,由发送端计算存储,接收端进行验证
- 紧急指针:当Urgent标志置1时,紧急指针才有效
- 选项:可选项字段以第一个字节表明其类型,第二个字节表示该可选项的总长度,后面紧跟可选项的值(长度为可选项的总长度-2)。
(2) TCP连接的建立
TCP是一个面向连接的协议,在通信双方正式传送数据之前需要先建立连接,在此协议中,连接的建立是通过三次握手建立起来的。
如图,在这样的一个网络中,主机A与主机B要传输数据,首先主机A向B发送一条包含SYN有效的数据,此数据中,A指出自己使用的初始***为1000,同时将SYN的位标识为有效。主机B收到SYN信息之后,主机B会向A回复一条ACK有效的信息,信息中包含主机B信息***2000,同时将此***加1,向主机A说明自己收到过主机A的信息。主机A收到信息之后主机A也将ACK置为有效,同时将自己数据包的***加一,同时告诉对方,其下一个可以发送包的***为2001,这样就建立了一个完整的TCP连接。
(3) TCP连接的释放
TCP连接的释放也就是将TCP连接所占用的资源释放掉。首先主机A向主机B发送一条FIN有效的消息,要求释放TCP连接,主机B收到之后会发送一条ACK有效的数据,告诉主机A,主机B已经释放掉了TCP的连接。因为这是一个双向连接的过程,所以在主机B向主机A发送消息之后也会发送一条要求主机A释放连接的消息,主机A回复消息之后也会断开对主机B的连接。之后TCP连接所占用的资源被系统回收。
(4) TCP协议的特点
- 全双工连接(full-duplex connection)
该连接的两端有两条彼此独立、方向相反的传输通道,即双向通道。 - 面向连接(connection-oriented)
通信双方在开始传输数据前,必须通过“三次握手”的方式在二者之 间建立一条逻辑上的链路(虚电路),用于传输数据 - 可靠性(reliable)
TCP借助于***和确认号可以在数据包丢失的时候进行重传,通过确认号可以知道这个数据包是否被收到。所以TCP可以传送可靠的数据。自动分片;保证传送给应用层的数据顺序是正确的 ;自动过滤重复的 封包 ;确认-重传确保数据包可靠到达
面向字节流(byte-stream) ,会将应用程序和网络传输相分割,为流传输服务提供了一个一致的接 口
4、TCP协议的安全隐患
TCP协议存在的主要安全威胁
SYN泛洪攻击(SYN Flooding)
之前介绍TCP建立连接需要三次握手,在这个过程中所发送的第一条消息称之为SYN消息,所以攻击者可以大量给目标主机发送第一条消息,而对对方所回送的ACK消息进行忽略。通过这样的方式,攻击者就实现对主机的拒绝服务攻击。而接收主机在每一次收到SYN消息之后都会花费资源来存储这些TCP连接的相关内容,如果攻击者所发送的次数足够大,那么接收主机的存储资源会被消耗掉,当正常用户对主机进行访问时,则不能为其提供服务。
ACK泛洪攻击(ACK Flooding)-随机IP
攻击者通过随机产生随机源IP和随机源端口,在已经建立TCP连接的情况下,对攻击目标发送一条ACK有效的消息,这违背了TCP三次握手的规定,主机B会向攻击者发送一条重置连接的消息。如果攻击者通过这样的方式不断的产生随机源和随机端口,呢么主机B会花费大量的时间查询本地表。那么被攻击者会忙于处理这些非法请求,当正常用户对主机进行访问时,则不能为其提供服务。
ACK泛洪攻击(ACK Flooding)-伪造IP
这种方式中,攻击者会伪造一个被攻击对象的IP地址和端口号,然后将源IP地址修改为被攻击目标的IP地址,之后攻击者向网络中发送一条ACK泛红消息,这些主机收到这些消息之后,这样的消息是非法的,接受ACK消息的主机会向源IP地址回送一个RET消息,当RET消息足够多的时候,被攻击目标会忙于处理这些非法请求,当正常用户对主机进行访问时,则不能为其提供服务。
***预测攻击
在TCP协议中,数据包是否能被对方接收,取决于这个数据包的***是否是对方所期待的***,已经建立TCP连接的双方,是通过***和确认号来确认双方传输的,作为攻击者,如果通过端口猜测和***预测知道了已经建立的TCP连接的下一条消息的***,那么攻击者就可以伪造一个相应的数据包,将其发送到网络中,对方收到这个数据包后会认为是一个合法的数据包,从而进行接受和处理。
LAND攻击
如果源IP和目的IP相同会是什么样子?在建立三次握手时,发送SYN消息时,其目的IP和源IP均为服务器的IP地址,此时服务器会建立一个自己与自己的空连接,从而占用大量的资源。