找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4195

积分

0

好友

564

主题
发表于 1 小时前 | 查看: 1| 回复: 0

2019年9月,AdaptiveMobile Security披露了一种针对SIM卡上S@T Browser应用的远程攻击方法,被称为“Simjacker”。攻击者通过向目标手机发送一条精心构造的短信,就能实现远程定位等操作,潜在危害巨大。鉴于SIM卡的普遍使用,其安全问题影响范围极广。据当时估算,全球可能有超过10亿台设备的SIM卡易受此攻击。本文将对SIM Jacker的攻击原理进行一次较为深入的技术分析。

一、背景知识:短信是如何发送的?

在深入了解攻击之前,我们需要对移动通信的基本框架有所认识。GSM(全球移动通信系统)是由ETSI制定的第二代(2G)数字蜂窝移动通信标准,其信令和语音信道均为数字式,俗称“全球通”。

短信(Short Message Service, SMS)是基于GSM网络的核心服务之一。其发送流程主要涉及三个主体:发送者、短信中心(SMSC)和接收者。短信必须经由短信中心转发才能到达接收者的SIM卡。

GSM短信发送流程示意图

具体步骤简述如下:

  1. 发送者编辑短信,通过无线信号发送至附近基站。
  2. 基站将消息经一系列网元处理,转发至运营商的短信服务中心。
  3. 短信服务中心处理后,将数据转发至接收者附近的基站。
  4. 接收者附近的基站将短信内容发送给接收者。

二、PDU模式短信格式解析

GSM收发短信主要有三种模式:BLOCK模式(已很少使用)、TEXT模式(仅支持ASCII码)和PDU模式。PDU模式虽然编解码复杂,但被所有手机支持,且能使用任何字符集(如发送中文),是手机的默认编码方式。

下面以一个实际的十六进制PDU串为例进行分解:
0891683108200805F011190D91683188902848F40008FF108FD9662F4E0067616D4B8BD577ED4FE1

这条PDU可以被拆解为以下部分:

  • 短信中心地址 (SCA): 0891683108200805F0
  • First Octet (FO): 11
  • 消息参考值 (MR): 19
  • 接收者号码 (DA): 0D91683188902848F4
  • 协议标识 (PID): 00
  • 数据编码方案 (DCS): 08
  • 有效期 (VP): FF
  • 用户数据长度 (UDL): 10
  • 用户数据 (UD): 8F......E1

关键字段详解:

  1. First Octet字段: 此字段至关重要,每位都有特定含义。将十六进制11转换为二进制00010001,从最低位(右)开始解读:

    • 位1-2 (MTI): 01,表示此为SMS-SUBMIT(从移动设备发往短信中心)。00则表示SMS-DELIVER(从短信中心发往设备)。
    • 位3 (RD): 0,表示不接收重复消息。
    • 位4-5 (VP): 10,表示使用相对有效期
    • 位6 (SSR): 0,不请求状态报告。若为1,则要求短信中心返回送达报告,此特性曾被用于定位研究。
    • 位7 (UDHI): 0,表示用户数据为普通短信。若为1,则表示用户数据包含头信息,这正是OTA消息(如SIM Jacker利用的)的关键标志。
    • 位8 (RP): 0,设置回复路径。

    First Octet字段位含义对照表

  2. 数据编码方案 (DCS): 08 表示使用UCS2编码,可用于发送中文等Unicode字符。00为7-bit编码(英文),04为8-bit编码。

三、动手实验:在Android设备上发送PDU短信

理解了PDU格式后,我们如何实际发送一条呢?最直接的方法是使用GSM模块。为了方便实验,这里使用一台已获取Root权限的Android手机(例如魅族M3 note)进行演示。

首先,确保通过ADB连接并已获得Root权限。

Android设备成功获取Root权限界面
ADB Shell中成功获取Root权限的终端界面

在Linux内核的Android系统中,一切皆文件,SIM卡通信接口也被映射为一个设备文件。我们需要先找到这个文件。可以通过监控Radio日志来定位:

logcat -b radio | grep dev

插入SIM卡后,日志会输出大量信息,从中可以找到SIM卡映射的设备节点(例如/dev/pts/4)。

Radio日志中显示SIM卡映射设备节点的终端输出

找到设备后,由于不同设备对AT命令换行符的要求可能不同,需要测试正确的格式:

echo -e "AT+COPS?\n" > /dev/pts/4

