基于OpenBTS+USRP B210搭建GSM漏洞验证环境
字数 1599 2025-08-29 08:29:59

基于OpenBTS+USRP B210搭建GSM漏洞验证环境

1. 环境概述

本教学文档详细介绍了如何使用OpenBTS和USRP B210搭建GSM漏洞验证环境。该环境可用于蜂窝协议实现的安全研究,包括GSM协议漏洞验证、短信测试、通话测试以及GSM报文捕获与分析。

1.1 硬件选择

  • USRP B210: 支持频率范围70MHz-6GHz,带宽56MHz,价格适中
  • 其他可选硬件: HackRF、BladeRF、LimeSDR、PlutoSDR等

1.2 软件选择

  • OpenBTS: 开源GSM基站实现
  • UHD: USRP硬件驱动
  • Asterisk: VoIP电话系统

2. 系统准备

2.1 操作系统

  • Ubuntu 16.04 LTS: 推荐使用纯净系统
  • 注意: 使用国内源可能导致依赖包找不到问题

3. 安装步骤

3.1 安装UHD驱动

  1. 从GitHub克隆UHD项目:

    git clone https://github.com/EttusResearch/uhd.git
    
  2. 切换到3.14.0.0分支:

    git checkout UHD-3.14.0.0
    
  3. 编译安装:

    cd uhd/host
    mkdir build
    cd build
    cmake ../
    make
    make install
    
  4. 设置环境变量:

    export LD_LIBRARY_PATH=/usr/local/lib
    
  5. 测试安装:

    uhd_usrp_probe
    

3.2 安装OpenBTS

  1. 安装依赖:

    sudo apt-get install autoconf libtool libortp-dev libusb-1.0-0-dev libsqlite3-dev libreadline-dev libssl-dev libzmq3-dev libdbd-sqlite3 libosip2-dev libtool pkg-config libortp-dev libusb-1.0-0-dev libsqlite3-dev libreadline-dev libssl-dev libzmq3-dev libdbd-sqlite3 libosip2-dev
    
  2. 编译安装:

    ./autogen.sh
    ./configure
    make
    sudo make install
    
  3. 编译问题解决:

    • 删除代码中的(BctbxLogFunc)
    • 删除强制类型转换中的(void *)

3.3 配置流量转发

编辑/etc/OpenBTS/iptables.rules:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

根据实际情况修改网卡名称。

4. 启动和配置OpenBTS

4.1 启动组件

  1. 配置数据库:

    sudo sqlite3 /var/lib/asterisk/sqlite3dir/sqlite3.db ".read ./apps/OpenBTS/OpenBTS.example.sql"
    
  2. 启动transceiver连接SDR硬件:

    sudo transceiver &
    
  3. 启动基站:

    sudo OpenBTS &
    
  4. 启用短信服务:

    sudo smqueue &
    
  5. 启动鉴权服务:

    sudo OpenBTSCLI
    

4.2 基站配置

  1. 开启任意终端准入:

    config Control.LUR.OpenRegistration *
    
  2. 设置天线功率:

    config GSM.Radio.PowerManager.MaxAttenDB 10
    
  3. 检查噪声强度:

    noise
    
    • RSSI信号强度为-71dB表示背景噪声
    • 配置的RSSI信号强度为-50dB
    • 差值小于10dB表示上行链路质量有限
    • 差值小于0dB表示无法建立上行链路
  4. 设置频段:

    config GSM.Radio.Band 900
    
  5. 设置欢迎短信:

    config OpenBTS.WelcomeSM "Welcome to OpenBTS"
    

5. 终端管理

5.1 查看注册设备

OpenBTSCLI> tmsis

5.2 短信测试

  1. 发送短信到411(回显测试):

    • 手机发送任意内容到411
    • 几秒后会收到相同内容的回复
  2. 命令行发送短信:

    sendsms XXXXXXX AAAAAA "Test message"
    
    • XXXXXXX: 设备的IMSI号码
    • AAAAAA: 虚拟的手机号(显示为发送方)
    • 注意: 不支持中文内容
  3. 设备间互发短信:

    • 两台在该网络中注册的手机可通过手机号互相发送消息

6. 电话测试

6.1 Asterisk配置

  1. 编辑/etc/asterisk/sip.conf:

    [general]
    context=default
    allowguest=yes
    srvlookup=yes
    udpbindaddr=0.0.0.0
    transport=udp
    
    [600]
    type=friend
    host=dynamic
    secret=600
    context=phones
    
  2. 编辑/etc/asterisk/extensions.conf:

    [phones]
    exten => 600,1,Answer()
    exten => 600,n,Echo()
    exten => 600,n,Hangup()
    

6.2 测试通话

  1. 拨打600:

    • 经过一段语音后,会回传发送的语音信息
  2. 手机间通话:

    • 配置完成后,注册的手机可以互相拨打电话

7. GSM抓包和重放

