4、IMS注册流程漏洞:注册劫持、注册耗尽攻击、P-Asserted-Identity欺骗、鉴权绕过

IMS注册流程,说白了就是用户向网络证明「我是谁」的过程。这个过程中涉及SIP信令交互、鉴权向量计算、身份头域传递等多个环节。任何一个环节出现设计缺陷或实现疏忽,都可能被攻击者利用。

我个人习惯把IMS注册漏洞分为四类:注册劫持、注册耗尽、PAI欺骗、鉴权绕过。这四类漏洞的利用思路不同,但最终目标都一样——让攻击者获得非法的网络接入权限。

4.1 注册劫持

注册劫持的核心思路是:攻击者冒充合法用户,向S-CSCF发送REGISTER请求,把自己的联系地址(Contact头域)注册上去。这样,后续发往该用户的呼叫或消息,就会被路由到攻击者控制的终端。

我在项目中遇到过一种典型场景:某运营商的IMS网络没有对REGISTER请求中的From头域和Authorization头域做一致性校验。攻击者可以构造一个REGISTER请求,From头域填受害者的URI,但Authorization头域用自己的凭证。S-CSCF只验证了Authorization的正确性,就把受害者的绑定关系更新成了攻击者的Contact地址。

关键点: 注册劫持的成败取决于S-CSCF是否校验了「注册者身份」与「认证者身份」的一致性。

防御手段其实不复杂:S-CSCF必须验证REGISTER请求中From头域的URI,与Authorization头域中的username参数一致。另外,网络侧应该支持「隐式注册」机制——当用户通过鉴权后,网络自动绑定该用户的公共身份和Contact地址,不接受客户端随意指定。

4.2 注册耗尽攻击

注册耗尽攻击属于拒绝服务类攻击。攻击者发送大量伪造的REGISTER请求,导致S-CSCF或HSS的处理资源被耗尽,合法用户无法完成注册。

你想想看,S-CSCF处理每个REGISTER请求都需要:解析SIP消息、查询用户状态、生成鉴权挑战、与HSS交互获取鉴权向量。这些操作都是计算密集型的。如果攻击者以每秒几千个请求的速率发起注册,S-CSCF很快就撑不住了。

我记得有一次在实验室做压力测试,一台中端配置的S-CSCF,在收到每秒5000个REGISTER请求时,CPU直接飙到100%,合法用户的注册响应时间从50毫秒变成了15秒。

避坑指南: 我曾经在现网排查过一起类似问题。最终发现攻击者利用了「无状态注册」的漏洞——某些S-CSCF对未鉴权的REGISTER请求也分配了完整的处理资源。正确的做法是:在SIP协议栈层面就做限速,对未鉴权的REGISTER请求只做最基础的解析,不触发后端查询。

防御注册耗尽攻击,我建议从三个层面入手:

  • 网络层: 在P-CSCF或SBC上做源IP限速,每个IP每秒最多允许N个REGISTER请求
  • 协议层: 对未鉴权的REGISTER请求,S-CSCF只生成挑战并返回401,不查询HSS
  • 应用层: 引入CAPTCHA或动态令牌机制,增加自动化攻击的成本

4.3 P-Asserted-Identity欺骗

P-Asserted-Identity(PAI)是IMS网络中的一个信任头域。它由网络侧(P-CSCF或S-CSCF)插入,用于标识经过鉴权的主叫身份。问题是,如果网络侧没有正确删除或覆盖用户提供的PAI头域,攻击者就可以在请求中伪造PAI,实现主叫号码欺骗。

说白了,PAI的设计前提是「网络侧可信」。但如果P-CSCF的实现有缺陷,没有删除用户发来的PAI头域,那么下游节点就会信任这个伪造的身份。

我在某厂商的IMS设备上发现过一个具体案例:该P-CSCF在处理INVITE请求时,只检查了是否已有PAI头域,如果有就直接透传,没有做覆盖。攻击者可以在INVITE请求中插入一个伪造的PAI,内容为任意合法用户的号码。下游S-CSCF看到PAI已经存在,就不再插入新的PAI,直接转发。结果被叫侧显示的主叫号码就是伪造的。

注意: PAI欺骗的利用场景不限于注册流程。在呼叫流程中同样存在。但注册流程中的PAI欺骗更危险——攻击者可以在注册时就伪造身份,后续所有业务都基于这个伪造身份进行。

防御PAI欺骗的标准做法是:P-CSCF必须无条件删除用户侧发来的所有PAI头域,然后根据鉴权结果重新插入正确的PAI。S-CSCF也应该校验PAI与鉴权身份的一致性。

4.4 鉴权绕过

鉴权绕过是IMS注册漏洞中危害最大的一类。攻击者完全跳过鉴权流程,直接以合法用户的身份注册成功。

常见的鉴权绕过方式有几种:

攻击方式 原理 利用条件
空鉴权 REGISTER请求中不携带Authorization头域,S-CSCF直接接受 S-CSCF配置错误,允许无鉴权注册
重放攻击 截获合法的REGISTER请求,重放给S-CSCF S-CSCF未校验nonce的唯一性或时效性
算法降级 强制使用弱鉴权算法(如MD5),然后暴力破解 S-CSCF支持多种算法,且未强制要求强算法
SQN同步绕过 利用序列号同步机制,让HSS接受旧的鉴权向量 HSS的SQN校验逻辑有缺陷

嗯,这里要注意空鉴权的问题。虽然3GPP标准明确要求REGISTER必须经过鉴权,但某些厂商的S-CSCF在特定配置下(比如内部测试环境),会允许无鉴权的注册请求进入生产网络。我见过一个案例:某运营商的IMS核心网升级后,新版本的S-CSCF默认配置中有一个参数叫「AllowUnauthenticatedRegister」,默认值是True。结果上线后,任何人都可以用任意号码注册。

核心原则: 所有REGISTER请求都必须经过AKA或SIP Digest鉴权。S-CSCF不能信任任何未鉴权的注册请求。

对于重放攻击的防御,关键是nonce的生成和校验。nonce必须包含时间戳或序列号,并且S-CSCF要维护一个nonce使用记录表,每个nonce只能使用一次。另外,nonce的有效期不宜过长,我建议设置为5分钟以内。

4.5 知识体系总览

下面这张图展示了IMS注册流程漏洞的完整知识体系。你可以看到,四类漏洞分别对应注册流程的不同环节:

IMS注册流程漏洞知识体系 IMS注册流程 注册劫持 注册耗尽攻击 PAI欺骗 鉴权绕过 身份一致性校验 Contact劫持 隐式注册防御 源IP限速 无状态处理 CAPTCHA机制 头域覆盖 身份关联校验 网络侧信任 空鉴权 重放攻击 算法降级 SQN同步绕过 防御核心:身份校验 + 资源管控 + 头域清洗 + 强制鉴权

从图中可以看出,四类漏洞的防御思路各有侧重,但都围绕一个核心原则:不信任任何来自用户侧的身份声明,所有身份信息必须经过网络侧的鉴权验证

实战建议: 我个人在做IMS安全评估时,会按照这个知识体系逐项检查。先看S-CSCF的鉴权配置是否强制开启,再看P-CSCF的PAI处理逻辑是否正确,最后做压力测试验证注册耗尽的防护能力。这套流程走下来,大部分注册相关的漏洞都能覆盖到。

好了,关于IMS注册流程的四个核心漏洞就讲到这里。这些漏洞在实际现网中并不少见,尤其是PAI欺骗和鉴权绕过,我几乎在每个运营商的IMS网络中都发现过类似问题。理解它们的原理和防御方法,是做好IMS安全的基础。