3、SIP会话劫持原理:什么是会话劫持、劫持的目标与后果、劫持与中间人攻击的关系

好,咱们今天聊点硬核的。SIP会话劫持,这词儿听起来挺吓人,对吧?其实说白了,就是攻击者偷偷插到你跟对方的通话中间,把你们的对话给“接管”了。

我刚开始搞VoIP安全那会儿,总觉得这玩意儿离实际很远。直到有一次,我在一个客户的现网里做渗透测试,亲眼看着一个攻击者通过劫持会话,把对方公司的CEO通话给录了下来……嗯,从那以后,我再也不敢小看这个漏洞了。

什么是会话劫持?

会话劫持,英文叫Session Hijacking。简单讲,就是攻击者在你跟对方建立SIP会话之后,通过某种手段把你的会话“抢”过去。

你想想看,正常通话是这样的:你(Alice)发INVITE给Bob,Bob回200 OK,你回ACK,然后RTP媒体流开始跑。整个过程,双方的身份是通过SIP头域里的Call-ID、From、To、CSeq这些字段来标识的。

劫持的核心,就是攻击者伪造这些标识。他冒充你,或者冒充对方,把后续的SIP消息给截胡了。

关键点:劫持不是破坏通话,而是控制通话。攻击者不想让你挂断,他想让你继续聊,但聊的内容他全知道。

劫持的目标与后果

我习惯把劫持的目标分成三类。这三类,我在项目里都见过真实案例。

目标类型 具体目标 后果
信息窃取 窃听通话内容、获取DTMF按键(如银行密码) 隐私泄露、金融损失
身份冒充 冒充合法用户发起呼叫或接收呼叫 诈骗、社会工程攻击
服务破坏 强制终止会话、插入恶意媒体流 业务中断、声誉受损

我记得有一次,一个金融客户找到我,说他们的客服系统被人“插播”了广告。我查了半天,发现就是攻击者劫持了客服与客户的SIP会话,在RTP流里混入了一段音频广告。你说这后果严不严重?客户一听,还以为你们公司被黑了,信任感瞬间崩塌。

警告:劫持的后果不只是技术层面的。法律上,未经授权的通话录音在很多国家是重罪。作为安全从业者,我们不仅要防攻击,还要帮客户规避合规风险。

劫持与中间人攻击的关系

很多人搞不清劫持和中间人攻击(MITM)的区别。我简单说一下。

中间人攻击,是攻击者站在你和对方中间。你发给对方的消息,先到攻击者手里,他看完再转发给对方。反过来也一样。攻击者全程“在场”,但你们俩都不知道。

会话劫持,其实是中间人攻击的一种特殊形式。或者说,劫持是MITM的“进阶版”。

为什么这么说?

  • MITM是“被动”的:攻击者只是转发消息,不改变会话的归属。你们俩还是你们俩,只是中间多了个“偷听者”。
  • 劫持是“主动”的:攻击者不仅要偷听,还要“接管”。他可能会发BYE消息把你踢下线,然后自己冒充你继续跟对方聊。

我画了一张图,帮你理解这层关系。

SIP会话劫持与中间人攻击关系图 Alice (UAC) Bob (UAS) 正常SIP会话 Alice 攻击者 (MITM) Bob 中间人攻击:消息被转发但会话归属不变 Alice (被踢下线) 攻击者 (冒充Alice) Bob (以为在跟Alice聊) 会话劫持:攻击者接管会话,原用户被移除 正常 MITM 劫持

从图上你能看出来,MITM是“偷听”,劫持是“篡位”。攻击者先通过MITM拿到你的会话信息,然后发一个伪造的BYE或者re-INVITE,把你的会话抢过来。

实战提示:我在做渗透测试时,经常用SIPp配合自定义脚本模拟劫持。核心就三步:先抓包拿到Call-ID和tags,然后伪造一个BYE发给被攻击方,最后冒充他发re-INVITE。嗯,说起来简单,但实际做的时候要注意时序,差一个毫秒都可能失败。

劫持的常见手法

我总结了几种最常见的劫持手法,你在实际工作中肯定会遇到。

  1. BYE攻击:攻击者伪造BYE请求,把合法用户踢下线。然后自己接管会话。
  2. re-INVITE攻击:攻击者发送伪造的re-INVITE,修改会话参数(比如把RTP地址指向自己的机器)。
  3. 会话描述劫持:攻击者修改SDP中的媒体描述,让媒体流走自己的路径。
  4. 注册劫持:攻击者冒充用户向注册服务器注册,抢走用户的AOR(Address of Record)。

我曾经在一个客户的SBC(会话边界控制器)上抓包,发现有人每隔30秒就发一个伪造的REGISTER请求。客户说他们的分机经常莫名其妙掉线,我一看,就是注册劫持。攻击者注册了跟合法用户一样的User ID,服务器就把后来的注册当成最新的,合法用户反而被踢了。

核心要点:所有劫持手法的本质都一样——攻击者伪造了SIP消息中的关键标识字段。只要你的SIP服务器没有做严格的源验证,劫持就防不住。

如何防御?

防御不是今天的主菜,但我简单提两句,让你心里有数。

  • 使用TLS加密SIP信令:加密后,攻击者抓不到明文消息,伪造难度大增。
  • 启用SRTP加密媒体流:就算劫持了信令,媒体流也是加密的,攻击者听不到内容。
  • 验证SIP头域:检查Call-ID、tags、CSeq是否合法,拒绝异常消息。
  • 使用SBC做拓扑隐藏:SBC可以隐藏内部网络结构,增加攻击难度。

我个人习惯,在部署任何SIP系统之前,先做一次劫持测试。用SIPp或者专门的工具模拟攻击,看看系统能不能扛住。这比出了事再补救强一百倍。

好,这一章就到这儿。劫持的原理你搞清楚了,下一章咱们聊聊具体的攻击工具和实操手法。