通过/dev/pts/4设备执行AT命令并读取响应的终端界面

确定格式后,即可发送一条测试短信:

echo -e "AT+CMGF=0\n" > /dev/pts/4 # 设置为PDU模式
echo -e "AT+CMGS=20\n" > /dev/pts/4 # 设置PDU数据长度
echo -e "0031000D9168xxxxxxxxxxxx00000005E8329BFD06\032\n" > /dev/pts/4 # 发送PDU数据,\032代表Ctrl+Z(结束符)

四、SIM Jacker攻击原理剖析

铺垫了以上基础知识后,现在可以深入探究SIM Jacker攻击的核心。

(1)OTA消息:攻击的载体

OTA(空中下载)消息,也称为二进制消息,是一种特殊的APDU消息,其中包含一组针对SIM卡内特定应用(如USIM应用工具包)的命令。这些命令可被SIM卡直接执行,功能包括拨打电话、发送短信、更新SIM文件等。

这类消息本应由运营商发送以管理用户SIM卡,但关键在于,普通用户也能构造并发送OTA消息。这就为攻击者打开了大门。

SIM Jacker攻击成功需要几个条件:

  1. 短信中心能够接收并转发PDU格式的短信。
  2. 接收方的SIM卡能够解析包含USAT命令的PDU消息。
  3. SIM卡上部署了S@T浏览器技术,并且其安全级别被设置为最低(“不应用任何安全措施”)。

回顾PDU格式,其中的UDHI位(First Octet第7位) 就是普通短信与OTA消息的“开关”。当此位设置为1时,用户数据(UD)部分就包含了可供SIM卡应用执行的命令头和数据。

包含OTA命令的PDU数据结构示意图

如图所示,当UDHI=1时,用户数据(UD)部分结构变为:

  1. 用户数据头 (UDH): 包含头长度(UDHL)和头内容。头内容可指示是否包含安全头等。
  2. 命令包 (CP):这是核心部分,包含:
    • 命令包长度 (CPL):整个命令包的字节数。
    • 命令头长度 (CHL):命令头的字节数。
    • 命令头:由6个关键字段组成,决定了消息的安全性和目标。
      • 安全参数指示符 (SPI): 指定是否应用安全措施。在SIM Jacker攻击中,通常设置为 0x0000(无安全措施)。
      • 加密密钥标识符 (KIC) / 密钥标识符 (KID): 设置为 0x00
      • 目标应用参考 (TAR): 指定SIM卡上接收消息的应用程序。对于S@T浏览器,TAR为 0x505348
      • 计数器 (CNTR & PCNTR): 通常设置为 0x00000000000x00
    • 安全数据: 这部分包含实际的STK字节码命令,即攻击载荷。例如,可以是指令S@T浏览器发起定位请求并将结果通过短信发送给攻击者。

(2)攻击示例分析

一个典型的SIM Jacker攻击PDU可能如下(通过AT命令发送):

AT+CMGF=0
AT+CMGS=69
>0041000B910516325476F87FF6XX027000YYYY0D0000000050534800000000000042230121...2D0C100383...2B00
(CTRL + Z)

一个具体的SIM Jacker攻击PDU结构分解图

上图中的XXYYYY是占位符,分别代表FO字段和CPL字段的具体值。整个结构清晰地展示了如何将一个恶意STK命令封装在普通的短信PDU中。

五、检测与现状

目前已有工具可以检测SIM卡是否易受此类攻击,例如使用SIM卡读卡器和SIMTester等软件。用户可以在云栈社区的安全/渗透/逆向板块找到更多关于硬件安全和漏洞分析的技术讨论。

SIMTester软件连接读卡器并识别SIM卡的终端界面

需要注意的是,根据公开信息,国内运营商发行的SIM卡受此攻击影响的案例较少,在个人测试中也较难复现。这可能是由于运营商对SIM卡安全配置策略不同所致。尽管如此,理解其背后的网络通信原理与协议漏洞,对于提高移动安全意识至关重要。

参考文献

  1. GSM短信详细流程
  2. PDU格式详解
  3. QuecPython SMS应用指导



上一篇:实战讲解Linux/Windows反向Shell与权限提升:Netcat、Socat和Msfvenom使用技巧
下一篇:一次完整的校内渗透测试实战:从监控室到教育局SQL注入与GetShell
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-21 01:52 , Processed in 0.833065 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表