第三章 MAP协议安全:核心网漫游的“阿喀琉斯之踵”

各位同仁,今天我们聊聊MAP协议。说实话,在核心网漫游这个领域,MAP协议就像个“老将”——资历深、应用广,但身上也带着不少陈年旧伤。我在现网排查过无数次漫游故障,有七成以上都跟MAP协议的安全问题脱不了干系。你想想看,一个诞生于90年代的协议,要承载今天复杂的漫游场景,不出问题才怪。

核心观点:MAP协议的安全缺陷,本质上是“信任过度”与“认证不足”的叠加。攻击者一旦摸清这些漏洞,就能在运营商之间“隐身穿行”。

3.1 MAP协议漏洞分析:那些“天生”的坑

MAP协议在设计之初,网络环境相对封闭,参与者都是可信的运营商。所以它的安全假设很朴素:只要你能连上信令网,你就是自己人。这个假设在今天看来,简直漏洞百出。

我个人习惯把MAP协议的漏洞归纳为三类:

  • 认证缺失:MAP操作(如发送鉴权向量、更新位置)几乎不校验请求方的身份。我记得有一次做渗透测试,直接用伪造的GT地址发了一条MAP_SEND_AUTHENTICATION_INFO,对方HLR居然照单全收,把鉴权五元组全吐出来了。
  • 明文传输:MAP消息在TCAP层之上是明文。虽然底层有SS7的链路加密(很多运营商根本没开),但信令面本身不提供端到端加密。说白了,只要你能接入信令网,就能“看”到所有漫游用户的IMSI、MSISDN、位置信息。
  • 无完整性保护:MAP消息可以被篡改而不被察觉。攻击者可以修改MAP_UPDATE_LOCATION中的VLR地址,把用户“骗”到一个假的MSC上。

⚠️ 注意:很多厂商的MAP实现还有“缓冲区溢出”这类低级漏洞。我曾经在某个老款STP设备上,发现一条超长的MAP_PROVIDE_ROAMING_NUMBER请求就能让设备重启——这属于实现层面的“坑”,但同样致命。

3.2 MAP信令劫持:让用户“消失”在漫游地

信令劫持,说白了就是攻击者冒充合法网元,截获或篡改MAP信令。最常见的场景是位置更新劫持

攻击流程大致是这样的:

  1. 攻击者伪造一个假的VLR,向HLR发送MAP_UPDATE_LOCATION,声称用户已进入其服务区。
  2. HLR更新位置信息,把用户“绑定”到攻击者的VLR上。
  3. 后续所有发往该用户的呼叫、短信,都会被路由到攻击者的VLR。
  4. 攻击者可以静默拦截,或者直接拒绝服务——用户就“失联”了。

我在项目中遇到过一起真实案例:某跨国运营商的漫游用户频繁投诉“无法被叫”。我们抓包分析发现,HLR中用户的VLR地址被篡改成了一个不存在的GT。攻击者就是通过伪造的MAP_UPDATE_LOCATION实现的。嗯,这里要注意,HLR对位置更新请求的源地址校验几乎为零,这是劫持能成功的根本原因。

💡 避坑指南:我曾经建议团队在HLR侧增加“位置更新频率检测”。如果某个用户在1分钟内发起超过3次跨VLR的位置更新,直接触发告警并拒绝后续请求。这招虽然简单,但能挡住大部分自动化劫持工具。

3.3 MAP中间人攻击:在信令链路上“隐身”

MAP中间人攻击,比劫持更隐蔽。攻击者不冒充网元,而是插入到两个合法网元之间,双向拦截并修改消息。

为什么会这样?因为MAP信令在SS7网络中传递时,中间节点(如STP)天然可以“看到”并修改消息。攻击者只要控制了某个STP,或者伪造了一个STP接入信令网,就能实施中间人攻击。

一个经典的攻击场景是鉴权向量窃取

  • 正常流程:VLR → HLR 请求鉴权向量 → HLR返回RAND/AUTN/SRES/CK/IK
  • 中间人攻击:攻击者截获HLR返回的鉴权向量,复制一份给自己,再把原消息转发给VLR。
  • 后果:攻击者获得了用户的鉴权参数,可以伪造用户身份接入网络,或者解密用户通信内容。

你想想看,攻击者甚至不需要破解任何密码学算法,只需要“复制粘贴”一下信令消息。这就是MAP协议没有端到端完整性保护的恶果。

关键点:MAP中间人攻击的防御核心在于“信令路径可信”。如果VLR和HLR之间的信令路径上存在不可控节点,攻击就防不住。我个人建议在运营商间部署SIGTRAN over IPSec,至少保证传输层安全。

3.4 MAP重放攻击:老酒装新瓶

重放攻击,就是把之前截获的合法MAP消息,重新发送一遍。MAP协议对消息的“新鲜度”几乎没有校验,所以重放攻击特别好用。

举个例子:

  1. 攻击者截获一条MAP_CANCEL_LOCATION消息(用于注销用户在某个VLR的位置)。
  2. 过了一段时间,攻击者把这条消息重放给HLR。
  3. HLR收到后,会认为用户已经离开了某个VLR,从而删除该VLR中的用户数据。
  4. 如果用户恰好正在那个VLR下做业务,就会被强制下线。

我记得有一次做安全演练,我们重放了一条3小时前的MAP_INSERT_SUBSCRIBER_DATA消息,居然成功修改了用户的签约数据——把用户的APN配置改成了一个不存在的值。这说明HLR对消息的“时序”和“重复性”完全没有检查。

⚠️ 注意:重放攻击的防御其实不难。在MAP消息中加入时间戳或序列号,接收方做去重和时效性校验就行。但问题是,很多老旧的MAP实现根本不支持这些扩展。我曾经在某个现网中看到,HLR的MAP处理逻辑里连“消息ID去重”都没做——这相当于把大门敞开了。

3.5 知识体系总览

下面这张图,是我梳理的MAP协议攻击与防护的核心逻辑。你可以把它当作本章的“思维导图”:

MAP协议攻击与防护知识体系 MAP协议安全 漏洞分析 信令劫持 中间人攻击 重放攻击 认证缺失 明文传输 无完整性保护 伪造VLR 位置更新劫持 呼叫/短信拦截 STP控制 鉴权向量窃取 消息双向篡改 Cancel Location Insert Subscriber Data 无时序校验 防护措施:信令过滤 + 源地址校验 + 去重机制 + 传输加密

3.6 实战防护建议

讲了这么多攻击,总得给点干货。我个人在现网中总结了一套“MAP安全三板斧”:

防护层面 具体措施 效果
信令过滤 在STP或信令网关上,配置白名单,只允许已知GT地址发送MAP请求 挡住大部分伪造源地址的攻击
消息校验 对MAP_UPDATE_LOCATION、MAP_SEND_AUTHENTICATION_INFO等敏感操作,增加源地址反向校验 防止VLR/HLR被冒充
去重与时效 在HLR/MSC中实现MAP消息ID缓存,对重复消息直接丢弃;增加时间戳校验 有效防御重放攻击

💡 我的经验:别指望一套方案解决所有问题。MAP协议太老了,很多漏洞是“设计使然”,补丁只能缓解。我建议在现网中逐步向Diameter/SBI协议迁移,那才是未来的方向。但在那之前,先把信令过滤做好——这能挡住80%的脚本小子。

好了,MAP协议的安全问题就聊到这儿。记住一句话:在信令网里,没有“默认信任”这回事。每一个MAP消息,都可能是敌人递过来的刀。


公众号:蓝海资料掘金营,微信deep3321