志存高遠

手机SIM卡复制

SIM卡基本概念

SIM(Subscriber Identity Module)直译是用户身份模块,本质是一个智能卡,用来让基站识别你是谁。eSIM本质上是将原本 SIM卡的硬件集成进了手机中,并没有不同。

SIM卡一般由六个触点:电源(C1-VCC)、复位(C2-RST)、时钟(C3-CLK)、接地端(C5-GND)、编程电压(C6-VPP)、双向半双工UART(C7-I/O)。SIM卡中会有微处理器CPU,ROM,RAM,EPROM。SIM卡一般由六个触点:电源(C1-VCC)、复位(RESET)、时钟(CLK)、接地端(GND)、编程电压(VPP)、I/O接口(Data)。

SIM里储存的信息

  • 出售时内置的数据:
    • ICCID(系列号)
    • IMSI(国际移动用户识别码),15位数字,包含国家码(MCC)、运营商码(MNC)和用户号(MSIN)。该信息可通过手机读取到。
    • Ki number(加密根密钥),随机生成的128位数字。Ki 无法被读取,只会在SIM卡进行运算的时候会被使用。
  • 临时数据:位置区域识别码(LAI)、移动用户暂时识别码(TMSI)、禁止接入的公共电话网等。
  • 业务代码:个人识别码(PIN)、解锁码(PUK)、计费费率等。
  • 用户储存的信息:通信录电话号码、短信等。

生产过程

  • IMEI(International Mobile Equipment Identity,国际移动设备识别码),15位数字,制造商代码、型号、序列号和校验码。每台手机一个,全球唯一。拨号界面 *#06# 可查询。

SIM卡身份认证过程

1G(模拟信号),不在讨论范围内。

2G入网交互流程

2G(GSM)入网的身份认证流程比较简单,在手机和基站分别通过各自相同的密钥使用 Comp128 哈希算法进行比对来确认身份。

  1. 连接网络时,手机向基站发送 TSMI 来证明其身份。
    • 在首次连接到新网络时,手机会发送 IMSI 来标识自己,基站会向手机发送新的 TMSI,TMSI 会经常变动。
  2. 基站会生成一个 128 位随机数(称为RAND),并将其发送到手机。
  3. 手机使用身份验证算法(A3)以及使用本地密钥 Ki 对 RAND 进行加密。$COMP128_A3(Ki, RAND)=SRES$,计算出 32 位值 SRES 发送回基站。
  4. 基站同样使用 A3 算法以及基站根据历史储存的 IMSI 对应的密钥 Ki 对 RAND 进行加密,获取 HASH2。
  5. 基站会比较 HASH1 和 HASH2 是否相等,相等则证明手机知道密钥 Ki,因此通过身份验证。
  6. 手机和基站使用 A8 算法计算会话密码密钥 Kc $Kc = A8_{Ki}(RAND)$
    • 现实世界中,大多数移动运营商将 A3 和 A8 作为同一种算法实现。Comp128-v1 算法被泄漏,公开已知。
  7. 基站根据支持的算法列表选择加密算法并激活加密,使用 Kc 作为会话密钥。

COMP128 算法细节

函数 comp128,入参为 128位 K 和 128 位 RAND,
Comp128 核心就是混淆,让原始数据和密钥融合,打乱所有位置。

风险

  • 整个过程是个单向认证,也就是只有基站验证手机的身份,验证通过后手机就连接到这个基站了。这就会导致一个严重的问题:伪基站,伪基站就可以给连上的手机发短信等操作。
  • 理论谁有 SIM 卡的密钥 Ki 就可以拥有其入网身份,继而接打电话、收发短信、蜂窝网络等。
  • 算法风险
    • 通过发送一系列的 RAND,根据响应来推断 Ki 值。预计 150000 次即可爆破成功。

3G/4G/5G入网交互流程

3G(UMTS)/4G(LTE)/5G(NR) 改进了原先 2G(GSM)中的安全问题,使用了安全性更高的 AES-128 的 Milenage 算法,增加了 SQN 机制防止重放攻击,增加了双向认证来防止伪基站风险。

  1. 手机连接基站时,将 SIM 卡中内置的 IMEI、K、AMF、SQN、OPc、c1/c2/c3/c4/c5、R1/R2/R3/R4/R5 发送给基站。
  2. 基站生成一个随机数 RAND,基于客户端发送过来的参数以及 RAND 使用 Milenage 算法计算一个结果 RST1(AUTN、匿名密钥 AK、完整性密钥 IK、密码密钥 CK、预期响应 XRES、响应 RES)。
  3. 基站将 RST1、RAND 返回给手机,手机基于 K(来自 SIM 卡)、RAND(来自基站返回)、AUTN(来自基站返回)以及步骤 1 中的参数,使用 Milenage 算法计算一个结果 RST2,比较 RST1 和 RST2 是否相同,相同则会将 RST1 发送给基站。同时,会递增本地 SQN 值,以防止重放攻击。
  4. 基站也同样比对 RST1 和 RST2 是否相同,相同则认证验证完成。同时,会递增本地 SQN 值,以防止重放攻击。

Milenage 算法细节

函数f1,入参需要 RAND、AMF、SQN、Ki,核心算法使用 AES-128,输出 MAC-A
    函数 f2/3/4/5 使用 OPc、Ki、RAND 生成 XRES、CK、IK、AK

    $AUTN = (SQN AK) || AMF || MAC-A$

    风险

    • 当获取到 SIM 卡内置的敏感信息,即可拥有该手机卡的全部权限。

    基于侧信道攻击窃取 SIM 卡中密钥

    待补充实操经验

    参考 
    志存高遠
    Loading