电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 2139 人浏览分享

GSM骇客技术-无线电安全

[复制链接]
2139 0
本帖最后由 zhaorong 于 2021-6-5 11:19 编辑

0x01 前言

本文中所有内容仅供学习研究 请勿用于非法用途。大多数国家法律规定监听均为违法。

0x02 知识灌输

GSM:全球移动通信系统 Global System for Mobile Communications 缩写为GSM 由欧洲电信标准组织ETSI制订的一
个数字移动通信标准。它的空中接口采用时分多址技术 [1]  。自90年代中期投入商用以来被全球超过100个国家采用GSM
标准的无处不在使得在移动电话运营商之间签署"漫游协定"后用户的国际漫游变得很平常。 GSM 较之它以前的标准最大的
不同是它的信令和语音信道都是数字式的 因此GSM被看作是第二代  2G 移动电话系统 [2] Baidu 百科。

161606xc2wa7qc91wcukfe.jpg

RTL-SDR: 这是一个低廉的家用消费档次的 DVB-T USB接口的接收机的创新发明一个
完全的软件定义无线电。

0x03 文章说明

本文演示系统为Windows10+VMware虚拟机的Kali Linux或Mx Linux 可能会使用到。
本文的RTL-SDR为某宝30块钱包邮 自改电容滤波。

0x04 整备

提示:GSM网络默认使用A5/1加密算法。如果要得到原始的数据 需要将截获的数据进行破解 一般是用
一个大约2T的“彩虹表”进行碰撞。但国内GMS网络据说没有加密。

4.1 安装GNU Radio

Kali已经预装了gnuradio,kali用户可以跳过这一步。
Linux系其他用户可以执行一下脚本安装:
  1. apt-get install gnuradio
  2. apt-get install gnuradio-dev
  3. apt-get install cmake
  4. apt-get install libusb-1.0.0-dev
  5. apt-get install libpulse-dev
  6. apt-get install libboost-all-dev
  7. git clone git://git.osmocom.org/rtl-sdr.git
  8. git clone git://git.osmocom.org/osmo-sdr
  9. git clone git://git.osmocom.org/gr-osmosdr
  10. git clone git://git.osmocom.org/csete/gqrx.git
  11. mkdir sdr
  12. cd sdr
  13. Mkdir gnuradio-src
  14. cd gnuradio-src
  15. wget http://www.sbrac/file/build-gnuradio
  16. chmod a+x build-gnuradio
复制代码

4.2 安装Airprobe

先安装一下依赖:
sudo apt-get install git-core autoconf automake libtool g++ python-dev swig libpcap0.8-dev
cmakegit libboost-all-dev libusb-1.0-0 libusb-1.0-0-dev libfftw3-dev swig python-numpy lib
pulse-dev libpcsclite-dev

4.3 安装安装libosmocore

git clone git://git.osmocom.org/libosmocore.git

162753lratlezhracreurb.jpg

  1. autoreconf -i
  2. make
  3. sudo make install
  4. sudo ldconfig
复制代码

0x05 Start Hack

中国移动GSM信号频段:上行/下行:890-909/935-954Mhz 但是测试时需要相对精确的数值。怎么办?打给
10086客服小妹,她也未必知道。因为你所处位置的GSM频率和基站功率、你距离基站距离等都有关系 而且我
们的接收装置(电视棒)本身还存在ppm offset。

