# 简介
OIS 七层结构(从上到下):
但是在 TCP/IP 中,被简化成了四个层
应用层:
除去熟知的 HTTP,SSH,FTP,DNS 这几个,SMTP 用于传输电子邮件
传输层:
用于提供端到端的传输服务,分为可靠传输(如 TCP), 以及不可靠传输(如 UDP), 这些协议可以提供流量控制,差错控制,QoS(服务质量管理)等管理服务,不只是传输数据
TCP(传输控制协议):
提供可靠的字节流,保证数据完整无损的按顺序到达,会不断测试网络负载以控制发送数据的速度,按照规定顺序发送
UDP(无连接数据报协议):
不会对数据包是否到达目的地进行检查,也不保证顺序到达
网络层:
负责找到合适的路径到达对方计算机,也能实现拥堵控制,网际互连等功能
三层交换机(路由器 + 二层交换机)属于网络层,每一个端口拥有独立的 MAC 地址,用于转发数据包,这时在交换机的地址表上就只有一个 MAC 地址
IP 地址划分出的内网 192.168.x 可以方便的区分数据包是否应该发到路由器,路由器需要通过数据包的网络层头部来寻找:
由于路由器的每个端口都有独立的 MAC,所以数据链路层头部经过路由器时会发生改变
这个源 MAC 是路由器转发用的端口 MAC,而不是接受包的那个端口 MAC,接受和发送端口的判断基于路由器的路由表:这个表是按照子网转发,实际上就是 192.168.0/1.x 在转到 0/1 端口
有时不显示子网掩码而用 192.168.0.0/24 来代替,也就是用 IP 地址前 24 位来判断子网(对应子网掩码 255.255.255.0)
但网络层并不一定有用,当 AAAA 与 BBBB 在一个交换机下:
尽管有网络层头部,但是没有生效
上面用 192.168.x 来区分是否要发送给路由器,这就是子网:
192.168.0.1 和 192.168.0.2 处于同一个子网
192.168.0.1 和 192.168.1.1 处于不同子网
子网的判断实际上是把 IP 和子网掩码进行与运算,只要相等就在同一个子网
上述判断基于默认的子网掩码 255.255.255.0(判断子网的过程发生于电脑这种终端设备)
如果存在子路由,要避免子网重叠(其实动态路由中上级路由可以” 学习” 到下级路由的网段,并由此实现 “下一跳”)
链路层:
又称数据链路层或者网络接口层,处理硬件部分,包括设备驱动,NIC(网卡),光纤,甚至似乎连接器。
交换机属于链路层,其内部维护一张 MAC 地址表(本身不具有 MAC 地址,也没有 IP),将 MAC 与自身端口进行映射
当两个交换机相连时,地址表中会出现一个端口映射多个 MAC,由于交换机并不知道哪一个是路由器,所以你需要在电脑上配置默认网关,这时当目标 ip 不处于子网内才能正确转发
交换机并不识别 IP 地址,转发只能通过 MAC 地址,这要求发送数据包的电脑本身要知道这个 IP 地址所对应的设备 MAC,上面那个例子的 CCCC 实际上是未知的(路由器会在自己对应的端口 ARP 来获取)
ARP 协议
电脑会不断广播 ARP 请求(包含自身 MAC),而收到的电脑或者路由器端口则向其返回自己的 MAC。
(路由器只在有转发请求,且自身 ARP 表中不存在时才会发起对应端口的 ARP)
无法跨子网获取 MAC
如果对应的端口是个路由器,那将包直接发送给这个路由器,这个路由器同样 ARP
# 数据链路层
# ARP 欺骗
ARP 协议不进行身份认证。
攻击者可伪造网关到目标主机的 ARP 应答,让目标将攻击者当作 “中间代理”,也可以反之,让网关将攻击者当作中间代理(两者都做就是双向欺骗)
# VLAN 渗透
VLAN 就是虚拟局域网,将物理的局域网隔离为多个独立的广播域。
数据是分层分装的:
到数据链路层,就是一个以太网帧,一般的以太网帧是:
MAC 头部 + 类型字段(封装帧内部的上层协议类型,比如 ARP)+ 数据字段 + FCS 尾部(校验数据)
而使用 VLAN 则是在 MAC 头部和类型字段中加了一个 802.1Q 标签(VLAN 标签)
当路由器遇到具有 VLAN 的帧时,只会将其转发到所有具有相同 VLAN ID 的端口
二层交换机则是用于打上 / 去除 tag (VID),级联则是分别首末交换机实现:
其根据配置(人为设定),对来自自身特定端口的帧打上对应 VID,并且不同 VID 之间不可以访问(注意不是三层那样的发给所有同 VID)
但是这个实现只是路由器将 VLAN 和 IP 网段进行绑定(也是人为配置的),用于实现类似一下的情况:
- 允许 “办公 VLAN 20(192.168.20.0/24)” 访问 “服务器 VLAN 100(10.0.100.0/24)”;
- 允许 “财务 VLAN 50(192.168.50.0/24)” 访问 “服务器 VLAN 100”;
- 拒绝 “办公 VLAN 20” 访问 “财务 VLAN 50”;
- 拒绝 “所有 VLAN” 访问互联网(如需限制)。
# tag 欺骗
由于部分终端设备也会自己打 VID 标签,所以交换机通常遇到自带 VID 的会默认使用自带的标签:
当 Acess 端口没有设置标签过滤(直接拒绝自带标签的帧),或者直接设为 Truck 模式(用于连接其他交换机,因为同 VID 的设备可以不在一个交换机上,当交换机识别到这个自身不存在这个目标 MAC 时)时可以 tag 欺骗
# 双重标签攻击
通过双层 VID(本征 VID, 一般是 VID1 + 目标 VID)来实现,因为每个交换机都有自己的本征 VLAN(Native VLAN),而在 Truck 链路中本征 VLAN 传输不打标签,所以每个交换机遇到自己的本征 VLAN 就会将其去除再发送到 Truck 链路,接受到的交换机也会将其当作自己的本征 VLAN
而双重 VID 就是使得这个本该没有的 VLAN 的本征 VLAN 带上了其他 VLAN, 欺骗接收到它的交换机
要求自身是本征 VID,而且不能访问自身交换机下的非本征 VID 设备
# 网络层
# 路由劫持
伪造路由协议报文
针对 RIP、OSPF 等路由协议(若未认证),发送伪造的路由条目,将目标网段的流量引向攻击者
ICMP 重定向攻击
发送伪造的 ICMP 重定向报文,欺骗目标主机 “更优路由是攻击者 IP”,劫持流量
# IP 欺骗
SYN Flood 攻击
DDoS 攻击之一,利用 TCP 三次握手,这个攻击就是使用虚假客户端一直发送 SYN 报文(但是不发 ACK)
,使得服务器处于一段时间半连接状态(等待 ACK 报文,会占用服务器的连接数),连接数占满就会影响到正常服务
防御
识别假 IP(通过额外的系统代替应答 SYN-ACK,并且在得不到应答后拉黑,得到就在一段时间内放行)
首包丢弃(因为正常的设备发送 SYN 没有回应时会隔段时间再发,但是虚假的一般只会发一次)
应用层就是类似 XSS 外带 Cookie 这样的
# MIX
# MIMT
中间人攻击(一种会话劫持攻击),是统称,包括 wifi 仿冒,邮件劫持,DNS 欺骗,SSL 劫持等,上面的 ARP 欺骗也算
# TCP 三次握手与状态跟踪
先看图:
TCP 在传输层,所以在以太网包和 IP 包之前封装,其结构:
可以发现端口实际上不在 IP 协议而是 TCP 协议里
32 位序号(seq)用于保证发送的数据有序,
32 位确认号(ack)用于对 TCP 报文的响应,确认上一个 seq,所以通常是报文段的 seq+1
标志位:(ack 和 ACK 不一样)
此外还有 ECE,CWR 等不大重要的玩意儿
# 三次握手
这其中双方的状态:
可以使用各种工具来跟踪 TCP 状态
TCP 通过四次挥手关闭链接(感觉不是很重要)