使用OpenBTS基站测试物联网模块安全性
0×00 引子
近年来,随着云计算、物联网技术的快速发展,物联网的理念和相关技术产品已经广泛渗透到社会经济民生的各个领域,越来越多的穿戴设备、家用电器通过蓝牙、Wi-Fi、Li-Fi、z-wave、LoRa等技术接入互联网,成为联网的终端设备。
但是由于这些技术普遍为短距离无线通信技术,通常被设计用于室内和短距离使用,在室外尤其是非视距下性能表现非常差,而作为现有成熟的GSM(Global System for Mobile Communication)技术,因其网络在全国范围内实现了联网和漫游,在网络资源、传输特性及数据可靠性等方面的优势,提供了一个机动、灵活、可靠的远距离传输方式,所以使用GSM模块联网的方案也被广泛使用。
0×01 测试短板
针对短距离无线通信技术的测试方法有很多,同时也被大家所悉知、使用,所以这里不再一一详述。而对于通过使用2G/GSM、3G/UMTS以及4G/LTE基站联网通信的设备,例如智能电表、POS机、抓娃娃机、自动售货机这些硬件的测试方法、技巧却是寥寥无几,几乎一片空白。
本文将分享如何通过SDR加开源项目搭建伪基站并使用伪基站的GPRS功能作为网关来进行GSM/GPRS网络测试,并对GSM模块的硬件流量进行拦截、分析、重放等。
0×02 环境搭建
下载Ubuntu-16.04-desktop-i386.iso,安装使用一台全新的机器,防止因依赖问题导致的报错。
2.1 更新
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
2.2 搭建OpenBTS开发环境
mkdir sdr //新建sdr文件夹
cd sdr //进入该文件夹
git clone https://github.com/RangeNetworks/dev.git
cd dev
./clone.sh //从GitHub克隆代码
./switchto.sh master //切到master分支
./build.sh B200
编译下载的源码,因为使用的是USRP B200 build脚本后加SDR硬件 ,如果使用的是USRP N200 则执行./build.sh N200(过程中需从谷歌下载源码,建议全程翻墙,否则会报错!)
编译过程根据网络、机器性能而异,通常在30-45分钟左右,编译完成后,ubuntu自动安装GnuRadio、USRP的UHD驱动等相关SDR环境,但USRP的固件还需手动下载:
$sudo python /usr/lib/uhd/utils/uhd_images_downloader.py
Images destination: /usr/share/uhd/images
Downloading images from: http://files.ettus.com/binaries/images/uhd-images_003.009.002-release.zip
Downloading images to: /tmp/tmpEplLOD/uhd-images_003.009.002-release.zip
kB / kB (%) Images successfully installed to: /usr/share/uhd/images
$ uhd_usrp_probe
linux; GNU C++ version 5.3. ; Boost_105800; UHD_003.009.002--unknown -- Loading firmware image: /usr/share/uhd/images/usrp_b200_fw.hex...
-- Detected Device: B200
-- Loading FPGA image: /usr/share/uhd/images/usrp_b200_fpga.bin... done
-- Operating over USB .
-- Detecting internal GPSDO.... No GPSDO found
-- Initialize CODEC control...
-- Initialize Radio control...
-- Performing register loopback test... pass
-- Performing CODEC loopback test... pass
-- Asking for clock rate 16.000000 MHz...
-- Actually got clock rate 16.000000 MHz.
-- Performing timer loopback test... pass
-- Setting master clock rate selection to 'automatic'.
_____________________________________________________
/
| Device: B-Series Device
| _____________________________________________________
| /
| | Mboard: B200
| | revision:
| | product:
| | serial: 30EA064
| | name: MyB200
| | FW Version: 8.0
| | FPGA Version: 13.0
| |
| | Time sources: none, internal, external, gpsdo
| | Clock sources: internal, external, gpsdo
| | Sensors: ref_locked
| | _____________________________________________________
| | /
| | | RX DSP:
| | | Freq range: -8.000 to 8.000 MHz
| | _____________________________________________________
| | /
| | | RX Dboard: A
| | | _____________________________________________________
| | | /
| | | | RX Frontend: A
| | | | Name: FE-RX1
| | | | Antennas: TX/RX, RX2
| | | | Sensors: temp, rssi, lo_locked
| | | | Freq range: 50.000 to 6000.000 MHz
| | | | Gain range PGA: 0.0 to 76.0 step 1.0 dB
| | | | Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz
| | | | Connection Type: IQ
| | | | Uses LO offset: No
| | | _____________________________________________________
| | | /
| | | | RX Codec: A
| | | | Name: B200 RX dual ADC
| | | | Gain Elements: None
| | _____________________________________________________
| | /
| | | TX DSP:
| | | Freq range: -8.000 to 8.000 MHz
| | _____________________________________________________
| | /
| | | TX Dboard: A
| | | _____________________________________________________
| | | /
| | | | TX Frontend: A
| | | | Name: FE-TX1
| | | | Antennas: TX/RX
| | | | Sensors: temp, lo_locked
| | | | Freq range: 50.000 to 6000.000 MHz
| | | | Gain range PGA: 0.0 to 89.8 step 0.2 dB
| | | | Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz
| | | | Connection Type: IQ
| | | | Uses LO offset: No
| | | _____________________________________________________
| | | /
| | | | TX Codec: A
| | | | Name: B200 TX dual DAC
| | | | Gain Elements: None
编译完成后也会在BUILD目录下生成一个以编译时间为名的文件,如果系统为32bit编译后则在该目录下生成i386.deb的软件包,如果系统为64bit则生成amd64.deb :
2.3 更新&安装依赖包
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:chris-lea/zeromq
sudo apt-get update
2.4 安装编译完成的DEB软件包
需注意是否有报错:
cd dev/BUILD/------
sudo dpkg -i libcoredumper1_1.2.1-1_i386.deb libcoredumper-dev_1.2.1-1_i386.deb
sudo dpkg -i liba53_0.1_i386.deb
sudo dpkg -i range-configs_5.0_all.deb
sudo dpkg -i range-asterisk*.deb
sudo apt-get install -f
sudo dpkg -i sipauthserve_5.0_i386.deb
sudo apt-get install -f
sudo dpkg -i smqueue_5.0_i386.deb
sudo apt-get install -f
sudo dpkg -i openbts_5.0_i386.deb
sudo apt-get install -f
0×03 开启数据转发、配置iptables
因为OpenBTS基站的GPRS网络流量是基于PC机,所以在开启基站GPRS功能前,需要开启数据包转发以及配置Iptables防火墙规则。
3.1 开启数据包转发:
ubuntu开数据转发需以root身份执行,如果不是root用户,即使使用sudo也无法开启:
sudo su
echo >> /proc/sys/net/ipv4/ip_forward
3.2 配置iptables规则:
/etc/OpenBTS/iptables.rules 配置规则文件内容如下:
# Generated by iptables-save v1.4.4
*nat
:P REROUTING ACCEPT [:]
:P
OSTROUTING ACCEPT [:]
:OUTPUT ACCEPT [:]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Generated by iptables-save v1.4.4
*filter
:INPUT ACCEPT [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
COMMIT
某些情况下机器的网卡并非eth0 ,所以需要根据自身实际情况,灵活地修改配置文件。
sudo iptables-restore < /etc/OpenBTS/iptables.rules
iptables -t nat -L -n -v
3.3 加载数据库
cd sdr/dev/openbts/apps
sudo sqlite3 -init OpenBTS.example.sql /etc/OpenBTS/OpenBTS.db ".quit" cd sdr/dev/subscriberRegistry/apps
sudo sqlite3 -init sipauthserve.example.sql /etc/OpenBTS/sipauthserve.db ".quit" cd sdr/dev/smqueue/smqueue
sudo sqlite3 -init smqueue.example.sql /etc/OpenBTS/smqueue.db ".quit"
3.4 配置asterisk
Asterisk是运行在Linux上来实现用户电话交换的IP-PBX系统开源软件,支持各种的VOIP协议。Asterisk提供了很多以前只有昂贵、专业的PBX系统才支持的功能,如:会议电话、语音信箱、交互式语音应答、自动电话转接。
在/etc/asterisk/目录中需要修改sip.conf、extensions.conf 具体方法:将手机的IMSI国际用户识别码和分配的号码登记数据asterisk中,也就是将数据写入sip.conf、extensions.conf两个配置文件。 SIP.CONF:
[IMSI46001658*****]
callerid=
canreinvite=no
type=friend
allow=gsm
context=sip-external
host=dynamic
dtmfmode=info [IMSI41004030*****]
callerid=
canreinvite=no
type=friend
allow=gsm
context=sip-external
host=dynamic
dtmfmode=info
callerid=2000003,表示将IMSI为46001658*****19的手机分配号码2000003;
canreinvite=no,表示被呼叫的手机一旦建立连接后OpenBTS将不再发送重新邀请的指令;
context=sip-external,表示允许外部未分配号码的匿名电话呼入。
0×04 启动基站:
4.1 执行 transceiver连接SDR硬件
cd sdr/dev/openbts/Transceiver52M
sudo ./transceiver
4.3 执行smqueue,启用短信服务
cd sdr/dev/smqueue/smqueue
sudo ./smqueue
4.4 执行sipauthserve,启用鉴权服务
cd sdr/dev/subscriberRegistry/apps
sudo ./sipauthserve
4.5 asterisk -vvvc or asterisk -r
4.6 启动OpenBTS终端控制台:
cd sdr/dev/openbts/apps
sudo ./OpenBTSCLI
root@0xroot:/home/init3/sdr/dev/openbts/apps# ./OpenBTSCLI
OpenBTS Command Line Interface (CLI) utility
Copyright , , Range Networks, Inc.
Licensed under GPLv2.
Includes libreadline, GPLv2.
Connecting to 127.0.0.1:...
Remote Interface Ready.
Type:
"help" to see commands,
"version" for version information,
"notices" for licensing information,
"quit" to exit console interface.
OpenBTS> version
release 5.0-master+c438a5a689 CommonLibs:76b71d509b+GPRS P built --29T23:: OpenBTS> help Type "help" followed by the command name for help on that command. alarms audit calls
cbs cellid chans
config crashme devconfig
endcall freqcorr gprs
handover help load
memstat neighbors noise
notices page power
rawconfig regperiod restart
rmconfig rxgain sendsimple
sendsms sgsn shutdown
stats sysinfo tmsis
trxfactory txatten unconfig
uptime version OpenBTS>
0×05 配置基站
GSM 900频段瀑布图:
gr-gsm &Kal扫描GSM基站
刚搭建完成的基站由于天线功率过大以及手机跟基站的距离太近等原因,可能会导致手机不能正常加入到基站,这时需要配置加入基站的条件以及设置天线功率:
允许任意机器接入:
OpenBTS> config Control.LUR.OpenRegistration .*
Control.LUR.OpenRegistration changed from "" to ".*"
设置天线功率:
OpenBTS> devconfig GSM.Radio.RxGain
GSM.Radio.RxGain changed from "" to ""
GSM.Radio.RxGain is static; change takes effect on restart
设置基站频段:
OpenBTS> config GSM.Radio.Band
GSM.Radio.Band changed from "" to ""
GSM.Radio.Band is static; change takes effect on restart
设置欢迎短信:
config Control.LUR.NormalRegistration.Message Welcome to BTS
设置基站名:
config GSM.Identity.ShortName GroundControl
将基站设置为测试网络:
config Identity config GSM.Identity.MCC
将基站设置为国内: MCC460 为中国
config GSM.Identity.MCC
设置运营商为联通:
config GSM.Identity.MNC
设置运营商为移动:
config GSM.Identity.MNC
设置ARFCN、LAC、BCC
网络色码,NCC,一般用于标识运营商;基站色码,BCC,区分同一运营商下的相同BCCH的不同基站。
一般采用BCCH频点和BSIC来联合标识小区,BSIC=NCC+BCC。在TD和WCDMA里,存在PLMN,PLMN=MCC+MNC,其中MCC为移动国家码,MNC为移动网络码标识运营商。
基站切换的时候,主要是通过CI、BCCHBSIC等信息寻找目标小区,当同时检测到邻区列表里出现同BCCH同扰码组的小区时,容易出现切换失败。
OpenBTS> config GSM.Radio.C0
GSM.Radio.C0 changed from "" to ""
GSM.Radio.C0 is static; change takes effect on restart
OpenBTS> config GSM.Identity.BSIC.BCC
GSM.Identity.BSIC.BCC changed from "" to ""
OpenBTS> config GSM.Identity.LAC
GSM.Identity.LAC changed from "" to ""
OpenBTS> config GSM.Identity.CI
GSM.Identity.CI changed from "" to ""
用户管理
在3.4配置asterisk再我们给部分用户配置了callerid号码,启动OpenBTS后可通过NodeManager目录下的nmcli.py脚本进行用户管理:
cd sdr/dev/openbts/NodeManager/
添加用户示例:
./nmcli.py sipauthserve subscribers create name imsi msisdn
将123456 (MSISDN码)分配到IMSI 码为46001658*****19的LG G3设备中
./nmcli.py sipauthserve subscribers create "LG G3" IMSI46001658*****
读取已录入信息:
root@0xroot:/home/init3/sdr/dev/openbts/NodeManager#./nmcli.py sipauthserve subscribers read
raw request: {"command":"subscribers","action":"read","key":"","value":""}
raw response: {
"code" : ,
"data" : [
{
"imsi" : "IMSI46001658*****19",
"msisdn" : "",
"name" : "LG G3"
},
{
"imsi" : "IMSI46000645*****91",
"msisdn" : "",
"name" : "MoTo"
}
]
}
启用GPRS功能:
OpenBTS> config GPRS.Enable
设置基站DNS服务器:
OpenBTS> config GGSN.DNS 8.8.8.8
编辑/etc/resolv.conf
nameserver 8.8.8.8
为防止机器重启或重启网络后/etc/resolv.conf文件被重写复原,可修改/etc/resolvconf/resolv.conf.d/head
nameserver 8.8.8.8
设置GGSN日志存放路径:
OpenBTS> devconfig GGSN.Logfile.Name /tmp/GGSN.log
查看已加入基站的设备:
OpenBTS> tmsis
IMSI TMSI IMEI AUTH CREATED ACCESSED TMSI_ASSIGNED
***** - ***** 30m 30m
查看日志:cat /var/log/OpenBTS.log
配置文件:/etc/rsyslog.d/OpenBTS.conf
发送短信:sendsms $IMSI $号码 ”$内容”
sendsms ***** "Hello World"
OpenBTS+Burp suite
使用Burp拦截硬件流量请求的方法这里可参考NCC Group的一篇博客:GSM/GPRS Traffic Interception for Penetration Testing Engagements
0×06 硬件调试
硬件芯片模块
G510-Q50-00 Pin Definitoins
焊接TTL进行调试:
串口调试:
0×07 refer
GSM/GPRS Traffic Interception for Penetration Testing Engagements
Getting Started with OpenBTS
PDF: http://openbts.org/site/wp-content/uploads/ebook/Getting_Started_with_OpenBTS_Range_Networks.pdf
HTML:https://www.safaribooksonline.com/library/view/getting-started-with/9781491924280/ch04.html
OpenBTS Application Suite Release 4.0 User Manual
http://openbts.org/site/wp-content/uploads/2014/07/OpenBTS-4.0-Manual.pdf
OpenBTS BuildInstallRun
http://openbts.org/w/index.php?title=BuildInstallRun
http://openbts.org/w/index.php?title=OpenBTS-UMTS
https://wush.net/trac/rangepublic/wiki/GPRS
How to get 3G working on the UmTRX
https://fairwaves.co/blog/openbts-umts-3g-umtrx/
FIBOCOM G510
http://www.fibocom.com/product/2-1-2-1.html
FIBOCOM G510 Q50-00
http://www.tme.eu/gb/details/g510-q50-00/gsmgpsgprshspaedgelte-modules/fibocom/g510-q50-00/
http://www.fibocom.com/upfile/down/document_2_1_2_1.pdf
http://www.tme.eu/gb/Document/fabb43e22a46fba821931db19e577988/FIBOCOM_G510_U_M.pdf
原文地址:http://www.freebuf.com/articles/wireless/124147.html
使用OpenBTS基站测试物联网模块安全性的更多相关文章
- surging如何使用swagger 组件测试业务模块
1.前言 微服务架构概念的提出已经有非常长一段时间了,但在近期几年却开始频繁地出现,大家都着手升级成微服务架构,使用着各种技术,大家认为框架有服务治理就是微服务,实现单一协议的服务调用,微服务虽然没有 ...
- 1.2 使用电脑测试MC20模块的GPS功能测试
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- 模拟摄像头解码模块最新测试 TVP5150模块 FPGA+SDRAM+TVP5150+VGA 实现PAL AV输入 VGA视频输出
模拟摄像头解码模块最新测试 TVP5150模块 FPGA+SDRAM+TVP5150+VGA 实现PAL AV输入 VGA视频输出 测试使用电视机顶盒的AV模拟信号输入,VGA显示器输出测试,效 ...
- Obloq模块:基于ESP8266的物联网模块
OBLOQ 物联网模块 OBLOQ模块是DFRobot公司开发的一款基于ESP8266芯片的物联网通信模块.模块使用串口(TTL UART)和Arduino(或者其他单片机)通信,支持MQTT,HTT ...
- 自动化测试架构设计 &&自动化持续集成测试任务实战[线性测试、模块驱动测试、数据驱动测试、关键字驱动测试]
1 为什么设计自动化测试架构 1.1 企业现状分析 压力大:产品需求不明确,上线时间确定,压力山大. 混乱:未立项,开发时间已过半,前期无控制,后期无保障. 疲于应付:开发人员交付的文件质量差,测试跟 ...
- 1.1 使用电脑测试MC20模块的基础使用和测试
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- pytest跳过指定的测试或模块
参考Allure官方文档,pytest官方文档 实现setup/teardown 1.运行带指定标记的测试 @pytest.mark.tags ,这里的tags可以自定义 命令行执行:pytest - ...
- 4g物联网模块的原理
4G DTU模块也可以被称之为是含有第四代移动通信技术的模块,是随着科技不断发展进步下物联网和移动互联网发展下的又一产物.而4G技术包括TD-LTE和FDD-LTE两种制式.集3G与WLAN于一体并能 ...
- Python测试进阶——(1)安装Python测试相关模块
安装python 安装pip yum -y install epel-release yum -y install python-pip 安装psutil 参考:https://www.cnblogs ...
随机推荐
- python3 设置滚动条
#!python3#coding=utf-8from selenium import webdriverfrom selenium.webdriver.common.by import Byimpor ...
- Vladik and cards CodeForces - 743E (状压)
大意: 给定序列, 求选出一个最长的子序列, 使得任选两个[1,8]的数字, 在子序列中的出现次数差不超过1, 且子序列中相同数字连续. 正解是状压dp, 先二分转为判断[1,8]出现次数>=x ...
- c 语言连续输入字符型数据
#include<stdio.h> #include<stdlib.h> void Input1(char* &str){ // /* 这种情况下想要逐个输入字符串数组 ...
- Python 向列表中添加元素
向列表中添加元素 1.append tabulation1.append('紫霞') ['大圣', '天蓬', '卷帘', '紫霞', '紫霞', '青霞'] 2.insert tabulation1 ...
- linux上安装vmtools
在虚拟机和宿主机之间来说操作得一直按ctrl+alt,显得比较麻烦. 那么就只要安装一个工具就可以让我们的操作更加的简易,我对vmtools安装步骤做了以下图解. 在导航栏找到这个标签,选择安装vmt ...
- 微信公众号使用LocalStorage解决返回缓存问题
在开发微信公众号上应用程序时,遇到了一个普遍的问题,从A页跳转到B页后,再由B页跳转回A页,A要要保持跟跳转前一致,通过LocalStorage可以解决. LocalStorage,很好的解决了返回的 ...
- 时间序列(六): 炙手可热的RNN: LSTM
目录 炙手可热的LSTM 引言 RNN的问题 恐怖的指数函数 梯度消失* 解决方案 LSTM 设计初衷 LSTM原理 门限控制* LSTM 的 BPTT 参考文献: 炙手可热的LSTM 引言 上一讲说 ...
- vs2015如何使用附加进程调试发布在IIS上项目
1.如何使用附加进程调试IIS上的网站项目 1)在IIS部署一个网站项目 2)保证浏览器可访问(比如访问登陆页面) 3)在项目中LoginController断点,并在工具栏的调试找到附加到进程 4) ...
- shell script auto generate the relevant header information
first : add follow context in /etc/vim/vimrc set ignorecaseset cursorlineset autoindentautocmd Buf ...
- java 一些容易忽视的小点-类和对象
构造器 通过new关键字调用 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值. 构造器是有权限的,也就是可以添加public,也可以添加 ...