基于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驱动
-
从GitHub克隆UHD项目:
git clone https://github.com/EttusResearch/uhd.git -
切换到3.14.0.0分支:
git checkout UHD-3.14.0.0 -
编译安装:
cd uhd/host mkdir build cd build cmake ../ make make install -
设置环境变量:
export LD_LIBRARY_PATH=/usr/local/lib -
测试安装:
uhd_usrp_probe
3.2 安装OpenBTS
-
安装依赖:
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 -
编译安装:
./autogen.sh ./configure make sudo make install -
编译问题解决:
- 删除代码中的
(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 启动组件
-
配置数据库:
sudo sqlite3 /var/lib/asterisk/sqlite3dir/sqlite3.db ".read ./apps/OpenBTS/OpenBTS.example.sql" -
启动transceiver连接SDR硬件:
sudo transceiver & -
启动基站:
sudo OpenBTS & -
启用短信服务:
sudo smqueue & -
启动鉴权服务:
sudo OpenBTSCLI
4.2 基站配置
-
开启任意终端准入:
config Control.LUR.OpenRegistration * -
设置天线功率:
config GSM.Radio.PowerManager.MaxAttenDB 10 -
检查噪声强度:
noise- RSSI信号强度为-71dB表示背景噪声
- 配置的RSSI信号强度为-50dB
- 差值小于10dB表示上行链路质量有限
- 差值小于0dB表示无法建立上行链路
-
设置频段:
config GSM.Radio.Band 900 -
设置欢迎短信:
config OpenBTS.WelcomeSM "Welcome to OpenBTS"
5. 终端管理
5.1 查看注册设备
OpenBTSCLI> tmsis
5.2 短信测试
-
发送短信到411(回显测试):
- 手机发送任意内容到411
- 几秒后会收到相同内容的回复
-
命令行发送短信:
sendsms XXXXXXX AAAAAA "Test message"- XXXXXXX: 设备的IMSI号码
- AAAAAA: 虚拟的手机号(显示为发送方)
- 注意: 不支持中文内容
-
设备间互发短信:
- 两台在该网络中注册的手机可通过手机号互相发送消息
6. 电话测试
6.1 Asterisk配置
-
编辑
/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 -
编辑
/etc/asterisk/extensions.conf:[phones] exten => 600,1,Answer() exten => 600,n,Echo() exten => 600,n,Hangup()
6.2 测试通话
-
拨打600:
- 经过一段语音后,会回传发送的语音信息
-
手机间通话:
- 配置完成后,注册的手机可以互相拨打电话
7. GSM抓包和重放
7.1 捕获GSM报文
-
开启GSM流量转发:
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT -
使用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:
adb logcat
8.2 真机调试
参考Synacktiv文章:
- 通过TEE漏洞重写modem固件
- 将调试器写入不用的代码段实现调试功能
9. 注意事项
- 本环境仅限实验室环境使用
- 仅用于蜂窝协议实现的安全研究
- 切勿用于非法目的
- 天线功率和距离会影响手机接入
- 噪声干扰会影响通信质量