摘要

  • 通过认证的 RADIUS Change-of-Authorization 或 Disconnect 请求,只能证明某个已接受的协议跳点发送了控制报文。它不能单独证明发送方有权代表该租户、selector 只对应一条当前会话,或接入设备支持这项变更。
  • 可辩护的证据链必须把最初的接入与计费记录,连接到 proxy 路径、NAS、在线会话键、请求属性、重放身份、ACK/NAK、已安装策略和实际流量。RADIUS/1.1 改善传输保护,却不会把这些判断压缩成一个结果。

同一个名字后面有两条在线连接

开篇是用于分析的运维情景,不是对真实事故的报道。一个订户的电脑接入办公无线网,手机同时漫游到受访网络。两条记录使用相同用户名,但 Acct-Session-Id、NAS、接入点和现行策略各不相同。

风险系统打算限制电脑,便发送一条校验正确的 CoA-Request,里面只有用户名和新过滤规则。接收端查到两条在线记录。若把规则装到两边,模糊标识就被提升为跨会话权力;若挑最新一条,设备凭空发明了发送方没有表达的规则;若拒绝多重命中,系统则保留了最重要的边界:控制意图抵达有效,不代表执行对象已经唯一。

RFC 5176 分开定义发出请求的 Dynamic Authorization Client、接收请求的 Dynamic Authorization Server、提供接入服务的 NAS,以及每一次服务对应的 session。一个用户可以先后或同时拥有多条会话。由此可知,RADIUS client 地址不是订户,NAS 不是会话,用户名也不是唯一的当前连接。

共享密钥或 TLS peer 身份说明的是技术关系。它不自动携带每个租户、每项动作和每条连接的完整业务授权。把这些对象写成一个“认证成功”,会让系统在最需要收窄权力时失去维度。

Disconnect 不是 CoA 失败后的无害退路

CoA-Request 改变选定会话的授权状态;Disconnect-Request 终止会话并丢弃相关上下文。若过滤规则无法应用就直接断线,原本可逆的局部决策会变成破坏性动作。

两种能力应当分配给不同角色。能够调低速率的策略系统,不应因为集成方便就自动获得断开所有订户的权限。Disconnect 还会移除诊断所需的状态,使“控制器发错动作”变成“用户突然掉线”,成本由接入运营者和用户承担。

会话命中数量本身就是授权条件

RFC 5176 允许用多项属性定位会话。Acct-Session-Id 可把在线动作连回较早的计费事件,NAS port、被叫或主叫 station、已分配地址等信息则可继续收窄范围。User-Name 或 Chargeable-User-Identity 有助于防止跨用户动作,但它们不会因为出现在报文里就成为全局唯一键。

接收端应计算完整 selector 对当前状态的实际 cardinality:零条、一条或多条。这不是三种查库结果,而是三种不同的执行决定。Session Context Not Found 与 Multiple Session Selection Unsupported 等 Error-Cause 之所以存在,正是因为系统不能靠猜测把前后两种情况改写成成功。

会话键还必须带 provenance。应保留生成它的 NAS、租户或 realm、启动时间和关键分配属性。设备重启、编号复用或用户移动后,孤立的 identifier 可能指向另一个上下文。把计费记录与在线 inventory 做 join,不是授权之前的文书工作;这个 join 本身决定谁会承受变更。

报文来自可信跳点,不等于发送方拥有普遍权力

历史 RADIUS 动态授权依照 UDP 源地址选择共享密钥。Authenticator 正确,说明报文符合这个跳点为某个 client 配置的密钥关系。它没有证明哪位人员批准了动作,也没有证明该 client 能代表目标租户,更不能证明中间 proxy 在保护下一个跳点之前没有修改内容。

RFC 5176 直接指出共享 NAS 的授权风险:若没有额外校验,一个服务商可能改变另一个服务商用户的会话。为每个 client 使用不同密钥、限制网络来源和执行 reverse-path 检查都能收窄暴露面,但本地仍需回答:这个来源是否能对这个 realm、NAS、租户和 session 执行这项动作?

RFC 8559 为漫游场景补上反向路径。home network 保存 Operator-Name,并在受访网络提供时保存其生成的 opaque Operator-NAS-Identifier。后来的 CoA 根据 operator realm 找到真正承载会话的 visited network,而不是沿用户名的 home realm 倒走认证路径。

受访网络再把 opaque token 解析为内部 NAS,移除只供 proxy 使用的 signalling 字段,生成适合本地设备的请求。这条链能够被审计,却不是端到端不可变。每个 proxy 都能看到并修改自己处理的 RADIUS 内容,然后为下一跳重新提供保护。最终证据必须列出委托路径,不能把 NAS 收到的内容直接归因于远端某位管理员。

