利用RTL-SDR实现GSM信号的嗅探工作
PS:以下项目是在Ubuntu20.04以及Gnuradio3.8下完成的
GSM网络的不安全的事实是我们早已熟知的,事实上在国外12年左右就有完整的开源项目实现GSM Sniffing,国内大神在13年就非常详细的公开了如何实现GSM SMS Sniffing工作,当然这些项目都是(osmocom项目),如今这个项目就找不到了(404)。
一:原理篇
接下来的原理内容由于不了解底层实际的逻辑,就只能根据网上的资料进行大概的了解,算是班门弄斧了🤐
-
什么是GSM:
GSM即全球移动通信系统(Global System for Mobile Mommunications),俗称“全球通”,由欧洲电信标准组织(ETSI)制定的数字移动电话网络标准,以蜂窝网络形式覆盖,具有频谱利用率高,话音质量佳,容量大,覆盖广等特点。GSM使用的是时分多址的变体,并且它是目前三种数字无线电话技术(TDMA、GSM和CDMA)中使用最为广泛的一种。GSM将资料数字化,并将数据进行压缩,然后与其它的两个用户数据流一起从信道发送出去,另外的两个用户数据流都有各自的时隙。GSM实际上是欧洲的无线电话标准。
-
GSM工作频段
目前GSM系统主要有GSM900、GSM1800以及GSM1900也是欧洲国家普遍采用的GSM900系统,而我国主要采用GSM900及GSM1800,其中GSM900的上行工作频段为890-915MHz,下行工作频段为935-960MHz,所占带宽25M,且上下频点为25x5-1共124个,而GSM1800的上行工作频段为1710-1785MHz,下行工作频段为1805-1880MHz,所占带宽75M,且上下频点为75x5-1共374个。由于采用了不同频段因其适用的手机也各不尽相同,不过目前国大部分手机基本上是双频手机,也随着信息技术的发展,手机市场也不甘示弱也有三频手机的出现,这极大程度上实现了真正的畅游全世界的理念。
GSM网络中频道ARFCN( Absolute Radio Frequency Channel Number)即绝对无线频道编号,是指在GSM无线系统中用来鉴别特殊射频通道的编号方案。ARFCN与中心频率之间的关系如下:
900频段由MS发送,BTS接收:
F 1 ( n ) = 890.2 + ( n − 1 ) ∗ 0.2 M H z F1(n)=890.2+(n-1)*0.2MHz F1(n)=890.2+(n−1)∗0.2MHz
900频段由BTS发送,BS接收:
F h ( n ) = F 1 ( n ) + 45 M H z Fh(n)=F1(n)+45MHz Fh(n)=F1(n)+45MHz
1800频段由MS发送,BTS接收:
F 1 ( n ) = 1710.2 + ( n − 512 ) ∗ 0.2 M H z F1(n)=1710.2+(n-512)*0.2MHz F1(n)=1710.2+(n−512)∗0.2MHz
1800频段由BTS发送,BS接收:
F h ( n ) = F 1 ( n ) + 95 M H z Fh(n)=F1(n)+95MHz Fh(n)=F1(n)+95MHz3.GSM系统的组成结构
GSM通信系统结构如下所示主要由移动交换子系统(MSS)、基站子系统(BSS)和移动台(MS)以及操作维护中心(OMC,Operations & Maintenance Center)组成 ,其中基站子系统由基站收发台(BTS)和基站控制器(BSC)组成;移动交换子系统由移动业务交换中心(MSC)和原地位置寄存器(HLR)、访问位置寄存器(VLR)、鉴权中心(AUC)和设备标志寄存器(EIR)等组成。移动台(MS)就是移动用户设备部分由移动终端(MS)和用户识别卡(SIM)组成用于通过无线电连接GSM网络的设备。对于移动交换中心(MSC)负责管理身份的验证,也用于移动网络呼叫连接、切换到其他的网络控制、无线信道管理等功能的设备也对移动网与公用电话交换网(PSTN)、综合业务数字网(ISDN)等固定网的接口;原地位置寄存器(HLR)用于保存手机本地用户基本信息如手机SIM卡号、手机号码、签约信以及当前的位置、是否已经关机等动态信息的保存,每个GSM网络提供商只有一个HLR;访问位置寄存器(VLR)每个MSC都有自己的VLR能够用于保存外地用户用户的动态、状态信息以及从HLR下载的用户信息,也持有临时移动用户标识(TMSI)。对于鉴权中心(AUC)处理网络请求用户的身份验证过程。更具体地说,AUC 持有共享密钥并生成用于身份验证的随机标识码。那么攻击者可以通过判断手机号的归属地,就可以区分本地手机号和外地手机号。
4.GSM网络安全
基站在不停的对外广播自己的信号及相关信息,手机会自动选择相应的频点进行连接,并且其连接过程正是用户手机与基站简单交互过程部分。正因为用户之前所提GSM网络只对用户验证单向鉴权的,所以网络鉴权能力不足,因此出现伪造于是GSM网络攻击随之而来。
- GSM网络攻击分类
-
主动攻击
就是攻击者伪装成基站(BTS),然后发射诱导信号,引导被攻击者链接到非法基站,由于 GSM 属于单向鉴权,所以移动台只能被基站鉴权,而无法对基站进行鉴权,因此用户很容易被诱导至伪基站进行数据通信。
-
被动攻击
即攻击者不会主动向被攻击者终端发送诱导信号,而是监听基站与移动台之间传播的广播信号,并且对信号进行解密以达到侦听的目的。
- 两者的区别
就是一个可以监听数据还可以动态修改往来的数据,而另一个只能被动监听数据而无法直接篡改。
b.GSM三大加密算法
A3加密算法提供了收集到网络的鉴权,A8产生密钥Kc算法,A3与A8算法通常被同时执行像(A3/A8)这样表达,用户在SIM卡和GSM网络认证过程中也就是使用在鉴别用户和产生加密语音和数据通信的过程,而这些加密算法又是基于用户专用的密钥Ki的,Ki(subscriber key)可以说是一个“主密钥”,存储在你的 SIM 卡中,GSM网络中Ki放在与用户对应的用户归属位置寄存器中(HLR)内。A5算法是GSM的保护数据安全的密钥,其密码加密算法可以分为A5/1、A5/2和A5/3三种,其中A5/1被认为性能最好的加密算法。A5/0也是一种A5算法,但不应用于数据的解密。
手机在登陆网络的过程中移动网络会随机生成一个16字节的随机数据发送给手机后手机向SIM卡进行发送这个数据,接下来SIM卡用自己的KI密钥和随机数做运算后生成一个4字节的数据作为移动网络的应答数据与此同时移动网络进行相同的算法过程后生成的数据与之比较如果一样则认定为允许连接的用户,其中涉及的算法也就是A3算法,另外SIM卡还利用Ki和随机数通过A8算法计算另一个密钥也就是Kc,它的长度是64bits。二:实战篇
接下来从项目的安装以及运行结果展示此次实战的过程:
-
gr-gsm项目的安装
首先安装完以下命令中的依赖:
sudo apt update && debian_frontend=noninteractive sudo install -y cmake autoconf libtool pkg-config build-essential libcppunit-dev swig doxygen liblog4cpp5-dev python3-docutils python3-scipy gnuradio-dev liborc-dev libosmocore-dev gr-osmosdr
源代码安装gr-gsm项目
git clone https://git.osmocom.org/gr-gsm cd gr-gsm mkdir build cd build cmake .. mkdir $home/.grc_gnuradio/ $home/.gnuradio/ make -j $(nproc) sudo make install sudo ldconfig
gr-gsm安装成功后显示如下图:
然后运行grgsm_livemon进行gr-gsm安装测试如果出现 problem with gr-gsm. no module named 'grgsm,也就是说gr-gsm项目找不到。grgsm_livemon本身是一个python文件,既然不能运行,那表明它不再所需利用的python环境下,并且要想grgsm项目顺利运行,那么必须要在安装完libiio跟libad9361-iio这两个文件下执行的,而这两个文件是Gnuradio3.8的必要文件,并且运行环境是python3.8的环境,所以我们需要把gr-gsm这个项目安排到python3.8的环境下,因此我们有两种办法解决这个问题:
(我们原先安装的grgsm项目在/usr/local/lib/python3/dist-packages目录下)
1:在gr-gsm安装的环境下创建一个软链接指向python3.8,命令如下:
ln -s /usr/local/lib/python3/dist-packages /usr/local/lib/python3.8/dist-packages
2: 直接把grgsm项目复制到python3.8的目录下,命令如下:
```sudo cp -r/usr/local/lib/python3/dist-packages/grgsm /usr/local/lib/python3.8/dist-packages/```个人建议直接使用第二个办法,免得软链接不起效。
2.安装wireshark
wireshark作为一个网络分析数据包的分析器,其分析的结果很详细明了。
ubuntu下安装命令:
sudo apt install wireshark
为了安全起见弹出的"yes"/“no"选项中选择"no”,然后以后每次的使用都需要在管理员的权限下进行使用。
3.开始搜寻基站
按住ctrl+alt+t调出命令窗口,终端输入:grgsm-scaner -v -b GSM900,结果如下图所示:
在另一个终端中输入grgsm_livemon -f 944.2M,结果如下图所示:
经过我们调整其频率就会在所建立的终端输出数据,如下图所示:
然后我们可以进行下一步的操作,我们打开另一个终端并且需要在管理员的权限下运行:
sudo wireshark -k -f udp -y gsmtap -i lo
然后我们就有wireshark运行的界面图了,如下图所示:
这样就我们完成了GSM信号的嗅探工作了。
三:此次实战项目中最终结果(以附图形式展示)
IMSI AND TMSI:
IMSI on wireshark:
GSM-SMS:
除了以上嗅探工作外我们还可以通过分析和密码破解来解码语音通话数据。