网络层安全

网络层安全

为啥要有网络层安全IPSec

TLS 很强,但它不是万能的

TLS 主要保护的是传输层以上的数据,比如 HTTP 内容。

但它通常不隐藏 IP 地址,所以别人还是能知道:

你在和哪个服务器通信

通信双方是谁

一些流量模式信息

IPSec 是在网络层干活,所以它更"底层",覆盖范围更大。

网络层机密性

发送方对 IP datagram 的 payload 加密;这个 payload 里可以是 TCP、UDP、ICMP 等;实现位置在传输层下面,所以对更高层透明;因此它能对"所有上层数据"提供一种 blanket coverage

不管上面跑的是网页、邮件、P2P、还是 TCP SYN,到了 IP 层,统统都能一起保护。

这就是它和 TLS 的最大思维差别:

  • TLS:保护某个应用连接
  • IPSec:保护一整类 IP 通信

VPN

VPN 的动机是:机构想要私有网络,但专线、路由器、链路、DNS 基础设施都很贵,于是把办公点之间的流量放到公共互联网传,但在进入公网前先加密,使其逻辑上和其他流量隔离。

VPN本质是在公网传输,但让数据看起来像走自己家的私网通道。

IPSec 提供哪些安全服务?

  1. 机密性:别人看不懂内容
  2. 完整性:别人改了你能发现
  3. 源认证:确认数据确实来自预期对端
  4. 抗重放:旧包不能反复拿来骗你

两种模式:

  1. Transport Mode
    • 保护 IP payload
    • 原始 IP header 不加密
  2. Tunnel Mode
    • 整个原始 IP 包都被封装
    • 外面再加一个新的 IP header

Transport mode

只保护负载,不保护原 IP 头。

原包大概是:[原IP头][TCP/UDP头+数据]

用了 transport mode 后,大概变成:[原IP头][IPSec头][被保护的TCP/UDP头+数据]

别人仍然能看到源 IP和目的 IP,但看不到里面的传输层数据内容。

Tunnel mode

把整个原始 IP 包塞进一个新包里。

原包:

[原IP头][原payload]

隧道模式后:

[新IP头][IPSec头][原IP头][原payload][一些尾巴]

这样公网只看到:

  • 外层新 IP 头
  • 看不到里面真正通信双方的原始 IP 头

两种格式 AH 和 ESP

  1. ESP 支持 confidentiality、integrity、source authentication
  2. AH 支持 integrity、source authentication

AH : Authentication Header

它干的主要是:

  • 验证完整性
  • 验证来源

不负责加密内容

所以它不能提供机密性。

ESP : Encapsulating Security Payload

它是现在更主流的那个,因为它能:

  • 加密
  • 做完整性保护
  • 做来源认证

AH 提供完整性、源认证。ESP 还额外提供加密

Transport Mode(上半部分)

数据从上往下走,到IPSec层时,ESP直接插在原始IP头后面

orig IP hdr | ESP hdr | TCP hdr | Data | ESP trlr | ESP auth

关键点:IP头不动,ESP只加密/保护IP头后面的payload(TCP头+数据)。蓝色箭头标的就是被ESP加密的范围。

适用场景:两台主机之间直接通信,比如你的电脑直连服务器。

Tunnel Mode(下半部分)

ESP把整个原始IP包 (包括orig IP hdr)都包进去加密,然后外面再套一个全新的IP头

new IP hdr | ESP hdr | orig IP hdr | TCP hdr | Data | ESP trlr | ESP auth

关键点:原始IP头也被加密了,外面的new IP hdr是网关的地址。蓝色箭头范围更大,连原始IP头都在加密区内。

SA : Security Associatio

SA 不是"协议本身"

它更像是:

一条已经谈好的安全规则记录。

比如"从 R1 发到 R2 的流量,应该用 AES 加密、用某个 HMAC 算法校验、用哪个 key、SPI 是多少......"

为什么 SA 是单向的?

这点很多人第一次都会懵。

A → B 是一条 SA B → A 还得再来一条 SA

因为:

  • 序列号各管各的
  • 密钥也可能不同
  • 参数也可能不同

所以双向通信通常至少要两条 SA。

SAD : Security Association Database

它就是:

存 SA 的数据库。

发送时:发送端去 SAD 里查:这个包该怎么处理?

接收时:

  1. 接收端看包里的 SPI
  2. 用 SPI 去索引 SAD
  3. 找到对应 SA
  4. 按这条 SA 的规则解密/验完整性/验认证

Tunnel + ESP 的包

ESP header

有两个关键字段:

  • SPI:告诉接收方该去 SAD 里找哪条 SA
  • Sequence number:防重放攻击

ESP trailer

  • padding:给分组密码对齐用
  • next header:告诉里面原始上层是什么,比如原来是 IP / TCP / UDP 之类

ESP auth

这是认证值,课件说 MAC 用共享密钥创建,典型就是 HMAC

发送端怎么把普通包变成 IPSec 包?

  1. 在原 datagram 后面加 ESP trailer
  2. 按 SA 指定算法和 key 对结果加密
  3. 在前面再加 ESP header
  4. 对整个 enchilada 计算认证 MAC
  5. 把 MAC 加到后面
  6. 最外面再加一个全新的 IP header

SPD : Security Policy Database

这个不是"怎么做",而是"要不要做"。

  • SPD :决定 what to do
  • SAD :决定 how to do it