SS7协议漏洞与GT号码深度分析
SS7协议架构的深度剖析
SS7协议是一个复杂的分层协议栈,每层都有特定功能:
-
MTP层(消息传输部分):
- MTP1:物理层,定义物理接口和电气特性
- MTP2:数据链路层,提供可靠的点对点信息传输
- MTP3:网络层,负责消息路由、流量管理和网络管理
-
SCCP层(信令连接控制部分):
- 提供扩展的寻址能力,特别是通过GT号码
- 提供面向连接和无连接的服务
- 支持全局标题转换(GTT)功能
-
TCAP层(事务能力应用部分):
- 支持非电路相关的远程操作
- 提供请求/响应事务处理能力
- 封装MAP、CAMEL等上层应用协议
-
MAP层(移动应用部分):
- 支持移动通信特有业务逻辑
- 定义漫游、短信、位置更新等操作
- 包含大量可能被滥用的操作码
GT号码结构与解析机制
GT号码不仅仅是一串数字,而是包含多个语义字段的结构化数据:
-
详细字段分解:
- 转换类型(TT):通常0-255,指示GT如何被解析
- 编号方案(NP):识别号码类型(ISDN、数据网络等)
- 编码方案(ES):指示号码如何编码(BCD、国家特定等)
- 自然地址指示器(NAI):国际、国内、网络特定等
-
GT号码的路由过程:
- 当SS7消息进入网络,首先由STP执行GTT
- 查询路由表将GT号码转换为点码(PC)
- 根据转换结果转发消息至下一跳
- 可能经过多个STP节点的级联GTT过程
-
GT号码命名规则:
- E.164格式:符合国际电话号码标准(如+86 10 12345678)
- E.212格式:IMSI号码(如460 01 1234567890)
- E.214格式:移动全局标题(MGT),用于HLR寻址
SS7漏洞利用技术深度分析
信令监听攻击详解
攻击者可通过以下方式实施信令监听:
-
获取SS7接入点:
- 通过合法运营商身份申请SS7连接
- 利用弱配置的SIGTRAN(IP上的SS7)网关
- 通过已被入侵的第三方SS7节点访问网络
-
监听流量:
- 配置网络接口为混杂模式
- 使用信令分析工具(如Wireshark+SS7插件)捕获流量
- 实时解析MAP、TCAP、SCCP等层消息
-
筛选目标信息:
- 根据IMSI、MSISDN等标识符过滤消息
- 重点关注位置更新、认证等敏感操作
- 提取呼叫建立、短信传递等信息
位置追踪的技术实现细节
位置追踪主要通过以下MAP操作实现:
-
SendRoutingInfoForSM:
- 正常用途:用于短信投递定位接收方
- 滥用方式:不实际发送短信,仅获取位置信息
- 返回数据:包含IMSI及服务MSC地址
- 攻击代码关键部分:
// 构造目标MSISDN ISDNAddressString msisdn = mapParameterFactory.createISDNAddressString( AddressNature.international_number, NumberingPlan.ISDN, targetNumber); // 发送请求 mapDialogSms.addSendRoutingInfoForSMRequest( msisdn, // 目标手机号 true, // SM-RP-PRI标志 null, // 服务中心地址 null, // 额外参数 null // IMSI );
-
AnyTimeInterrogation:
- 正常用途:用于预付费系统查询用户状态
- 滥用方式:无条件查询用户精确位置
- 返回数据:包含LAC(位置区码)和CI(小区标识)
- 防护难点:大多数网络默认允许此操作
-
ProvideSubscriberInfo:
- 正常用途:HLR向VLR请求用户状态
- 滥用方式:伪装成HLR查询用户位置
- 返回数据:包含IMEI、位置信息、用户状态
- 实施条件:需要预先知道目标用户IMSI
呼叫/短信拦截技术详解
-
UpdateLocation攻击:
- 攻击者伪装成新的VLR/MSC发送位置更新
- HLR将用户记录更新为攻击者控制的"位置"
- 所有呼叫和短信被路由至攻击者伪造的位置
- 攻击代码关键部分:
// 构造UpdateLocation请求 IMSI imsi = mapParameterFactory.createIMSI(targetIMSI); ISDNAddressString mscNumber = mapParameterFactory.createISDNAddressString( AddressNature.international_number, NumberingPlan.ISDN, attackerMSCNumber); // 攻击者控制的MSC号码 // 发送请求 mapDialogMobility.addUpdateLocationRequest( imsi, // 目标IMSI mscNumber, // 攻击者MSC号码 null, // VLR号码(可省略) null, // LMSI null, // 支持特性 null, // 网络类型 null, // VLR能力 false, // 通知支持 null // 额外参数 );
-
InsertSubscriberData操作滥用:
- 攻击者伪装成HLR向VLR发送ISD请求
- 修改用户的服务配置(如呼叫转移设置)
- 将呼叫或短信转发至攻击者控制的终端
- 防护难点:VLR通常默认信任来自HLR的请求
-
CancelLocation攻击:
- 伪装成HLR向当前VLR发送取消位置请求
- 导致用户从网络中注销
- 之后可结合UpdateLocation攻击劫持用户
- 实施条件:需要知道目标用户当前服务VLR
SS7安全防护的深度技术方案
信令防火墙技术细节
现代SS7信令防火墙通常基于以下技术原理:
-
静态规则引擎:
- 基于源/目的地地址过滤(GT、PC、SSN)
- 基于操作码(OpCode)过滤敏感操作
- 基于消息类型和参数过滤异常请求
- 配置示例:
# 拒绝国际GT对本地用户的ATI请求 RULE: { OPERATION: MAP_ATI, SOURCE: {GT_PREFIX: !^46}, DESTINATION: {GT_PREFIX: ^46}, ACTION: BLOCK }
-
行为分析引擎:
- 建立SS7信令流量基线
- 检测异常操作模式(如过频ATI请求)
- 识别不符合协议标准的消息序列
- 实现示例:
# 检测短时间内对同一用户的多次位置查询 def detect_location_tracking(messages, threshold=5, timeframe=300): tracking_attempts = {} for msg in messages: if msg.operation in [MAP_SRI_SM, MAP_ATI, MAP_PSI]: target = msg.get_msisdn() or msg.get_imsi() if target not in tracking_attempts: tracking_attempts[target] = [] tracking_attempts[target].append(msg.timestamp) # 检测阈值 for target, timestamps in tracking_attempts.items(): recent_attempts = [t for t in timestamps if t > current_time - timeframe] if len(recent_attempts) > threshold: raise_alarm(f"可能的位置追踪攻击: {target}")
-
深度包检测:
- 解析完整的TCAP/MAP消息结构
- 验证消息内容与控制字段一致性
- 检测参数篡改和协议违规
端到端加密解决方案
为防止SS7漏洞导致的隐私泄露,可实施的端到端加密方案:
-
信令层加密:
- 使用MAP层安全扩展(MAP-SE)
- 实施TCAP密码机制
- 在边界网关间建立IPsec隧道
- 部署示例:
# IPsec配置示例(简化) conn ss7-peer1 authby=secret left=192.0.2.1 leftid=@operator-a leftprotoport=sctp/2905 right=203.0.113.5 rightid=@operator-b rightprotoport=sctp/2905 ike=aes256-sha2;modp2048 esp=aes256-sha2 auto=start
-
应用层加密:
- 对关键用户数据使用端到端加密
- 使用加密SIM卡增强认证安全
- 部署加密短信和加密语音服务
实践案例分析
案例1:大规模位置跟踪攻击
2014年一个研究团队演示了如何利用SS7漏洞跟踪全球多个国家的移动用户位置。他们的技术流程是:
- 获取SS7网络接入点(通过第三方信令服务提供商)
- 开发一个使用MAP_SEND_ROUTING_INFO_FOR_SM请求的自动化系统
- 向多个国家的运营商发送请求,测试防护水平
- 成功从80%以上的测试网络获取位置信息
- 通过每30分钟发送一次请求,实现连续位置跟踪
该研究突显了几个关键问题:
- 大多数运营商没有针对此类请求的限制
- 缺乏对国际GT号码的有效过滤
- 没有检测频繁位置查询的异常检测机制
案例2:银行短信拦截攻击
2017年,一组犯罪分子利用SS7漏洞配合社会工程学攻击窃取银行账户资金:
- 首先通过网络钓鱼获取受害者银行凭证
- 利用SS7漏洞发送MAP_INSERT_SUBSCRIBER_DATA请求
- 修改受害者短信中心地址(SMSC)为攻击者控制的号码
- 执行银行转账,拦截含有二次验证码的短信
- 使用拦截的验证码完成转账
这一案例表明:
- SS7漏洞与传统网络攻击结合威力巨大
- 多因素认证若依赖SMS可被绕过
- 需要多层防护而非单一安全措施
GT号码的滥用技术
攻击者滥用GT号码的方法包括:
-
GT号码伪造:
- 使用可配置的SS7栈(如jSS7)动态修改源GT
- 伪装成受信任实体(如HLR、SMSC等)
- 示例代码:
// 创建伪造的HLR GT GlobalTitle fakeHlrGt = sccpProvider.getParameterFactory() .createGlobalTitle( "46123456", // 伪造的HLR号码 0, // 转换类型 NumberingPlan.ISDN_TELEPHONY, null, NatureOfAddress.INTERNATIONAL ); // 使用伪造GT作为源地址 SccpAddress callingParty = sccpProvider.getParameterFactory() .createSccpAddress( RoutingIndicator.ROUTING_BASED_ON_GLOBAL_TITLE, fakeHlrGt, 6, // HLR子系统号 0 );
-
GT路由操纵:
- 利用多个SS7网络间的路由信任关系
- 通过中间网络隐藏攻击实际来源
- 使用双重GT转换混淆攻击来源
-
GT号码扫描:
- 系统性枚举可能的GT号码范围
- 发送测试消息确定活跃的网元
- 构建目标网络的拓扑图
防御SS7漏洞的最佳实践
运营商层面的细化防护措施
-
信令过滤策略优化:
- 实施分层过滤架构(网络边界、核心网等)
- 为不同信令关系定制不同安全策略
- 基于业务需求精细配置允许的操作
- 配置示例:
# 仅允许特定伙伴操作特定MAP服务 PARTNER: Operator-A ALLOWED_OPERATIONS: - MAP_SRI_SM # 允许短信路由 - MAP_SRI # 允许呼叫路由 DENIED_OPERATIONS: - MAP_ATI # 禁止位置查询 - MAP_UL # 禁止位置更新 - MAP_ISD # 禁止插入用户数据
-
异常检测与响应:
- 部署实时监控系统对SS7流量进行分析
- 建立正常业务流量基线模型
- 检测异常的信令交互模式和频率
- 实施自动响应机制(限流、阻断等)
- 示例检测规则:
# 检测短时间内对同一IMSI的多次位置更新请求 RULE: { PATTERN: { OPERATION: MAP_UPDATE_LOCATION, COUNT: >3, TIMEFRAME: 60s, GROUP_BY: "imsi" }, ACTION: BLOCK_TEMPORARY, BLOCK_DURATION: 300s, ALERT_LEVEL: HIGH }
-
边界STP加固:
- 实施严格的GTT表管理和审计
- 限制国际网关的信令类型和目标范围
- 对敏感操作实施双向认证
应用层防护措施
-
端到端加密通信:
- 推广Signal Protocol等端到端加密技术
- 不依赖运营商基础设施的安全保障
- 实现真正的端到端加密保护
-
位置隐私保护:
- 使用VPN隐藏真实网络标识
- 减少位置服务使用,定期清除位置数据
- 使用虚拟号码服务隔离真实身份
-
多渠道验证:
- 银行等敏感服务不应仅依赖SMS验证
- 使用应用内推送、硬件令牌等替代方案
- 实施基于风险的自适应认证策略
新一代移动网络的安全改进
5G网络在安全设计上有显著改进,特别是:
-
改进的认证架构:
- 5G-AKA认证框架加强网络互认证
- 基于公钥基础设施(PKI)的网元认证
- 支持端到端加密的网络切片隔离
-
Diameter协议改进:
- 取代SS7的Diameter协议支持TLS/IPsec
- 强制要求网元间的双向认证
- 支持加密和完整性保护的信令传输
-
零信任安全模型:
- 不再假设核心网内部实体完全可信
- 每次交互均需认证和授权
- 最小权限原则限制敏感操作访问