7.1 捕获GSM报文

  1. 开启GSM流量转发:

    sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
    sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
    
  2. 使用Wireshark捕获:

    • 可捕获RR协议和SMS协议的报文
    • MM、CC等L3层的报文可能无法直接捕获(因payload在SIP协议中传输)

7.2 报文篡改

根据OpenBTS架构:

  1. 手机1->BTS使用GSM消息通信
  2. BTS将SETUP请求解析并包装成SIP报文
  3. 根据Asterisk配置找到手机2
  4. 基于解析的SIP报文,包装成GSM报文发送给手机2

可行方案: 直接修改BTS代码,发送包含特定payload的报文

8. 日志监控

8.1 设备日志

  1. 三星设备:

    • 拨打*#9900#进入sysdump日志系统
    • 可dump设备日志
  2. 使用adb logcat:

    adb logcat
    

8.2 真机调试

参考Synacktiv文章:

  • 通过TEE漏洞重写modem固件
  • 将调试器写入不用的代码段实现调试功能

9. 注意事项

  1. 本环境仅限实验室环境使用
  2. 仅用于蜂窝协议实现的安全研究
  3. 切勿用于非法目的
  4. 天线功率和距离会影响手机接入
  5. 噪声干扰会影响通信质量

10. 参考资源

  1. OpenBTS使用指南
  2. OpenBTS Application Suite手册
  3. OpenBTS Project手册
基于OpenBTS+USRP B210搭建GSM漏洞验证环境 1. 环境概述 本教学文档详细介绍了如何使用OpenBTS和USRP B210搭建GSM漏洞验证环境。该环境可用于蜂窝协议实现的安全研究,包括GSM协议漏洞验证、短信测试、通话测试以及GSM报文捕获与分析。 1.1 硬件选择 USRP B210 : 支持频率范围70MHz-6GHz,带宽56MHz,价格适中 其他可选硬件: HackRF、BladeRF、LimeSDR、PlutoSDR等 1.2 软件选择 OpenBTS : 开源GSM基站实现 UHD : USRP硬件驱动 Asterisk : VoIP电话系统 2. 系统准备 2.1 操作系统 Ubuntu 16.04 LTS : 推荐使用纯净系统 注意: 使用国内源可能导致依赖包找不到问题 3. 安装步骤 3.1 安装UHD驱动 从GitHub克隆UHD项目: 切换到3.14.0.0分支: 编译安装: 设置环境变量: 测试安装: 3.2 安装OpenBTS 安装依赖: 编译安装: 编译问题解决: 删除代码中的 (BctbxLogFunc) 删除强制类型转换中的 (void *) 3.3 配置流量转发 编辑 /etc/OpenBTS/iptables.rules : 根据实际情况修改网卡名称。 4. 启动和配置OpenBTS 4.1 启动组件 配置数据库: 启动transceiver连接SDR硬件: 启动基站: 启用短信服务: 启动鉴权服务: 4.2 基站配置 开启任意终端准入: 设置天线功率: 检查噪声强度: RSSI信号强度为-71dB表示背景噪声 配置的RSSI信号强度为-50dB 差值小于10dB表示上行链路质量有限 差值小于0dB表示无法建立上行链路 设置频段: 设置欢迎短信: 5. 终端管理 5.1 查看注册设备 5.2 短信测试 发送短信到411(回显测试): 手机发送任意内容到411 几秒后会收到相同内容的回复 命令行发送短信: XXXXXXX: 设备的IMSI号码 AAAAAA: 虚拟的手机号(显示为发送方) 注意: 不支持中文内容 设备间互发短信: 两台在该网络中注册的手机可通过手机号互相发送消息 6. 电话测试 6.1 Asterisk配置 编辑 /etc/asterisk/sip.conf : 编辑 /etc/asterisk/extensions.conf : 6.2 测试通话 拨打600: 经过一段语音后,会回传发送的语音信息 手机间通话: 配置完成后,注册的手机可以互相拨打电话 7. GSM抓包和重放 7.1 捕获GSM报文 开启GSM流量转发: 使用Wireshark捕获: 可捕获RR协议和SMS协议的报文 MM、CC等L3层的报文可能无法直接捕获(因payload在SIP协议中传输) 7.2 报文篡改 根据OpenBTS架构: 手机1->BTS使用GSM消息通信 BTS将SETUP请求解析并包装成SIP报文 根据Asterisk配置找到手机2 基于解析的SIP报文,包装成GSM报文发送给手机2 可行方案 : 直接修改BTS代码,发送包含特定payload的报文 8. 日志监控 8.1 设备日志 三星设备: 拨打 *#9900# 进入sysdump日志系统 可dump设备日志 使用adb logcat: 8.2 真机调试 参考Synacktiv文章: 通过TEE漏洞重写modem固件 将调试器写入不用的代码段实现调试功能 9. 注意事项 本环境仅限实验室环境使用 仅用于蜂窝协议实现的安全研究 切勿用于非法目的 天线功率和距离会影响手机接入 噪声干扰会影响通信质量 10. 参考资源 OpenBTS使用指南 OpenBTS Application Suite手册 OpenBTS Project手册