前言1 IP欺骗这一篇主要和大家一起学习回顾关于 TCP/IP的常见攻击,至少有一个基本的认识
IP是什么
在网络中,所有的设备都会分配一个地址。这个地址就仿佛小蓝的家地址「多少号多少室」,这个号就是分配给整个子网的,「室」对应的号码即分配给子网中计算机的,这就是网络中的地址。「号」对应的号码为网络号,「室」对应的号码为主机号,这个地址的整体就是IP地址。
通过IP地址我们能知道什么?
通过 IP 地址,我们就可以知道判断访问对象服务器的位置,通过这个 IP 地址就可以判断访问对象服务器的位置,从而将消息发送到服务器。一般发送者发出的消息首先经过子网的集线器,转发到最近的路由器,然后根据路由位置访问下一个路由器的位置,直到重点
IP头部格式
IP欺骗技术
骗呗,拐骗,诱骗!
IP 欺骗技术就是伪造某台主机的 IP 地址的技术。通过IP 地址的伪装使得某台主机能够伪装另外的一台主机,而这台主机往往具有某种特权或者被另外的主机所信任。
假设现在有一个合法用户 (1.1.1.1)已经同服务器建立正常的连接,攻击者构造攻击的 TCP 数据,伪装自己的 IP 为1.1.1.1,并向服务器发送一个带有 RSI 位的 TCP 数据段。服务器接收到这样的数据后,认为从1.1.1.1发送的连接有错误,就会清空缓冲区中建立好的连接。
这时,如果合法用户 1.1.1.1再发送合法数据,服务器就已经没有这样的连接了,该用户就必须从新开始建立连接。攻击时,伪造大量的IP地址,向目标发送 RST 数据,使服务器不对合法用户服务。虽然IP地址欺骗攻击有着相当难度,但我们应该清醒地意识到,这种攻击非常广泛,入侵往往从这种攻击开始。
2 SYN FloodingSYN Flooding简介
拒绝服务攻击(DDoS)从1970 年出现直到今天都依然在作祟,并给全球范围内的各大组织带来了不可估量的损失。SYN Flood是互联网上最经典的DDoS攻击方式之一,最早出现于 1999 年左右,雅虎是当时最著名的受害者。SYN Flood攻击利用了TCP三次握手的缺陷,能够以较小代价使目标服务器无法响应,且难以追查。
SYN flood是一种常见的DOS(denial of service拒绝服务)和DDos(distributed denial of serivce 分布式拒绝服务)攻击方式。这是一种使用TCP协议缺陷,发送大量的伪造的 TCP 连接请求,使得被攻击方 CPU 或内存资源耗尽,最终导致被攻击方无法提供正常的服务。
TCP SYN Flood攻击原理
TCP SYN Flood攻击利用的是TCP的三次握手(SYN -> SYN/ACK -> ACK),假设连接发起方是A,连接接受方是 B,即 B 在某个端口(Port)上监听A发出的连接请求,过程如下图所示,左边是A,右边是B。
A 首先发送 SYN(Synchronization)消息给 B,要求 B 做好接收数据的准备;B 收到后反馈SYN-ACK(Synchronization-Acknowledgement) 消息给A,这个消息的目的有两个:
向 A 确认已做好接收数据的准备,
同时要求 A 也做好接收数据的准备,此时 B 已向 A 确认好接收状态,并等待 A 的确认,连接处于半开状态(Half-Open),顾名思义只开了一半;A 收到后再次发送ACK(Acknowledgement) 消息给B,向 B 确认也做好了接收数据的准备,至此三次握手完成,「连接」就建立了,
大家注意到没有,最关键的一点在于双方是否都按对方的要求进入了可以接收消息的状态。而这个状态的确认主要是双方将要使用的消息序号(SquenceNum),TCP为保证消息按发送顺序抵达接收方的上层应用,需要用消息序号来标记消息的发送先后顺序的。
TCP是「双工」(Duplex)连接,同时支持双向通信,也就是双方同时可向对方发送消息,其中SYN和SYN-ACK消息开启了A→B的单向通信通道(B 获知了 A 的消息序号);SYN-ACK和ACK消息开启了B→A单向通信通道(A获知了B的消息序号)。
上面讨论的是双方在诚实守信,正常情况下的通信。
但实际情况是,网络可能不稳定会丢包,使握手消息不能抵达对方,也可能是对方故意不按规矩来,故意延迟或不发送握手确认消息。
假设 B 通过某 TCP端口提供服务,B 在收到 A 的SYN消息时,积极的反馈了SYN-ACK消息,使连接进入半开状态,因为 B 不确定自己发给 A 的SYN-ACK消息或 A 反馈的 ACK 消息是否会丢在半路,所以会给每个待完成的半开连接都设一个Timer,如果超过时间还没有收到 A 的ACK消息,则重新发送一次SYN-ACK消息给A,直到重试超过一定次数时才会放弃。