网络安全 网络传输


深入的传输层和链路层

计算机系统经常需要与其他系统通信;这是通过将它们放在同一网络上来完成的。有几种不同的技术可以使计算机通过不同类型的网络进行通信。在本节中,我们将深入研究大多数网络中使用的协议。

我们使用的网络由多种协议组成,其中一些协议是此类的特色。网络中还使用许多其他协议,所有这些协议都可能存在与之相关的安全风险。


TCP ("Transmission Control Protocol")

就像 IP 使用 IP 地址进行寻址一样,TCP 和 UDP 使用端口。端口(用 0 到 65535 之间的数字表示)指示哪个网络服务应处理请求。

在下图中,我们可以看到 TCP 数据包以及检查网络流量的任何人都会看到的样子。

TCP Header

我们可以看到该图显示源端口和目标端口都是 16 位,这对于 UDP 来说是相同的。序列号和确认号用于三向握手并可靠地传输数据。我们还可以看到用于指示数据包类型的控制位。其他标头也发挥着重要作用,但在安全路线之外。


TCP 3 次握手

TCP 使用三向握手来允许两个系统进行通信。握手使用 32 位 PRNG ("Pseudo Random Number Generator") 数字来建立握手。握手强制双方都打算进行沟通。

这是一个图形来说明:

TCP Handshake

TCP如何进行通信的说明:

  1. 客户端通过发送一个数据包来发起通信,该数据包的标头中设置了控制位 SYN、序列号字段中的 PRNG 编号以及目标目标端口。网络层(第 3 层)允许将数据包发送到远程系统。该数据包称为 SYN 数据包。
  2. 服务器接收数据包,从客户端读取序列号并制作响应。响应将客户端的定序器编号设置为确认字段,并添加数字 1。此外,响应包含控制位 SYN 和 ACK 设置,并且序列号设置为服务器 PRNG 号。该数据包称为 SYN/ACK 数据包。
  3. 客户端接收 SYN-ACK 数据包并完成握手,返回一个设置了 ACK 控制位的数据包。最终数据包还通过在标头的确认字段中返回 PRNG 编号来确认来自服务器的 PRNG 编号。

此过程通常称为 SYN、SYN/ACK、ACK 3 次握手。

在下图中我们可以看到两台主机进行3次握手:

Handshake in Wireshark

屏幕截图显示了 Wireshark 工具用于捕获和检查数据包。 Wireshark 是一个非常好的实用程序,因为它允许我们可视化数据包并更深入地检查它们。屏幕截图显示了代表 3 次握手的 3 个数据包。请注意代表通信双方的源列和目标列。 Info 字段显示源端口和目标端口,包括(在方括号内)SYN、SYN/ACK 和 ACK。

下一个屏幕截图显示了三方握手后各方之间正在传送的数据。 TCP 数据包内部的数据已在图片底部附近突出显示。

TCP Data

上面的屏幕截图显示了给 W3School 学生的消息。你能看见它吗?



欺骗流量

如今网络上几乎没有任何限制,任何人都可以根据自己的意愿创建数据包。任何人都可以创建数据包,并将标头的任何字段设置为他们想要的任何值。这称为欺骗,允许攻击者代表其他人发送流量。

Spoofing

TCP 具有内置于协议中的安全性,但它依赖于 PRNG ("Pseudo Random Number Generator") 数字生成器的强度。如果可以猜测通信双方的序列号,则 TCP 的安全性可能会受到损害,因为攻击者可以通过 TCP 进行欺骗通信。

许多协议很容易被欺骗,但 TCP 提供了一定的弹性来应对这种情况。 UDP 和 ICMP 等协议不提供类似的保护。

欺骗数据包通常是由具有根/系统能力(即操作系统的最高权限)的攻击者完成的。原因是操作系统强制使用 API,这迫使用户遵守 RFC ("Request For Comments") 中指定的通信规则。如果攻击者没有最高权限,他们将无法在网络上制作自己的数据包。


UDP ("User Datagram Protocol")

UDP 用于不需要 TCP 弹性和安全性的流量,通常是 VOIP 等应用程序,但在现代世界中,更多应用程序使用 UDP 来支持快速数据包传输,并将弹性和安全性内置于 OSI 模型的更高级别中; QUIC 就是一个例子。

查看 UDP 标头,我们可以看到使用相同的源端口和目标端口,但没有序列号或控制位。该协议的开销要少得多,从而可以加快数据传输速度。

UDP Header

由于UDP不具备3次握手等功能,因此UDP很容易被欺骗。


交换网络

系统通过交换机连接到 LAN ("Local Area Network")。交换机使用 MAC ("Media Access Control") 地址进行寻址,而不是更广为人知的 IP 地址。交换机在局域网(即您的家庭网络或组织的分支机构内)转发流量。 MAC 地址被设计为唯一的,但只要拥有管理员权限,任何人都可以更改其 MAC 地址。

由 6 个八位字节定义的 MAC 地址,例如:FC:F8:AE:12:34:56

前三个八位位组代表制造通信设备的组织,称为 OUI ("Organizational Unique Identifier")。上述 MAC 地址已分配给 Intel Corporate。您可以在很多地方搜索 MAC 地址,例如:https://www.adminsub.net/mac-address-finder/intel。

最后三个八位位组由制造商确定。


ARP

ARP ("Address Resolution Protocol") 是一种允许计算机系统知道哪个 MAC 地址属于哪个 IP 地址的协议。如果必须路由流量,计算机系统会将流量转发到系统上配置的默认网关。

ARP 与 DNS 一样,是一种将一个地址解析为另一个地址的协议。每次系统尝试与 LAN 上的 IP 地址通信时,它都会检查其 ARP 缓存以查看最近是否已解析。

你可以检查你自己的ARP。只需运行命令arp -a在 Linux 或 Windows 上。这揭示了您的系统最近与哪些系统进行了通信。

Alice: Does anyone know the MAC address of 192.168.10.10?
Bob: Sure thing Alice, here is my MAC Address.

VLAN ("Virtual LAN")

VLAN,通常称为专用 VLAN,是交换机在帧内嵌入标签(或 VLAN ID)的一种方式。然后,多个交换机可以确保 LAN 上的计算机系统只能与某些其他系统(即具有相同 VLAN ID 的其他系统)通信。