唯一选中的会话仍可收到无效动作

目标明确以后,还要逐项判断请求是否可执行。filter、VLAN、速率或 vendor-specific 操作可能不被这台 NAS 支持,不适用于当前接入方式,或超出该租户的权限。RFC 5176 要求最终接收端把动作属性视为 mandatory:只要其中一项无法完成,就应返回 NAK,而不是悄悄做一部分再宣布成功。

selector 与 action 也必须分开。同一个 vendor-specific 属性不能同时用来决定“改谁”和“改什么”。如果一个值兼任两者,系统便失去在识别对象与执行动作之间拒绝越权的机会。

部分改变还需要下层协议重新协商。控制器能编码某个属性,不代表 NAS 的 running implementation 拥有相应能力。中央规则集只能描述已部署现实,不能用配置目录替设备创造功能。

重传不代表第二次管理决定

历史 UDP 模式可能丢包,因此同一请求会被重发。向同一服务器重传完全相同的内容时,source port、Identifier 与 Request Authenticator 保持不变;属性一旦改变,就必须形成新的请求身份。接收端要在有效时间内识别 duplicate,避免“响应丢失”变成“动作执行两次”。

没有 IPsec replay protection 时,RFC 5176 建议携带 Event-Timestamp。双方用可接受的时间窗口判断新鲜度,重传仍使用最初时间。duplicate memory 与时间窗口必须对齐;若前者先过期,一条仍被视为新鲜的旧请求便可能再次执行。

这个 timestamp 只记录原始协议报文何时发出。它不是工单批准时间,不证明 session 未被替换,也没有对业务上下文提供端到端签名。Response cache 同样会产生误读:两次收到 ACK,可能只是同一次执行和一次缓存回复。观测系统应分开初次请求、重传、已抑制 duplicate、缓存响应和真正的新决定。

RADIUS/1.1 改的是传输边界

RFC 9765 定义 ALPN 名称 radius/1.1,并要求 TLS 1.3 或更高版本。双方明确协商后,connection authentication、confidentiality 与 integrity 由 TLS 承担。历史 Request/Response Authenticator 不再参与该模式,Message-Authenticator 也不再负责报文认证。

四字节 Token 取代旧 Identifier,用于关联 request 与 response。同一 connection 上的新报文使用新 Token;未改变的 DTLS 重传保持原值。Duplicate 判断以 connection 为范围,因此另一条连接上的相同 Token 是不同事件。

这是实质性的安全迁移,但它不会选择订户、授权跨租户动作或证明 filter 已经进入设备。CoA 和 Disconnect code 以及绝大多数 attribute 语义保持不变。运维记录需要两条链:一条记录证书、ALPN、TLS 版本、connection 与 Token;另一条记录 realm、NAS、租户、session selector、action、本地决定和实际效果。第一条全绿,不能补齐第二条的缺口。

ACK 是设备证词,不是完整效果

CoA-ACK 表示 NAS 声称已经完成变更;CoA-NAK 和 Error-Cause 描述拒绝类型。最终验证还要比较动作前后的在线 session state、已安装 filter 或 VLAN、速率策略、计费连续性和代表性流量。

ACK 正确但设备状态没变,是 enforcement defect;状态改变但响应丢失,是 transport observation defect;NAK 之后却出现部分变化,是 atomicity defect。把三者都计为“CoA 失败”,会把修复对象藏起来。

最小证据链包括:初始 access 与 accounting event、当前 session inventory、授权来源与 proxy path、请求原始字节或隐私安全 fingerprint、Identifier 或 Token、Event-Timestamp、selector cardinality、本地 capability/policy 结果、ACK/NAK、installed state、packet observation,以及范围相同的 reversal 记录。

用两个相似会话测试权力边界

在隔离环境同时建立两条共享诱人标识的会话,但让它们拥有不同 Acct-Session-Id 与 NAS context。发送只授权其中一条的 CoA,证明只有目标策略改变、其流量按新规则运行,另一条完全不受影响。

然后移除区分字段。系统应当拒绝 ambiguity,不按最新记录或数据库顺序任选一条。重放原请求不应产生第二次效果。继续测试 stale timestamp、错误 realm、错误 NAS 和 unsupported action,并让每个失败落在明确的边界。

Rollback 应使用保存的旧状态执行同范围反向变更。除非原决定就是终止 session,否则 Disconnect 不能冒充回滚。真正安全的测试不仅证明正确请求会成功,还证明所有邻近但错误的权力都无法碰到受保护会话。

来源