所以你不要再难(tiáo)为(xì)客服小妹了 挂掉电话 用一个叫kalibrate的工具解决这些问题:
ppm offset或frequency offset:频率偏移 俗称偏频,一般由于硬件信号的源宿时钟不同步造成。
先看看kalibrate的基本用法:
  1. kal -h
  2. kalibrate v0.4.1-rtl, Copyright (c) 2010, Joshua Lackey
  3. modified for use with rtl-sdr devices, Copyright (c) 2012, Steve Markgraf
  4. Usage:
  5.     GSM Base Station Scan:
  6.         kal <-s band indicator> [options]

  7.     Clock Offset Calculation:
  8.         kal <-f frequency | -c channel> [options]
  9. Where options are:
  10.     -s  band to scan (GSM850, GSM-R, GSM900, EGSM, DCS, PCS)
  11.     -f  frequency of nearby GSM base station
  12.     -c  channel of nearby GSM base station
  13.     -b  band indicator (GSM850, GSM-R, GSM900, EGSM, DCS, PCS)
  14.     -g  gain in dB
  15.     -d  rtl-sdr device index
  16.     -e  initial frequency error in ppm
  17.     -v  verbose
  18.     -D  enable debug messages
  19.     -h  help
复制代码

搜索附近的GSM基站信息:kal -s 900

99.jpg

搜到两个基站 上面一个信号比较强 频率为946Mhz,我们选用这个基站 并 继续使用kalibrate帮助我们校
准电视棒的偏频,使用 -c 参数加我们基站的频道号channel来计算出这个误差值:kal -c 55
得到的结果 average为偏频的平均值,单位kHz,+表示我们的电视棒高出这么多 所以在测试时要用频率值减去这个值
下面的ppm值是另一种偏频单位 反而更常用,但是我们用来接收先好的软件不支持这个值的改动,所以先不做深究。

接下来打开wireshark,注意要选择回环网卡 并在启动后选择gsmtap过滤器:

98.jpg
96.jpg

接着把wireshark放在一边 使用airprobe的gsm_receive_rtl 模块来接收GSM信号:
注:Airprobe默认只支持下行的非跳跃non-hopping 窄频通道信号 如果想
要监听上行信号可以尝试一下插两条电视棒同时工作。

首先进入目录:/opt/gsm/airprobe/gsm-receiver/src/python
接着输入以下命令 打开一个动态的波形图:
./gsm_receive_rtl.py -s 1e6 -f 946M
参数解释:-s 采样率 默认为1800000,但实践证明1000000 的采样率采样效果更好 1e6的写法表示1后面有6个0
大家上小学用的计算器上应该见过这种表示方法。-f 频率 不用多说。还有个常用的参数是 -c  配置控制信道类型。
控制信道 CCH :是用于传送信令或同步数据。 主要有三种:广播信道 BCCH公共控制
信道CCCH 和专用控制信道 DCCH。

Airprobe支持的控制类型:
  1. 0C : TimeSlot0  "Combined configuration", with SDCCH/4
  2.           (FCCH + SCH + BCCH + CCCH + SDCCH/4)
  3. 0B : TS0  "FCCH + SCH + BCCH + CCCH"
  4. 1S : TS1  SDCCH/8
  5. 2T : TS2  (Full Rate) Traffic
  6. 1TE: TS1  Enhanced Full Rate Traffic
复制代码

理论上 你用频率值减去偏频值得到的数字 放gsm_receive_rtl 的-f参数中,或者直接输入频率值 在打开
的波形图中鼠标点击波峰偏左一点的位置,就可以接收到信号。但现实往往是残酷的,你会发现经常打
开波形图都是下图这样的:

63.jpg

波峰距离原点十万八千里有木有!这种情况下 不管你怎么点 点哪里 在wireshark里都看不到任何东西。
这时候需要我们小幅修改频率值 将波峰尽量微调值处在原点附近。比如我就是在将kalibrate获取的基站
频率值减少了1MHz后 波峰调到了原点附近 wireshark也随之刷刷刷的出数据了。

0x06 结语

用来接收GSM信号还有很多方法可以尝试 比如kali自带的rtl_sdr 开源的arfcncalc等工具。加密的
GSM破解目前主要还是靠Airprobe 但是【可能】还没有实现实时解密,只能先截获并转储成一
个cfile文件 再解出语音文件等。

最后值得一体的是GSM的破解已经出现在老外的CTF中 如RuCTF 2014 Quals-Misc 500-GSM
题目中的GSM还是加密的 需要找到KC码来进行破解。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.