五、网络层安全协议 IPsec
IPsec: 网络层安全协议
- IP 协议的安全特性:
- 无连接, 不保证顺序到达.
- 重复包, 丢失包.
- 设备简单, 无状态.
- 不提供认证, 完整性, 保密性.
- 访问控制基于 IP 地址, 不完备.
- IPsec 保障 IP 级安全:
- 认证, 保密, 密钥管理.
- 在 IP 层加密(或)认证所有流量.
- 网络层实现端到端的安全性:
- 数据源认证机制.
- 数据加密机制.
- 密钥管理.
- IPsec 的应用:
- 分支机构通过互联网虚拟专用网安全互联.
- 终端用户远程安全访问互联网.
- 与合作者建立外联网和内联网联系.
- 加强电子商务安全性.
- IPsec 的实施:
- 主机实现 (与操作系统集成):
- 保障端到端安全.
- 对用户每个会话提供安全保障.
- 对应用透明, 不必修改用户或服务器软件.
- 对最终用户透明.
- 防火墙实施:
- 无须改变操作系统.
- 为内部所有应用提供安全服务.
- 路由器实施:
- 虚拟专用网 VPN.
- 对通过公用网络的两个子网的流动数据提供安全保护.
- 主机实现 (与操作系统集成):
IPsec 体系结构
文档
包认证和包加密在主 IP 报头中使用扩展报头 AH/ESP 实现安全性.
IPv6 必须支持这些特性, IPv4 可选.
IPsec 文档:
- 体系结构: IPsec 技术一般性概念、需求和机制.
- 认证头 AH: 扩展域, 提供数据源发认证和完整性保护.
- 封装安全载荷 ESP: 扩展域, 提供数据保密、源发认证和完整性保护.
- 加密算法: 描述 ESP 使用的加密算法.
- 认证算法: 描述 AH 使用的认证算法和 ESP 认证选项.
- 密钥管理: 描述密钥管理模式.
- 解释域 (DOI): 其他文档彼此联系需要的值, 包括算法标识及操作参数.
服务
IPsec 安全服务:
安全关联
安全关联 SA 是 IPsec 通信双方对要素的协商, 是安全信息参数集合.
- 包括协议、操作模式、密码算法、认证算法、密钥、生存期.
- SA 是发送方和接收方的单向关系, 为双方通信提供安全服务.
- 双方安全交换需建立两个 SA.
- 安全服务可由 AH 或 ESP 提供, 但不能两者都提供.
SA 确定参数:
- 安全参数索引 SPI:
- 和 SA 相关的位串, 仅在本地有意义.
- 由 AH 和 ESP 携带, 接收方能选择合适 SA 处理包.
- IP 目的地址 IPDA:
- 单一地址, 表示 SA 目的地址.
- 用户末端系统、防火墙或路由器.
- 安全协议标识:
- 标识关联是 AH 或 ESP 安全关联.
- 安全参数索引 SPI:
SA 安全参数:
序列号计数器 (must):
- 32 位整数, 用于生成 AH 或 ESP 头序列号域.
- SA 保护包时增 1, 溢出后 SA 重新协商.
- 防范重放攻击.
序列号溢出标志 (must):
- 值 1 时产生审查事件, 阻止该 SA 继续下发数据包.
反重放窗口 (must):
决定输入 AH 或 ESP 报文是否是重放的计数器.
AH 信息组 (AH must):
- 认证算法, 密钥, 密钥生存期和 AH 的相关参数.
ESP 信息组 (ESP must):
- 加密和认证算法, 密钥, 初始值, 密钥生存期和 ESP 的相关参数.
SA 生存期.
- 生存期结束, SA 终止或用新 SA 替换.
IPsec 协议模式 (must):
- 隧道模式或传输模式.
Path MTU (must):
- 最大传送单位路径和迟滞变量.
安全关联数据库 SADB: 定义 SA.
- IP 数据包中, SA 由 IPv4 或 IPv6 报头中目的地址唯一标识.
- SPI 封装在 AH 或 ESP 扩展头中.
- 收到数据包, 解析三元组 [SPI - 目的地址 - AH/ESP], 并查找 SADB:
- 匹配的条目: 将参数与 AH 或 ESP 头中相关域比较, 一致则处理该数据包, 不一致则丢弃.
- 没有匹配的条目: 输入包—丢弃; 输出包—创建新 SA, 存入 SADB.
- 定义与 SA 关联的参数, 决定进行何种安全操作.
选择子:
- 大粒度区分需要和不需要 IPsec 保护的流量.
- 通过 SPDB 定义 IP 流量与特定 SA 相关.
- SPDB 包括定义 IP 流量子集的入口, 指向该流量 SA 的指针.
- 多个 SPDB 入口可与一个 SA 相连.
- 多个 SA 可与一个 SPDB 入口相连.
- 每个 SPDB 入口由 IP 集合和上层协议定义,称为选择子.
- 过滤输出流量, 并映射到特定 SA.
- SPDB 中比较相应域的值, 寻找匹配入口, 可能是零或多个.
- 存在 SA, 则选定 SA 和关联的 SPI 执行 IPsec 处理.
- 过滤输出流量, 并映射到特定 SA.
安全策略数据库 SPDB: 使用 SA.
- 定义、标识、管理和维护安全策略:
- Discard: 不让包进入或外发.
- Bypass: 不对进入或外发包进行安全服务.
- Apply: 对外发包提供安全服务, 认为接收包已进行安全服务.
- 包括定义 IP 流量子集的入口, 指向该流量 SA 的指针.
- 定义 IP 流量与特定 SA 相关, 决定对哪些出入数据包进行安全操作.
- 定义、标识、管理和维护安全策略:
传输模式与隧道模式
传输模式:
- 为上层协议提供保护, 同时增加 IP 包载荷保护.
典型: 两台主机间的端到端通信.
- 传输模式 AH 认证 IP 载荷和报头选中部分.
- 传输模式 ESP 加密(和认证) IP 载荷, 不包括报头.
隧道模式:
- 对整个 IP 包提供保护, 加上 AH/ESP 域后, 整个数据包和安全域当作新 IP 载荷, 并拥有一个新的外部 IP 报头.
新 IP 包利用隧道在网络中传输, 路由器不能检查内部 IP 报头.
- 隧道模式 AH 认证整个内部 IP 包和外部 IP 报头选中部分.
- 隧道模式 ESP 加密(和认证)整个内部 IP 包, 包括内部 IP 报头.
认证头 AH
数据完整性: 包传输过程中内容不可更改.
认证: 末端系统或网络设备对用户者应用程序进行认证, 提供流量过滤功能, 防止地址欺诈攻击和重放攻击, 基于共享公钥的消息认证码 MAC.
传输模式:
- 不修改 IP 头, 只添加 AH 头.
隧道模式:
- 整个 IP 包作为数据, 增加一个新的 IP 头、AH 头.
处理接收数据包:
- 从端口收到输入数据包, 解析 SA 三元组, 查找 SADB.
- 查找到匹配 SA 条目, 将参数与数据包域参数比较:
- 一致则处理; 不一致则丢弃.
- 没有查找到匹配 SA 条目, 丢弃该数据包
- 查找到匹配 SA 条目, 将参数与数据包域参数比较:
- 使用滑动窗口, 检查序列号重放.
- 计算 ICV, 和数据包中值比较:
- 相等则恢复数据包, 转 IP 协议栈路由; 不相等则丢弃并审计事件.
- 从端口收到输入数据包, 解析 SA 三元组, 查找 SADB.
处理输出数据包:
- 从 IP 协议栈收到转发数据包, 使用选择子查找 SPDB, 获取安全策略.
- 确定实施 IPsec 处理, 查找 SADB.
- SA 未建立, 调用 IKE 协商新的 SA.
- SA 已建立, 直接进行下一步.
- 产生序列号, 防止重放攻击.
选取参数计算 ICV, 转发报文.
封装安全载荷 ESP
保密性: 报文内容保密和流量限制保密.
认证: 与 AH 相同.
填充域功能:
- 加密算法需要明文是倍数, 填充域扩展明文长度.
- 填充长度和邻接头域为右对齐的 32 位字.
- 隐藏载荷实际长度, 提供部分流量保护.
传输模式:
- 不修改 IP 头, 只添加 ESP 头与 ESP 尾, 可选添加 MAC.
隧道模式:
- 整个包为数据, 增加一个新的 IP 头、ESP 头、ESP 尾, 可选添加 MAC.
处理接收数据包:
- 从端口收到输入数据包, 解析 SA 三元组, 查找 SADB.
- 查找到匹配 SA 条目, 将参数与数据包域参数比较:
- 一致则处理; 不一致则丢弃.
- 没有查找到匹配 SA 条目, 丢弃该数据包
- 查找到匹配 SA 条目, 将参数与数据包域参数比较:
- 使用滑动窗口, 检查序列号重放.
- 计算 ICV, 和数据包中值比较:
- 相等则恢复数据包, 转 IP 协议栈路由; 不相等则丢弃并审计事件.
- 根据 SA 指定的算法/密钥/参数, 解密数据, 重构原始 IP 包, 准备路由.
- 从端口收到输入数据包, 解析 SA 三元组, 查找 SADB.
处理输出数据包:
- 从 IP 协议栈收到转发数据包, 使用选择子查找 SPDB, 获取安全策略.
- 确定实施 IPsec 处理, 查找 SADB.
- SA 未建立, 调用 IKE 协商新的 SA.
- SA 已建立, 直接进行下一步.
- 产生序列号, 防止重放攻击.
- 选取参数加密数据报.
选取参数计算 ICV, 分片并转发报文.
安全关联组合
- 单个 SA 可实现 AH 或 ESP, 但不能都实现.
- 例: 特定流量需在主机间提供 IPsec 服务, 安全网关间提供相同流量分离服务.
- 安全关联组合:
- 提供特定 IPsec 服务集所需的 SA 序列.
- 传输邻接: 不使用隧道, 对一个 IP 包使用多个安全协议, 组合 AH 和 ESP 仅允许一级组合.
- 隧道迭代: 通过隧道应用多层安全协议, 允许多层嵌套.
IKE: 为 IPsec 管理密钥
- IPsec 支持两种密钥管理类型:
- 手工: 系统管理员手动配置, SA 永远存在, 小规模、结构简单网络.
- 自动: 大型分布系统中, SA 协商产生, 复杂拓扑和高安全性网络.
- IKE 协议简介:
- 为 IPsec 自动协商交换密钥, 建立 SA, 维护 SADB.
- 在不安全网络环境中, 安全建立或更新共享密钥.
- 通用协议, 可为 SNMPv3, RIPv2, OSPFv2 等保密协议协商参数.
- 目前只在 IPsec 得到应用.
- 精髓:
- 不在不安全网络上直接传送密钥.
- 通过一系列数据交换, 通信双方计算出共享密钥.
- 核心技术:
- DH 秘钥交换算法, 完善的前向安全性 PFS.
- 一个密钥被破解, 不影响其他密钥安全性, 密钥没有派生关系.
- 混合协议:
- ISAKMP 协议的格式和阶段.
- Oakley 协议的模式.
- SKEME 协议的验证公钥加密方法, 定义两种密钥交换方式.
IKE 报文格式
- 继承自 ISAKMP.
- 在任何传输层或 IP 层上实现, UDP 协议端口 500 传输.
- 交换信息形式: 定长报文头, 不定数量载荷.
- 定义 13 种载荷 (SSL 握手协议定义了 10 种).
IKE 体系结构
第一阶段:
协商创建通信信道 IKE SA, 对信道进行验证.
为进一步 IKE 通信提供机密性、完整性及消息源验证.
主模式:
- 6 个消息交互.
对通信双方的身份保护.
积极模式:
- 3 个消息交互.
- 适用于一方地址为动态的情况.
身份保护不必要, 减少信息传输, 提高协商效率.
第二阶段:
- 使用建立的 IKE SA 建立 IPsec SA.
- 快速模式:
- 3 个消息交互.
- 一个 IKE SA 协商可为多个 IPsec SA 协商提供服务.
- 协商内容与协商安全协议相关.
- 使用快速模式信息交换, 一个第二阶段协商可建立多个 SA.
IKE 工作模式
- 传输模式:
- 端节点到端节点, 均实现 IPsec.
- IP 头与数据间插入 IPsec 头, 保护数据载荷.
- 隧道模式:
- 安全网关到安全网关.
- 端系统无需实现 IPsec, 网络节点完成保护功能.
- 内部 IP 头包含实际端节点 IP 地址.
- 工作模式: 嵌套组合.
- 端节点到安全网关模式.
- 外部目的地址总是安全网关的地址.
- 内部目的地址是数据包的最终地址.
IKE 工作过程
- IKE 以守护进程方式后台运行.
- 启动 IKE 服务:
- 内核提交创建 IKE SA 请求.
- 同级 IKE 守护进程提交协商 SA 请求.
- 两个守护进程通过 UDP 协议 500 端口传递消息.
- 使用 SADB 和 SPDB 数据库, 保存在操作系统内核.
- 工作过程:
- 首先查询 SPDB, SPDB 条目隐藏指针, 决定丢弃/绕过/应用.
- IPsec 查询 SADB, 检查合适 SA:
- 有则进行 IPsec 处理.
- 没有则向 IKE 守护进程发出创建 SA 请求.
- IKE 守护进程查询 SPDB, 得到协商参数, 向远程 IKE 进程发出协商请求.
- 协商成功, 新协商 SA 增加到 SADB.
- 协商未成功, IKE 进程提示管理员配置 SPDB 参数.
- 管理员指示 IKE 守护进程不再使用某 SA, IKE 守护进程从 SADB 中删除 SA, 向远地 IKE 守护进程发送删除信息.
- 远地 IKE 进程:
- 删除相应 SA.
- 忽略信息, 保留相应 SA, 但不允许使用其继续通信.
IKE 不足
- IKE 是复杂混合协议集合, 局限于为 IPsec 建立安全关联 SA.
- 标准定义复杂, 导致理解困难, 不同实现互操作困难.
- 协商消息往返次数多, 消耗计算以网络带宽资源.
- 容易受到拒绝服务攻击、中间人攻击、重放攻击.