用户
搜索
  • TA的每日心情
    奋斗
    昨天 02:10
  • 签到天数: 63 天

    连续签到: 1 天

    [LV.6]常住居民II

    版主

    Rank: 7Rank: 7Rank: 7

    88

    主题

    282

    帖子

    2574

    魔法币
    收听
    0
    粉丝
    6
    注册时间
    2018-8-22

    春秋达人积极活跃奖

    发表于 2021-6-1 16:35:54 369719
    本帖最后由 M0x1n 于 2021-6-1 17:53 编辑

    0x01 前言

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

    0x02 知识灌输

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

    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系其他用户可以执行一下脚本安装:

    apt-get install gnuradio
    apt-get install gnuradio-dev
    apt-get install cmake
    apt-get install libusb-1.0.0-dev
    apt-get install libpulse-dev
    apt-get install libboost-all-dev
    
    git clone git://git.osmocom.org/rtl-sdr.git
    git clone git://git.osmocom.org/osmo-sdr
    git clone git://git.osmocom.org/gr-osmosdr
    git clone git://git.osmocom.org/csete/gqrx.git
    
    mkdir sdr
    cd sdr
    Mkdir gnuradio-src
    cd gnuradio-src 
    
    wget http://www.sbrac/file/build-gnuradio
    chmod a+x build-gnuradio

    4.2 安装Airprobe

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

    4.3 安装安装libosmocore

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

    autoreconf -i
    make
    sudo make install
    sudo ldconfig

    0x05 Start Hack

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

    所以你不要再难(tiáo)为(xì)客服小妹了,挂掉电话,用一个叫kalibrate的工具解决这些问题:

    ppm offset或frequency offset:频率偏移,俗称偏频,一般由于硬件信号的源宿时钟不同步造成。

    先看看kalibrate的基本用法:

    kal -h
    kalibrate v0.4.1-rtl, Copyright (c) 2010, Joshua Lackey
    modified for use with rtl-sdr devices, Copyright (c) 2012, Steve Markgraf
    Usage:
        GSM Base Station Scan:
            kal <-s band indicator> [options]
    
        Clock Offset Calculation:
            kal <-f frequency | -c channel> [options]
    
    Where options are:
        -s  band to scan (GSM850, GSM-R, GSM900, EGSM, DCS, PCS)
        -f  frequency of nearby GSM base station
        -c  channel of nearby GSM base station
        -b  band indicator (GSM850, GSM-R, GSM900, EGSM, DCS, PCS)
        -g  gain in dB
        -d  rtl-sdr device index
        -e  initial frequency error in ppm
        -v  verbose
        -D  enable debug messages
        -h  help

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

    搜到两个基站,上面一个信号比较强,频率为946Mhz,我们选用这个基站,并 继续使用kalibrate帮助我们校准电视棒的偏频,使用 -c 参数加我们基站的频道号(channel)来计算出这个误差值:kal -c 55

    得到的结果,average为偏频的平均值,单位kHz,+表示我们的电视棒高出这么多,所以在测试时要用频率值减去这个值。下面的ppm值是另一种偏频单位,反而更常用,但是我们用来接收先好的软件不支持这个值的改动,所以先不做深究。

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

    接着把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支持的控制类型:

    0C : TimeSlot0  "Combined configuration", with SDCCH/4
              (FCCH + SCH + BCCH + CCCH + SDCCH/4)
    0B : TS0  "FCCH + SCH + BCCH + CCCH"
    1S : TS1  SDCCH/8
    2T : TS2  (Full Rate) Traffic
    1TE: TS1  Enhanced Full Rate Traffic

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

    波峰距离原点十万八千里有木有!这种情况下,不管你怎么点,点哪里,在wireshark里都看不到任何东西。

    这时候需要我们小幅修改频率值,将波峰尽量微调值处在原点附近。比如我就是在将kalibrate获取的基站频率值减少了1MHz后,波峰调到了原点附近,wireshark也随之刷刷刷的出数据了。

    0x06 结语

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

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

    话说一入GSM深似海,里面涉及大量通信原理。大家研究这个的时候可以顺便把通信的东西再复习几遍。

    末心网络安全团队 | Q群374327762 | QQ1044631097
    GSM一文难求!
    使用道具 举报 回复
    666666666666
    使用道具 举报 回复
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册