GSM Hacking:如何对GSM/GPRS网络测试进行测试

写在前面

这里需要介绍的是GSM / GPRS网络测试的一些方法,随着现在硬件设备连网现象的普遍存在,例如智能电表、自动变速箱控制单元(TCU)、POS机、报警系统等。这些设备通常需要与网络连接,GSM/2G是1992年欧洲标准化委员会统一推出的标准,它采用数字通信技术、统一的网络标准。加密并不是强制性要求的,但是没有加密通信网络其用户也不会收到通知。这里就不得不提出一个概念移动台(MS),它是移动用户的终端设备,同时是公用GSM移动通信网中用户使用的设备,是整个GSM系统中用户能够直接接触的唯一设备。

移动台能通过无线方式按组成通信网络,为主叫和被叫提供通信完成各种控制和处理,MS还具备与使用者之间的接口,如完成通话呼叫所需要的话筒、扬声器,显示屏或按键,或者提供与其他一些终端设备之间的接口,如与个人计算机或传真机之间的接口、或同时提供这两种接口。因此,根据用户应用情况,移动台可以是单独的移动终端(MT、手持机、车载台或者是移动终端(MT〕直接与终端设备(TE)传真机相连接而构成,或者是移动终端(MT)通过相关终端适配器(TA〕与终端设备(MT)相连接而构成,而这个也有可能出现连接到伪基站的可能性。下一代移动网络3G/UMTS以及4G/LTE,这就意味着已经出现针对这类移动网络的诈骗行为,而现在2G网络已经开始逐渐停用,新一代网络即将取代其位置。

正文

这些测试都是在实验室中进行的,而目前也有不少开源项目供我们参考使用,例如OpenBSC、OpenBTS。在早期试验中我们测试了不同的网络,我们最后决定在一台Linux系统(Debian 8)上开始OpenBTS搭建,还需要使用Ettus Research公司的USRP B200 软件无线电平台,当然我们也考虑了成本问题。另外需要说明的一点是 OpenBTS还是可以的,目前该项目支持2G、3G/UMTS。基本情况如下图

基站发信台(BTS)

基站发信台(BTS)指受控于基站控制器(BSC),属于基站子系统(BSS)的无线部分,服务于某小区的无线收发信设备,实现BTS与移动台(MS)空中接口的功能。同时也是GSM/GPRS/EDGE网络的RAN网元,BTS主要通过Um接口(GSM/GPRS/EDGE网络的空中接口)与MS(移动台)通信,通过A-bis接口与BSC通信。,同时会搜索附近的移动设备,MS(移动台)发送数字信号发送到BSC(基站控制器),然后BSC将信号转发到MSC(移动交换中心),之后MSC会连接MSC(短消息服务中心),当然这个前提是一次短信发送服务过程。

OpenBTS

OpenBTS是一个基于软件的 GSM 接入点, GSM兼容手机允许标准作为SIP端点在语音IP(VOIP)网络。OpenBTS是一个开源的软件开发和维护的网络范围。值得注意的是公众释放OpenBTS是第一个自由软件实现的低三层标准的协议栈。它是用C++写的,作为自由软件发布版本3的条件下的GNU Affero通用公共许可证。OpenBTS的提供经由呼叫SIP到VoIP软交换(例如FreeSWITCH或yate)或PBX(如Asterisk)。该VOIP交换机或PBX软件可以安装用于运行的OpenBTS本身相同的计算机,形成一个单一的计算机系统的一个独立的蜂窝网络。多OpenBTS单元也可以共享一个共同的VOIP或PBX形成更大的网络。而其主要的优点是,可以连接手机等移动网络( SIP)设备,不需要特殊的软件。可以在单一的主机上运行,并使用常见的通信协议。

测试

我们在这里使用的是之前提到的USRP,USB接口是USB 3.0,信号频率70 MHz~6GHz,而预期是在900/1800 MHz。考虑GSM网络的相关性所以需要在B200平台(GPSDO-TCXO-MODULE)上安装天线( VERT900)以及对应模块, 需要用到的软件运行在一个具有i7处理器、固态硬盘、8g内存笔记本上面,笔记本系统(Debian 8 Linux)也已经配置好了。

软件

这里就需要配置安装OpenBTS,可以参考(点击我)。安装之后就可以运行了,Sipauthserve 是 SIP 鉴权服务配置,smqueue是短信服务,Asterisk是之前介绍的VoIP PBX 服务,Openbts是核心部分,同时也是GSM网络协议栈。

硬件

SDR平台可以通过USB连接线或者网线连接到计算机,同时也是一种无线电广播通信技术,它基于软件定义的无线通信协议而非通过硬连线实现。频带、空中接口协议和功能可通过软件下载和更新来升级,而不用完全更换硬件,也通过动态加载新的波形和协议可使用不同的波形和协议操作,而其频率也是在50 MHz到6 GHz,也就是说不限制在特定的应用程序,可以通过主机来调整其状态。

基本操作

如果已经配置好OpenBTS,那么就开始启动服务吧

root@GSMTB:/home/gsm# start openbts

openbts start/running, process 5066

这里可以通过命令行界面来安装,在 /OpenBTS路径下找到对应信息

root@GSMTB:/home/gsm# cd /OpenBTS/

root@GSMTB:/OpenBTS# ./OpenBTSCLI

OpenBTS Command Line Interface (CLI) utility

Copyright 2012, 2013, 2014 Range Networks, Inc.

Licensed under GPLv2.

Includes libreadline, GPLv2.

Connecting to 127.0.0.1:49300...

Remote Interface Ready.

Type:

 "help" to see commands,

 "version" for version information,

 "notices" for licensing information,

 "quit" to exit console interface.

OpenBTS>

这里需要查看OpenBTS发射功率,数值应该是45到70。数值越高,功率越低。最安全的数值是45,50~55也还可以,在命令行页面检查完成之后,出现问题就需要检查是否有干扰设备。

OpenBTS> power

current downlink power -45 dB wrt full scale

OpenBTS>

CellID

在这里需要检查一下配置情况,如基站编号ID信息,你可以输入CELLID查看信息

OpenBTS> cellid

MCC=001 MNC=01 LAC=1010 CI=10

OpenBTS>

这里就可以看到MCC和MNC码了。MCC:移动国家码,MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,由三个数字组成( ITU-T E.212),测试网络的默认值是001。MNC 即移动网络号码,用于

识别移动客户所属的移动网络,测试默认值01。基本上配置好OpenBTS,然后模拟这些过程,同时利用到了MCC/MNC码,而下面就是改变这些数值(上面和这一步主要是改变编号,可做可不做建议不用考虑)

OpenBTS> config GSM.Identity.MCC 234

GSM.Identity.MCC is already set to "234", nothing changed

OpenBTS> config GSM.Identity.MNC 20

GSM.Identity.MNC is already set to "20", nothing changed

OpenBTS> cellid

MCC=234 MNC=20 LAC=1010 CI=10

OpenBTS>

GSM网络不使用手机号码来识别用户,主要的是 IMSI码,它是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。其总长度不超过15位,同样使用0~9的数字。通信时手机将IMSI存储于一个64位的字段发送给网络,为了防止非法个人或团体通过监听无线路径上的信令交换而窃得移动客户真实的 IMSI码或跟踪移动客户的位置,就会使用临时识别码 – TMSI。

连接网络

这里就需要将测试的设备连接网络

枚举设备信息,这里可以使用 tmsis 命令

OpenBTS> tmsis

IMSI            TMSI IMEI            AUTH CREATED ACCESSED TMSI_ASSIGNED

234200900527575 -    358246838000527 2    264s    264s     0

204043521650775 -    358921020018920 2    11m     11m      0

234261027406775 -    358921020018920 2    7h      6h       0

OpenBTS>

从上面的例子中得知,IMEI码有助于我们识别目标设备,由于GSM网络认证很大程度上依赖于存储在SIM卡中的加密密匙,OpenBTS支持三种类型的认证:AUTH type 2主要是未经身份验证的认证类型,AUTH type 1是缓存认证,可以通过OpenBTS来进行简单的加密认证,AUTH type 0主要是有关SIM密匙的认证,连接网络之后会收到下面的短信。

用户管理

在这一情况下需要连接网络来进行电话测试,如果没有设置好手机网络,即你的手机以及SIM卡还有IMSI码,而需要进行测试就需要分配好测试号码,这里需要连接网络还有使用之前的tmsis命令来进行配置,这样就可以出现之前的认证信息(AUTH),可以参考下面,其实AUTH 1已经满足测试了,如果要是有关SIM卡的测试可能会用到AUTH 0。

OpenBTS> tmsis

IMSI            TMSI IMEI            AUTH CREATED ACCESSED TMSI_ASSIGNED

234335501150083 -    352048064107610 1    285m    81m      0

234207505270905 -    358240052768380 2    268m    268m     0

可以利用下面的命令来查看分配到的号码

root@GSMTB:/OpenBTS# cd /opt/dev/NodeManager/

root@GSMTB:/opt/dev/NodeManager# ./nmcli.py sipauthserve subscribers read

raw request: {"command":"subscribers","action":"read","key":"","value":""}

raw response: {

        "code" : 200,

        "data" : [

                {

                        "imsi" : "IMSI260032995311149",

                        "msisdn" : "1020",

                        "name" : "Orange"

                },

                {

                        "imsi" : "IMSI001010000000000",

                        "msisdn" : "1000",

                        "name" : "MagicSIM"

                },

                {

                        "imsi" : "IMSI234335501150083",

                        "msisdn" : "1030",

                        "name" : "iPhone5s"

                }

        ]

}

这里已经分配好号码了,IMSI码234335501150083,但没有查看到IMSI 234207505270905。其实需要注意的是MSISDN码,它主要是指主叫用户为呼叫GSM PLMN中的一个移动用户所需拨的号码,作用同于固定网PSTN号码;是在公共电话网交换网络编号计划中,唯一能识别移动用户的号码。这里就会看到1030已经归属到234335501150083(IMSI码),认证和分配MSISDN码到目标设备中,这里需要运行nmcli.py(网络管理命令行接口),并添加 MSISDN码,然后运行下面命令,创建用户,开始验证

./nmcli.py sipauthserve subscribers create name imsi msisdn

使用完整的身份验证

./nmcli.py sipauthserve subscribers create name imsi msisdn ki

将1234 (MSISDN码)分配到234207505270905(IMSI 码),这里需要注意前缀问题

root@GSMTB:/OpenBTS# cd /opt/dev/NodeManager/

root@GSMTB:/opt/dev/NodeManager# ./nmcli.py sipauthserve subscribers create "Nexus5" IMSI234207505270905 1234

raw request: {"command":"subscribers","action":"create","fields":{"name":"Nexus5","imsi":"IMSI234207505270905","msisdn":"1234","ki":""}}

raw response: {

        "code" : 200,

        "data" : "both ok"

}

root@GSMTB:/opt/dev/NodeManager#

注册目标网络设备然后使用tmsis命令

OpenBTS> tmsis

IMSI            TMSI IMEI            AUTH CREATED ACCESSED TMSI_ASSIGNED

234200905750527 -    358240052768380 1    6h      1s       0

234207505270905 -    352048064107610 1    7h      45m      0

OpenBTS>

测试语音通话

要进行进一步的测试,您可以通过这些数字来测试语音呼叫:2600(echo服务)、2602(噪音测试)。测试中可以获得额外的信息,如下

OpenBTS> chans

CN TN chan  transaction Signal SNR  FER   TA  TXPWR RXLEV_DL BER_DL Time IMSI

      type  id          dB          pct   sym dBm   dBm      pct

0  3  TCH/F T106        32     25.2 5.08  0.2 5     -100     2.26   0:12 234335501150083

OpenBTS> calls

TranEntry( tid=106 GSMState=active chan=(C0T3 TCH/F state=Established) Subscriber=( Imsi=234335501150083 Tmsi=(no tmsi) Imei="") L3TI=8 Service=MOC to=2602 stateAge=(13 sec) stack=( Machine=(InCallMachine tid=106 C0T3 TCH/F CCState=active PopState=0)))

1 transactions in table

OpenBTS>

短信测试

如果smqueue部分一切正常,那么就可以进行测试了,分配MSISDN码接收短信,你可以指定其接受和发送短信。

如果进一步确认就需要查看日志(/var/log/messages openbts.log)信息了,使用下面命令查看

root@GSMTB:/var/log# cat OpenBTS.log | grep -i smqueue

May 14 15:10:32 GSMTB smqueue: NOTICE 1003:1066 2015-05-14T15:10:32.3 smqueue.cpp:2455:main_loop: Got SMS rqst qtag '144201--OBTSorubnzrmmaqfyrxb' from IMSI234335501150083 for smsc

May 14 15:10:32 GSMTB smqueue: NOTICE 1003:1067 2015-05-14T15:10:32.3 smqueue.h:505:get_text: Decoded text: Test123

May 14 15:10:33 GSMTB smqueue: NOTICE 1003:1067 2015-05-14T15:10:33.3 smqueue.h:505:get_text: Decoded text: Test123

May 14 15:10:34 GSMTB smqueue: NOTICE 1003:1067 2015-05-14T15:10:34.7 smqueue.cpp:318:handle_response: Got 200 response for sent msg '144201--OBTSorubnzrmmaqfyrxb' in state 12

May 14 15:55:32 GSMTB smqueue: NOTICE 1003:1066 2015-05-14T15:55:32.0 smqueue.cpp:2455:main_loop: Got SMS rqst qtag '355318--OBTSuuebbbqoumpjhlia' from IMSI234207505270905 for smsc

May 14 15:55:32 GSMTB smqueue: NOTICE 1003:1067 2015-05-14T15:55:32.0 smqueue.h:505:get_text: Decoded text: Test321

May 14 15:55:33 GSMTB smqueue: NOTICE 1003:1067 2015-05-14T15:55:33.0 smqueue.h:505:get_text: Decoded text: Test321

May 14 15:55:35 GSMTB smqueue: NOTICE 1003:1067 2015-05-14T15:55:35.7 smqueue.cpp:318:handle_response: Got 200 response for sent msg '355318--OBTSuuebbbqoumpjhlia' in state 12

就像之前描述的那样,可以查看记录来看短信发送情况,可以在命令行页面直接输入下面命令,然后查看OpenBTS.log文件

OpenBTS> help sendsms

sendsms IMSI src# message... -- send direct SMS to IMSI on this BTS, addressed from source number src#.

OpenBTS> sendsms 234335501150083 6666 bleszkolytki

message submitted for delivery

GPRS网络连接

这里就需要进行 APN配置,配置目标设备之后然后进行网络连接测试,在这之前还需要进行iptables配置,如下

root@GSMTB:/etc/OpenBTS# iptables -t nat -L -n -v

Chain PREROUTING (policy ACCEPT 1166 packets, 211K bytes)

 pkts bytes target     prot opt in     out     source               

destination

Chain INPUT (policy ACCEPT 1063 packets, 203K bytes

pkts bytes target     prot opt in     out     source               

destination

Chain OUTPUT (policy ACCEPT 94 packets, 8816 bytes)

pkts bytes target     prot opt in     out     source               

destination

Chain POSTROUTING (policy ACCEPT 56 packets, 6125 bytes)

pkts bytes target     prot opt in     out     source               

destination

  127  8248 MASQUERADE  all  --  *      eth0    0.0.0.0/0

 0.0.0.0/0

如果没有看到配置信息请运行下面命令

iptables-restore < /etc/OpenBTS/iptables.rules

所有的GPRS流量将通过网络(eth0)连接到笔记本电脑,之后连接到USRP。所以请一定连接到网络

Wireshark分析流量数据

当运行openbts 服务之后应该可以使用GPRS流量然后再连接到GSM网络,而GPRS流量又是通过SGSN即服务GPRS支持节点,然后利用Wireshark捕获流量信息(eth0),配置信息如下

root@GSMTB:/home/gsm# ifconfig

eth0     Link encap:Ethernet  HWaddr d4:be:d9:34:04:9c

         inet addr:10.20.30.40  Bcast:10.20.30.255  Mask:255.255.255.0

         inet6 addr: fe80::d6be:d9ff:fe34:49c/64 Scope:Link

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

         RX packets:73562 errors:0 dropped:0 overruns:0 frame:0

         TX packets:6515 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:1000

         RX bytes:11524083 (10.9 MiB)  TX bytes:1224915 (1.1 MiB)

         Interrupt:20 Memory:e6e00000-e6e20000

lo       Link encap:Local Loopback

         inet addr:127.0.0.1  Mask:255.0.0.0

         inet6 addr: ::1/128 Scope:Host

         UP LOOPBACK RUNNING  MTU:65536  Metric:1

         RX packets:1913718 errors:0 dropped:0 overruns:0 frame:0

         TX packets:1913718 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:0

         RX bytes:259161083 (247.1 MiB)  TX bytes:259161083 (247.1 MiB)

sqsntun  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

         UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1

         RX packets:5088 errors:0 dropped:0 overruns:0 frame:0

         TX packets:4644 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:500

         RX bytes:714308 (697.5 KiB)  TX bytes:2503539 (2.3 MiB)

所有外部流量信息(IP)都会将 eth0 IP地址作为源地址

拦截流量

这里需要用到Burp proxy来配置反向代理,几步就可以完成

运行

root@GSMTB:/home/gsm#java -jar -Xmx1024m burpsuite_free_v1.6.01.jar

设置Proxy Listener,按照下面的截图即可(注意是 eth0 的IP地址)

重新定义主机地址

所有的请求都会发送到eth0 IP地址上(端口80),如果对此感兴趣的小伙伴可以(点击我),来获取更多的信息。

*参考来源nccgroup

时间: 2024-11-13 09:36:54

GSM Hacking:如何对GSM/GPRS网络测试进行测试的相关文章

GSM Hacking:使用BladeRF、树莓派、YatesBTS搭建便携式GSM基站

每次看到黑客在网上发布的那些GSM技术相关文章我都十分惊讶.然而在没有Software Defined Radios (SDRs)之前,玩GSM并不便宜,除此之外想要好好玩你得下大功夫. 拓展阅读 GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站 极客DIY:如何构建一台属于自己的基站 在阅读多篇有关GSM基站的文章之后,我注意到有关GSM基站这个话题有许多的不一致或者是讲的不够细致. 基于这一点,我决定写下今天这篇文章,进行手把手教学. 在文章开始之前,我要感谢所有

GSM Hacking Part② :使用SDR捕获GSM网络数据并解密

0×00 在文章第一部分 GSM Hacking Part① :使用SDR扫描嗅探GSM网络 搭建了嗅探GSM流量的环境,在第二部中,我们来讨论如何捕获发短信以及通话过程中的流量,从捕获到的数据中解密提取出短信文字以及通话语音. 0×01 1.1 获取三星漏洞利用代码: 这是三星的Modem interface exposed via USB通过该exp可对设备输入AT指令进行调试(此方法仅适用于:Galaxy Note 3.Galaxy S4.Galaxy S5.Galaxy S6). AT

GSM Hacking Part① :使用SDR扫描嗅探GSM网络

0×00 写在开头 近期,发现Crazy Danish Hacker在YouTuBe发布了一个挺不错的教程视频:使用SDR嗅探监听GSM网络的通信流量(GSM Sniffing Teaser – Software Defined Radio Series).该教程从电视棒的安装到扫描.嗅探工具的使用.GSM流量包的捕获解密都有详细说明演示: 作为搬运工,在这里将分两三部分参考&总结一下该教程的主要内容,输出一篇中文教程,希望能够给对这方面感兴趣的童鞋带来一定帮助. 0×01 环境搭建 OS:GN

如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证 ,纯干货!| 硬创公开课

   这次公开课请来的嘉宾对自己的简介是: 连续创业失败的创业导师: 伪天使投资人: 某非知名私立大学创办人兼校长: 业余时间在本校通信安全实验室打杂. 自从他在黑客大会上演讲<伪基站高级利用技术--彻底攻破短信验证码>后,黑产就盯上了这项技术.他们给能仿制这项攻击方法的人开价保底一个月 200 万元,外加分成. 这个攻击方法其实1秒钟可以血洗很多个银行账号.他说,保守估计一小时能带来 7000 万元的黑产产值.但是,他并不是为了钱.他的原话是:"短信验证码这种安全机制朽而不倒,我想

剖析 GSM 加密机制以及位置更新的过程

你有没有想过打开手机时会发生什么?它是如何以安全的方式与网络进行通信?几乎所有人都知道TCP / IP,并且可能许多人还是专家,但是谈到电信方面,很少有人知道它的内部原理. gsm中的消息结构是什么?它使用的加密类型是什么?因此,今天我们将详细介绍gsm的加密标准,以及手机如何更新移动网络的位置. 当你打开手机发生了什么? 当您打开手机时,它首先启动其无线电资源和移动管理程序. 手机通过SIM或网络接收附近地区支持的频率列表. 它根据功率级别和移动提供商在一个单元上存储.之后,它会对认证发生的网

WCDMA与GSM系统规划差异性分析

GSM系统是目前全球覆盖范围最广的第二代无线网络,它采用TDMA(时分多址)接入方式,即在一个载频信道内,按相同的时间间隔划分成每帧若干时隙的固定循环周期,每个时隙承载一个业务用户信息和必要的信令.这样,一个载频信道由若干个用户按时间顺序依次占用,以不同时隙作为区分不同用户的方式. GSM的特征 在GSM系统中,每个载频信道带宽为200KHz,每帧8个时隙,即理论上可同时为8个用户提供传输通道,时隙长度0.577ms,每帧时长4.615ms.WCDMA系统作为第三代无线网络的主要标准之一,将高速

源代码-便携式多通道GSM定位技术转让

问题描述 便携式多通道GSM定位技术转让 全套GSM被动定位技术转让,含所有源代码,硬件设计原理图,PCB图等,转让价25万,有意请加29180490,非诚勿扰.

Moto C118 基于 Osmocom-BB 和 OpenBTS 搭建小型GSM短信基站

此文章PDF文档下载地址:点击下载 0x00 写在前面 大家应该都听说过摩托罗拉C118配合Osmocom-BB实现GSM网络下的短信拦截功能吧,在14年左右新出了一种玩法就是Osmocom-BB的sylvain/testing分支固件可以配合OpenBTS,,借助周围信号强度较大的ARFCN伪造出一个新的基站信号.不过由于摩托罗拉C118的问题,无法实现语音通话功能只可以发送短信(默认只可以发送英文短信,修改源码可以实现发送中文短信) 以下内容将会指导你怎样用Osmocom-bb兼容的手机(如

GSM cell phone calls use outdated encryption that can now be cracked with rainbow tables on a PC

Decrypting GSM phone calls Motivation. GSM telephony is the world's most popular communication technology spanning most countries and connecting over four billion devices. The security standards for voice and text messaging date back to 1990 and have