2. 信令面分析:SIP注册流程、SIP会话建立流程、SIP会话释放流程
好,咱们进入正题。信令面,说白了就是VoLTE的“神经中枢”。你打电话时听到的嘟嘟声、对方的彩铃、甚至挂断后的忙音,背后全是SIP消息在来回跑。我当年刚接触VoLTE时,总觉得抓包文件里那些SIP消息像天书,后来摸清了套路,才发现其实就那么几板斧。
今天我就带你把这三板斧拆开看看:注册、建立、释放。这三个流程搞懂了,信令面你就通了八成。
核心观点:SIP信令是VoLTE通话的“控制面”,它不承载语音数据,但决定了通话能不能打、能不能接、什么时候挂。攻击者盯上信令面,往往是为了劫持会话或窃听。
2.1 SIP注册流程:你的手机如何“登录”网络
注册,说白了就是你的手机告诉IMS核心网:“嘿,我在这儿,这是我的号码,有事找我。” 没有注册,你连电话都拨不出去。
我见过不少刚入行的朋友,抓包看到REGISTER消息就以为注册成功了。其实没那么简单。注册流程里藏着好几个关键点,任何一个出问题,都会导致注册失败。
2.1.1 注册流程的核心步骤
- UE发送REGISTER请求:手机向P-CSCF(代理呼叫会话控制功能)发送REGISTER消息,里面带着用户的IMPI(私有用户标识)和IMPU(公有用户标识)。
- 401 Unauthorized挑战:核心网返回401,要求手机提供认证信息。这是为了防止伪造注册。
- UE重新发送REGISTER(带认证):手机根据401里的nonce值,计算AKAv1-MD5摘要,再次发送REGISTER。
- 200 OK确认:核心网验证通过后,返回200 OK,注册成功。
避坑指南:我曾经遇到过一个案例,手机一直注册失败,抓包发现401返回后,手机没有重新发送REGISTER。后来查出来是SIM卡里的鉴权算法参数配置错了。你想想看,如果AKA算法不匹配,核心网永远认不出你。
2.1.2 注册流程中的安全要点
| 消息 | 方向 | 关键字段 | 安全风险 |
|---|---|---|---|
| REGISTER | UE → P-CSCF | From, To, Contact | 伪造Contact头域可劫持注册 |
| 401 Unauthorized | P-CSCF → UE | WWW-Authenticate (nonce) | nonce重用可导致重放攻击 |
| REGISTER (带认证) | UE → P-CSCF | Authorization (response) | response计算错误导致认证失败 |
| 200 OK | P-CSCF → UE | Expires | 过期时间设置不当导致频繁注册 |
我个人习惯在分析注册问题时,先看401里的nonce是不是每次都不一样。如果nonce固定不变,那核心网配置就有问题,攻击者可以轻松重放注册请求。
2.2 SIP会话建立流程:从拨号到接通
注册完了,咱们来打电话。会话建立,就是主叫拨号、被叫响铃、最后接通的全过程。这个流程里消息最多,也最容易出问题。
2.2.1 建立流程的典型消息交互
主叫UE P-CSCF S-CSCF 被叫UE
| | | |
|--- INVITE --->| | |
| |--- INVITE --->| |
| | |--- INVITE --->|
| | |<-- 183 ---- |
| |<-- 183 ---- | |
|<-- 183 ---- | | |
| | |<-- 180 ---- |
| |<-- 180 ---- | |
|<-- 180 ---- | | |
| | |<-- 200 ---- |
| |<-- 200 ---- | |
|<-- 200 ---- | | |
|--- ACK ----->| | |
| |--- ACK ----->| |
| | |--- ACK ----->|
|=============== 语音媒体流 ==================>|
嗯,这里要注意几个关键点:
- INVITE消息:这是会话建立的起点。里面带着SDP(会话描述协议),描述了手机支持的编解码、IP地址、端口等信息。
- 183 Session Progress:被叫返回183,表示正在处理。同时SDP里会带上被叫的媒体能力。
- 180 Ringing:被叫开始振铃。这时候主叫听到“嘟嘟”声。
- 200 OK:被叫接听。主叫收到200后,发送ACK确认,媒体通道正式建立。
警告:我遇到过一种攻击手法,攻击者在INVITE消息里篡改SDP中的IP地址,把媒体流引向自己的设备。这就是所谓的“SDP劫持”。你想想看,如果主叫的语音流被引到攻击者那里,通话内容就完全暴露了。
2.2.2 会话建立中的关键参数
| 参数 | 所在消息 | 作用 | 攻击风险 |
|---|---|---|---|
| Call-ID | INVITE | 唯一标识一个会话 | 伪造Call-ID可导致会话混淆 |
| From/To | INVITE | 标识主叫和被叫 | 篡改后可冒充他人 |
| c= (连接地址) | SDP | 媒体流的IP地址 | 篡改后劫持媒体流 |
| m= (媒体描述) | SDP | 媒体类型和端口 | 篡改后导致媒体协商失败 |
说白了,会话建立就是主叫和被叫在“握手”。握手的每一步都带着关键信息,攻击者只要在中间插一脚,就能搞事情。
2.3 SIP会话释放流程:挂断电话的背后
挂断电话,听起来简单,但信令面也有讲究。会话释放可以是主叫挂、被叫挂,甚至网络侧强制释放。
2.3.1 正常释放流程
- 任一方发送BYE请求:比如主叫挂断,UE发送BYE给P-CSCF。
- BYE路由到对端:BYE经过P-CSCF、S-CSCF,最终到达被叫。
- 200 OK确认:被叫返回200 OK,会话正式结束。
这里有个细节:BYE消息里必须包含正确的Call-ID和From/To标签。如果标签不匹配,核心网会拒绝释放。
个人经验:我曾经排查过一个“电话挂不断”的故障。抓包发现BYE消息里的To标签少了一个字符。你想想看,就一个字符的差异,核心网就不认账。所以分析释放问题时,一定要仔细核对标签字段。
2.3.2 异常释放场景
- CANCEL:主叫在振铃阶段挂断,发送的是CANCEL而不是BYE。
- 网络侧释放:核心网检测到异常(如媒体超时),主动发送BYE强制释放。
- 403 Forbidden:如果攻击者伪造BYE,核心网可能返回403拒绝释放。
注意:有一种攻击叫“BYE攻击”,攻击者伪造BYE消息发给被叫,导致通话被强制中断。防御方法是在BYE消息中加入认证头域,或者使用IPSec保护信令。
2.4 信令面分析的实战建议
说了这么多,最后给你几个实战建议:
- 抓包工具:我习惯用Wireshark,过滤条件设为
sip或sdp,一目了然。 - 关注时序:SIP消息的时序很重要。比如INVITE之后如果长时间没收到183,说明被叫侧有问题。
- 检查SDP:媒体协商失败是常见问题。重点看编解码列表是否匹配,IP地址是否可达。
- 验证认证:注册流程里,401挑战的nonce和response必须正确。我建议用工具手动计算一下response,看手机算的对不对。
好了,信令面的三大流程就讲到这里。记住:注册是前提,建立是核心,释放是收尾。每一个环节都可能成为攻击者的突破口。下次你抓包分析时,不妨按这个思路走一遍,会发现很多有意思的东西。
一句话总结:SIP信令是VoLTE的“指挥系统”,搞懂注册、建立、释放三个流程,你就掌握了信令面分析的基本功。