第二章:IMS信令面攻击面分析
好,咱们进入正题。IMS核心网的信令面,说白了就是整个网络的神经系统。SIP协议在这里跑来跑去,控制着呼叫的建立、修改和释放。攻击者盯上的,也正是这条信息高速公路。
我个人习惯把信令面攻击分成两类:一类是冲着协议本身来的,另一类是冲着实现细节来的。今天咱们重点聊前者——SIP协议层面的攻击面。
2.1 SIP消息结构:攻击者眼中的“地图”
SIP消息长什么样?你抓个包看看就知道了。一个典型的SIP INVITE请求,大概长这样:
INVITE sip:bob@ims.example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK74b43
Max-Forwards: 70
From: <sip:alice@ims.example.com>;tag=12345
To: <sip:bob@ims.example.com>
Call-ID: a84b4c76e66710
CSeq: 1 INVITE
Contact: <sip:alice@192.168.1.100>
Content-Type: application/sdp
Content-Length: 142
v=0
o=alice 2890844526 2890844526 IN IP4 192.168.1.100
s=-
c=IN IP4 192.168.1.100
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
嗯,这里要注意。攻击者拿到这个结构,就像拿到了一张地图。每个字段都可能成为突破口。
关键字段的攻击价值:
| 字段 | 攻击价值 | 我见过的案例 |
|---|---|---|
| From/To | 伪造身份、冒充他人 | 有人改From头域冒充管理员 |
| Via | 隐藏真实路径、反射攻击 | 利用Via做DDoS放大 |
| Contact | 劫持后续请求 | 改Contact让所有请求发到恶意节点 |
| Call-ID | 会话劫持、重放攻击 | 重放合法Call-ID的请求 |
| CSeq | 消息顺序攻击 | 乱序CSeq导致状态机混乱 |
| Content-Type | 注入恶意SDP | SDP里塞畸形参数导致解析器崩溃 |
核心观点:SIP消息的每个头域都是攻击面。别以为标准协议就安全,标准只是规定了格式,没规定实现不出错。
2.2 常见攻击向量:我踩过的坑
做安全评估这么多年,有些攻击向量反复出现。说白了,攻击者就那几招,但招招致命。
2.2.1 SIP洪水攻击
这个最简单,也最有效。攻击者疯狂发INVITE或REGISTER请求,把IMS核心网的处理能力打满。我记得有一次,客户说他们的P-CSCF一到下午就卡,查了半天,发现是某个IP在持续发REGISTER请求,每秒3000个。嗯,典型的REGISTER洪水。
2.2.2 SIP畸形消息攻击
攻击者构造不符合RFC的SIP消息,比如超长头域、非法字符、缺失必选字段。我曾经遇到过一起案例:攻击者在From头域里塞了5000个A,结果S-CSCF直接崩溃。为什么?因为解析器没做长度检查,缓冲区溢出了。
2.2.3 SIP重放攻击
攻击者抓取合法的SIP请求,然后重新发送。你想想看,如果抓到一个REGISTER请求,重放它,是不是就能冒充别人注册?我见过一个真实案例:攻击者重放了一个合法的INVITE请求,导致对方误以为还在通话中,从而拒绝新的呼叫。
2.2.4 SIP劫持攻击
这个更高级。攻击者通过修改SIP消息中的Contact头域或Route头域,把后续的信令流量引到自己的服务器上。说白了,就是中间人攻击的信令版。
我的建议:做安全测试时,优先测这几个向量。它们覆盖了90%以上的信令面漏洞。
2.3 信令劫持原理:攻击者是怎么“偷”走通话的
信令劫持,说白了就是攻击者让IMS网络以为“我就是你”。怎么做到的呢?
典型场景:注册劫持
攻击者先监听网络,抓到用户的REGISTER请求。然后,攻击者伪造一个REGISTER请求,把自己的Contact地址填进去。IMS核心网收到后,更新位置信息,把用户的后续请求都转发到攻击者的地址。
你想想看,如果攻击者成功劫持了注册,会发生什么?
- 所有打给用户的电话,都先到攻击者那里
- 攻击者可以录音、转接、甚至冒充用户接听
- 用户完全不知情,因为攻击者可以再把呼叫转回去
我曾经在测试环境中复现过这个场景。过程其实不复杂:
# 攻击者伪造的REGISTER请求
REGISTER sip:ims.example.com SIP/2.0
From: <sip:user@ims.example.com>;tag=attacker
To: <sip:user@ims.example.com>
Call-ID: attacker-generated-id
CSeq: 1 REGISTER
Contact: <sip:attacker@192.168.1.200>;expires=3600
嗯,这里要注意。如果IMS核心网没有做认证,或者认证机制有缺陷,这个请求就会被接受。攻击者就这么简单地把用户劫持了。
警告:别以为有IPSec或TLS就安全了。很多IMS部署只在特定接口加密,信令面内部网络可能是明文的。攻击者只要进入内网,就能为所欲为。
2.4 SIP扫描技术:攻击者的“侦察兵”
攻击者要动手,先得摸清你的网络。SIP扫描就是干这个的。
常见的SIP扫描技术:
- OPTIONS扫描:发OPTIONS请求,看对方回什么。如果回200 OK,说明SIP服务在运行。我习惯用这个做快速探测。
- REGISTER扫描:尝试注册不同的用户,看哪些存在。返回403 Forbidden说明用户存在,返回404 Not Found说明不存在。
- INVITE扫描:发INVITE请求,看对方回什么。回180 Ringing说明用户在线,回486 Busy说明用户忙。
- 端口扫描:扫5060/5061端口,看哪些IP开了SIP服务。
你想想看,攻击者通过这些扫描,能拿到什么信息?
- 网络中哪些设备跑着SIP服务
- 哪些用户是活跃的
- 设备的型号和版本(通过Server头域)
- 支持的SIP方法(通过Allow头域)
我记得有一次做渗透测试,用OPTIONS扫描一个运营商的IMS网络,5分钟就扫出了300多个活跃的S-CSCF节点。每个节点的Server头域都暴露了厂商和版本信息。嗯,这信息对攻击者来说,就是金矿。
避坑指南:我曾经遇到过客户问“为什么我的IMS网络被扫描了却不知道?”答案很简单——没做SIP级别的入侵检测。传统的防火墙只看IP和端口,看不懂SIP协议。你得用专门的SIP防火墙或SBC来做防护。
知识体系总览
下面这张图,是我自己整理的IMS信令面攻击面分析框架。你把它记在脑子里,做安全评估时就不会漏项。
这张图把本章的知识点串起来了。你从SIP消息结构入手,理解攻击者能看到什么;然后看攻击向量,知道攻击者会用什么手段;再深入信令劫持原理,明白攻击者怎么实现攻击;最后了解SIP扫描技术,知道攻击者怎么侦察。四个环节环环相扣,缺一不可。
好了,这一章的内容就到这儿。下一章咱们聊具体的漏洞挖掘方法,到时候我会带几个真实的CVE案例来分析。