2、SS7信令系统:SS7协议栈架构、MTP层、SCCP层、TCAP层、MAP协议基础

聊到核心网漫游攻击,SS7信令系统是绕不开的“老熟人”。

说实话,SS7这套东西设计于上世纪70、80年代,那时候互联网还没影呢。它骨子里就带着“信任”的基因——所有运营商之间默认是兄弟,互相不设防。结果呢?现在成了攻击者最爱的突破口。

我个人习惯,讲SS7一定要从协议栈开始。你只有看懂了每一层在干什么,才能明白攻击到底打在了哪里。

2.1 SS7协议栈架构

SS7协议栈,说白了就是一套分层打电话的“规矩”。它跟OSI七层模型有点像,但更精简,也更“电信”。

我画了一张图,帮你把这几层的关系理清楚:

SS7协议栈架构 应用层 MAP · INAP · CAP · OMAP TCAP层(事务能力应用部分) 提供事务处理能力 SCCP层(信令连接控制部分) 全局码翻译 · 子系统号寻址 MTP层(消息传递部分) MTP-1 物理层(E1/T1) MTP-2 数据链路层 MTP-3 网络层(路由) SS7协议栈 · 从下到上逐层封装

这张图你得记住。每次分析攻击报文,我脑子里都会浮现这个分层结构。攻击者往往从上层(MAP)下手,但最终都要落到下层(MTP)去传输。

2.2 MTP层——信令的“高速公路”

MTP层,全称Message Transfer Part,消息传递部分。它负责把信令消息从一个节点可靠地搬到另一个节点。

MTP分三层:

  • MTP-1(物理层):说白了就是线缆。传统上是64kbps的E1/T1时隙,现在很多已经IP化了(M3UA/SIGTRAN)。
  • MTP-2(数据链路层):负责帧定界、差错检测、重传。它保证“这条链路上传的东西不会丢”。
  • MTP-3(网络层):这是核心。它负责信令路由——根据DPC(目的信令点编码)把消息送到正确的目的地。

关键概念:信令点编码(SPC)

每个信令节点都有一个唯一的SPC,类似于IP地址。MTP-3就是靠SPC来路由的。

格式:3-8-3结构(中国常用14位编码),或者24位编码(北美标准)。

我在项目中遇到过一件事。有一次排查漫游失败,发现HLR一直收不到位置更新请求。抓包一看,MTP-3层的DPC写错了——源端把DPC配成了隔壁省的编码。消息发错了地方,当然没响应。这种问题,MTP层不熟根本查不出来。

2.3 SCCP层——让寻址更灵活

MTP只能根据SPC寻址,但SPC是固定的。你想想看,一个手机用户漫游到外地,他的HLR在归属地,MSC怎么知道HLR的SPC?

这时候就需要SCCP(Signalling Connection Control Part)出场了。

SCCP在MTP之上提供两种能力:

  1. 全局码(GT)翻译:用手机号(MSISDN)或IMSI来寻址,而不是用SPC。SCCP负责把GT翻译成SPC,再交给MTP-3发送。
  2. 子系统号(SSN):标识同一个信令点上的不同应用。比如HLR的SSN是6,MSC的SSN是8,VLR的SSN是7。

避坑指南

我曾经在配置SCCP GT翻译表时踩过坑。翻译规则如果配成“按最长匹配”,结果把+8613800138000翻译到了错误的HLR。后来我养成了习惯——GT翻译一定要做“逐位匹配测试”,尤其是国际漫游场景,前缀变化多,稍不留神就翻错。

SCCP的消息类型主要有两种:

  • UDT(单元数据):无连接模式,发出去就不管了。大多数MAP消息都用这个。
  • XUDT(扩展单元数据):带分段功能,适合大消息。

攻击者经常利用SCCP的GT翻译做文章。比如伪造一个GT,让SCCP把消息路由到攻击者控制的信令点。这就是典型的“SCCP劫持”。

2.4 TCAP层——事务的“管家”

TCAP(Transaction Capabilities Application Part),事务能力应用部分。它负责管理应用层消息的“对话”。

举个例子:MSC发一个位置更新请求给HLR,HLR处理完后回复一个响应。这个“请求-响应”的配对,就是由TCAP来维护的。

TCAP的核心概念:

  • 事务ID:每个对话分配一个唯一ID,源端和目的端各有一个。通过事务ID,TCAP能把请求和响应关联起来。
  • 组件(Component):真正承载业务逻辑的部分。比如Invoke(调用)、Return Result(返回结果)、Return Error(返回错误)、Reject(拒绝)。

TCAP消息结构(简化)

TCAP消息
├── 事务部分(Transaction Portion)
│   ├── 源事务ID(Originating Transaction ID)
│   └── 目的事务ID(Destination Transaction ID)
└── 组件部分(Component Portion)
    ├── Invoke(调用操作)
    │   ├── 操作码(Operation Code)
    │   └── 参数(Parameters)
    └── Return Result(返回结果)
        ├── 调用ID(Invoke ID)
        └── 结果参数

TCAP层有一个经典攻击手法——事务ID重放攻击。攻击者截获一个合法的事务ID,然后伪造一个恶意响应发回去。HLR一看事务ID对得上,就信了。嗯,这里要注意,TCAP本身没有任何认证机制,全靠下层网络信任。

2.5 MAP协议基础——漫游的“灵魂”

MAP(Mobile Application Part),移动应用部分。它是SS7协议栈最上层,直接承载了所有移动业务逻辑。

MAP协议定义了移动网络中各网元之间的交互流程。比如:

  • 位置更新:MSC/VLR → HLR
  • 取路由信息:GMSC → HLR
  • 短消息转发:SMS-IWMSC → HLR → MSC
  • 补充业务操作:激活/去激活呼叫转移等

MAP操作通过TCAP的Invoke组件来调用。每个操作都有一个唯一的操作码(Operation Code)。

操作名称 操作码(十进制) 说明
updateLocation 2 位置更新
sendRoutingInfo 22 取路由信息
sendAuthenticationInfo 56 请求鉴权向量
insertSubscriberData 7 插入用户数据
provideRoamingNumber 4 请求漫游号码

安全警告

MAP协议在设计时没有考虑任何安全机制。所有操作都是“裸奔”的。攻击者只要能够接入SS7网络,就可以伪造任意MAP操作。

比如伪造一个insertSubscriberData,把用户的呼叫转移号码改成攻击者的号码。所有来电都会被转走。这就是典型的SS7攻击。

我记得有一次做安全审计,发现某运营商的HLR竟然接受来自非信任MSC的updateLocation请求。这意味着任何人都可以伪造一个位置更新,告诉HLR“用户在我这里”。HLR信了,就把用户的位置信息改了。后果是什么?用户的所有呼叫和短信都会被路由到攻击者指定的MSC上。

这种攻击,说白了就是MAP层没有任何源端验证。HLR收到一个MAP请求,它只看GT和SSN对不对得上,从来不问“你是谁?你凭什么发这个请求?”

所以,防护SS7攻击,核心思路就是打破这种“无条件信任”。在MTP层做白名单路由过滤,在SCCP层做GT翻译校验,在MAP层做操作权限检查。每一层都加一道锁,攻击者就没那么容易得手了。

个人经验

我建议你在学习SS7协议时,不要只背协议栈结构。拿Wireshark抓一个真实的MAP消息,一层一层剥开看。MTP-3的DPC是什么?SCCP的GT是什么?TCAP的事务ID是多少?MAP的操作码是哪个?看懂了真实报文,比看十遍书都管用。


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