9. Security Considerations (安全性考虑)
L2TP 协议本身并不提供加密或强认证服务。本章讨论 L2TP 部署中的安全性考虑以及可用的安全机制。
9.1 Tunnel Endpoint Security (隧道端点安全)
隧道端点之间的信任关系是 L2TP 安全性的基础。
端点认证:
LAC 和 LNS 必须能够验证对端的身份。L2TP 提供了一个可选的隧道认证机制:
- Challenge AVP: 发起方在 SCCRQ (启动控制连接请求) 中发送一个随机挑战值。
- Challenge Response AVP: 响应方计算基于共享密钥的响应并在 SCCRP (启动控制连接回复) 中返回。
- 响应计算: 使用 MD5 哈希函数:
MD5(消息类型 + 共享密钥 + 挑战值 + 会话ID)
共享密钥管理:
- 共享密钥应该具有足够的熵 (建议至少 128 位)。
- 共享密钥应该安全存储 (加密存储)。
- 应该定期更换共享密钥。
- 不同的隧道对应该使用不同的共享密钥。
隧道授权:
除了认证之外,还应该实施授权机制:
- 验证对端是否被允许建立隧道。
- 检查对端是否有权限访问特定的资源或服务。
- 使用访问控制列表 (ACL) 限制哪些对端可以建立隧道。
漏洞和缓解措施:
-
中间人攻击:
- 风险: L2TP 隧道认证基于共享密钥,容易受到中间人攻击。
- 缓解: 使用 IPsec 提供端到端的加密和认证。
-
重放攻击:
- 风险: 攻击者可能重放捕获的控制消息。
- 缓解: 使用序列号和 ZLB ACK 机制来检测和防止重放攻击。
-
拒绝服务攻击:
- 风险: 攻击者可能发送大量的隧道建立请求。
- 缓解:
- 限制每个源地址的并发隧道数量。
- 实施速率限制。
- 使用 Cookie 机制 (类似 TCP SYN Cookie)。
9.2 Packet Level Security (数据包级安全)
L2TP 本身不提供数据包加密或完整性保护。
明文传输的风险:
- 窃听: 攻击者可以拦截和读取 PPP 数据包内容,包括用户凭证和应用数据。
- 篡改: 攻击者可以修改传输中的数据包。
- 注入: 攻击者可以向隧道注入恶意数据包。
AVP 隐藏机制:
L2TP 提供了一个 AVP 隐藏机制来保护敏感的控制信息:
-
隐藏过程:
- 使用共享密钥和随机向量 (Random Vector) 生成 MD5 哈希。
- 将哈希值与 AVP 值进行 XOR 运算。
- 如果 AVP 值长度超过 16 字节,重复上述过程。
-
限制:
- AVP 隐藏只是混淆,不是真正的加密。
- 不保护数据通道,只保护控制通道中的特定 AVP。
- 容易受到字典攻击 (如果共享密钥弱)。
建议:
- 不要依赖 AVP 隐藏作为唯一的安全机制。
- 使用 IPsec 或其他隧道级加密技术。
9.3 End to End Security (端到端安全)
即使 L2TP 隧道本身受到保护,端到端安全仍然很重要。
PPP 层认证:
远程系统和 LNS 之间应该进行独立的认证:
-
PAP (密码认证协议):
- 简单的明文密码认证。
- 不建议使用,因为密码以明文传输 (即使在加密的 L2TP 隧道内也应避免)。
-
CHAP (挑战握手认证协议):
- 基于挑战-响应的认证机制。
- 密码不以明文传输。
- 定期重新认证以防止重放攻击。
-
EAP (可扩展认证协议):
- 支持多种认证方法 (EAP-TLS, EAP-TTLS, PEAP 等)。
- 可以提供双向认证和密钥协商。
- 推荐使用 EAP-TLS 提供最强的安全性。
端到端加密:
应用层加密提供了额外的安全层:
- TLS/SSL: 用于保护应用数据 (如 HTTPS)。
- VPN 客户端软件: 在 PPP 之上提供额外的加密层。
多层防御策略:
远程系统 <--PPP认证/加密--> LNS
| |
+--<L2TP隧道>--LAC--------+
|
<IPsec保护>
- 第1层: PPP 层认证 (CHAP/EAP)
- 第2层: L2TP 隧道认证
- 第3层: IPsec 加密和认证
- 第4层: 应用层加密 (TLS/SSL)
9.4 L2TP and IPsec (L2TP 与 IPsec)
强烈建议将 L2TP 与 IPsec 结合使用,这种组合通常称为 L2TP/IPsec。
IPsec 提供的安全服务:
-
机密性:
- 通过 ESP (封装安全载荷) 提供加密。
- 支持多种加密算法: AES, 3DES, ChaCha20 等。
-
完整性:
- 通过 AH (认证头部) 或 ESP 认证提供。
- 使用 HMAC (如 HMAC-SHA256) 验证数据完整性。
-
源认证:
- 验证数据包来源的真实性。
- 防止 IP 欺骗攻击。
-
防重放:
- 使用序列号防止重放攻击。
L2TP/IPsec 架构:
+-------------------+
| PPP 载荷 |
+-------------------+
| L2TP 头部 |
+-------------------+
| UDP 头部 |
+-------------------+
| ESP 头部 | <-- IPsec 加密和认证
+-------------------+
| IP 头部 |
+-------------------+
IPsec 配置选项:
-
传输模式:
- 只加密和认证 IP 载荷。
- 适用于端到端通信。
- 推荐用于 L2TP/IPsec。
-
隧道模式:
- 加密和认证整个 IP 数据包。
- 添加新的外部 IP 头部。
- 适用于网关到网关通信。
密钥管理:
-
IKE (互联网密钥交换):
- IKEv1: 原始版本,两阶段协商。
- IKEv2: 改进版本,更简洁和高效。
- 推荐使用 IKEv2 进行密钥协商。
-
预共享密钥 vs 证书:
- 预共享密钥 (PSK): 配置简单,但密钥分发困难。
- 证书: 更安全,支持大规模部署,强烈推荐。
NAT 穿越 (NAT-T):
当 L2TP/IPsec 需要穿越 NAT 设备时:
- 使用 UDP 封装 ESP (UDP 端口 4500)。
- 定期发送 NAT keepalive 数据包。
- IKEv2 内置 NAT-T 支持。
性能考虑:
- IPsec 加密会增加 CPU 开销。
- 考虑使用硬件加速 (AES-NI 等)。
- MTU 减少需要考虑 (ESP 头部 + ESP 尾部 + 认证数据)。
9.5 Proxy PPP Authentication (代理 PPP 认证)
L2TP 允许 LAC 代表 LNS 进行初始的 PPP 认证。
代理认证机制:
LAC 可以在转发呼叫到 LNS 之前与远程系统协商 LCP 和进行认证:
-
LAC 执行 PPP 认证:
- LAC 与远程系统协商 LCP。
- LAC 执行 PAP 或 CHAP 认证。
- LAC 收集认证信息 (用户名、密码哈希等)。
-
LAC 转发认证信息到 LNS:
- 使用代理 AVP 传递认证信息:
- Proxy Authen Type AVP (29): 认证类型 (PAP, CHAP, etc.)
- Proxy Authen Name AVP (30): 用户名
- Proxy Authen Challenge AVP (31): CHAP 挑战值
- Proxy Authen Response AVP (33): 认证响应
- 使用代理 AVP 传递认证信息:
-
LNS 验证认证信息:
- LNS 根据 LAC 提供的信息验证用户。
- LNS 可以接受或拒绝会话。
安全风险:
-
LAC 妥协:
- 如果 LAC 被攻破,攻击者可以获取用户凭证。
- 缓解: 使用 IPsec 保护 LAC 和 LNS 之间的通信。
-
密码明文传输:
- PAP 密码以明文形式从 LAC 传到 LNS (在 AVP 中)。
- 缓解: 使用 AVP 隐藏机制或 IPsec 加密。
-
信任边界:
- LNS 必须完全信任 LAC 提供的认证信息。
- 恶意的 LAC 可以伪造认证信息。
- 缓解:
- 只在受信任的管理域之间使用代理认证。
- 考虑要求端到端的重新认证。
最佳实践:
-
避免代理 PAP 认证:
- PAP 密码即使被隐藏也容易受到攻击。
- 如果必须使用,确保使用 IPsec 保护。
-
优先使用端到端认证:
- 让远程系统直接与 LNS 进行认证 (不通过代理)。
- 使用 EAP 方法提供更强的安全性。
-
限制代理认证的使用场景:
- 仅在必要时使用 (如快速呼叫建立)。
- 在受信任的网络环境中使用。
-
结合使用多种认证方法:
- LAC 进行初步认证 (用于快速筛选)。
- LNS 进行二次认证 (端到端验证)。
代理认证与 RADIUS 集成:
远程系统 <--PAP/CHAP--> LAC <--RADIUS--> RADIUS服务器
|
|
v
(转发认证信息)
|
v
LNS <--RADIUS--> RADIUS服务器
- LAC 可以使用 RADIUS 验证用户凭证。
- LNS 也可以独立地使用 RADIUS 验证。
- 双重验证提供了额外的安全层。
安全配置检查清单:
- 在 LAC 和 LNS 之间使用 IPsec
- 使用强共享密钥或证书进行隧道认证
- 为每个隧道对使用唯一的共享密钥
- 启用 PPP 层认证 (CHAP 或 EAP)
- 避免使用 PAP 认证
- 定期轮换共享密钥
- 实施访问控制列表限制隧道建立
- 启用日志记录和监控
- 部署入侵检测系统 (IDS)
- 定期进行安全审计和渗透测试