Wireless Hacking With SDR And GnuRadio

0x01 信号捕获

市面上常见的无线遥控工作的频段,通常工作在315Mhz、433Mhz,也有少数的会采用868Mhz.915Mhz这几个频点。 我们可以用电视棒、HackRF、BladeRF等SDR硬件来确定遥控的工作频率: 打开软件按下遥控器后,能在瀑布图上看到明显的反应:

osmocom_fft -F -f 443e6 -s 4e6

gqrx

无线遥控中心频率:433870000

0x02 录制信号

SDR软件通常支持录制信号,可将遥控的信号保存为wav音频文件或者以.cfile、.raw格式保存。

这里用gnuradio-companion流图来实现信号录制以及信号重放。

左侧osmocom Source模块调用SDR硬件,我们设置其中心频率为433.874MHz,采样率为2M:

右侧上边 QT GUI Sink模块将捕获到的信号在瀑布图上展示出来,右侧下边的File Sink将录制到的信号保存为/tmp/key.raw文件:

执行流图,按下遥控前:

按下遥控:

转到/tmp 缓存目录:

0x03 信号重放

接下来再用gnuradio-companion写个信号重放的流图:

左侧File Source调用捕获到的key.raw信号文件,osmocom Sink调用HackRF、BladeRF将信号发射出去,与此同时QT GUI Time Sink、QT GUI Frequency Sink模块分别在屏幕上显示时间轴(时间域)、频率幅度(频率域),执行流图:

bingo!

0×04 演示视频 demo

https://v.qq.com/x/page/m0332e0zdo7.html

0x05 信号分析

inspectrum key.raw

信号分析&转码细节参考: 如何使用SDR+inspectrum逆向分析无线遥控信号 一文。

s = ''
a = [0.333033, 0.326189, 0.0332124, 0.388094, 0.326704, 0.0154539, 0.322883, 0.0270275, 0.0150091, 0.443235, 0.362946, 0.027745, 0.430879, 0.443824, 0.0277048, 0.330736, 0.0290668, 0.0133217, 0.376686, 0.0123277, 0.00931546, 0.446231, 0.397617, 0.0162406, 0.447861, 0.0050071, 0.0109479, 0.389289, 0.0271959, 0.0138626, 0.32109, 0.0268736, 0.0129828, 0.401142, 0.326009, 0.0303488, 0.379368, 0.0229494, 0.0134011, 0.318115, 0.346288, 0.017666, 0.333818, 0.326769, 0.0141554, 0.341832, 0.0291055, 0.0153984, 0.446665, 0.399975, 0.024566, 0.316297, 0.0159851, 0.010876, 0.428384, 0.444201, 0.0214323, 0.376211, 0.00628675, 0.0105036, 0.44565, 0.0195615, 0.012549, 0.445242, 0.366523, 0.0225733, 0.324775, 0.0192127, 0.0134437, 0.318991, 0.381386, 0.0149852, 0.00882163, 0.447015]
for i in a:
    if i > 0.1:
        s +='1'
    else:
        s +='0'
print s
python test.py 
 11011010011011010010011010010010011010011011010011010011010010011010011001
pip install bitstring`
python
import bitstring

bitstring.BitArray(bin='11011010011011010010011010010010011010011011010011010011010010011010011001').tobytes()

Image

Automated RF/SDR Signal Analysis [Reverse Engineering]

Payload: \x36\x9b\x49\xa4\x9a\x6d\x34\xd2\x69\x9

thanks for tresacton‘s help (GitHub)

0x06 Hacking The world with watch

德州仪器生产的EZ430 Chronos手表由于采用了MSP430芯片,该芯片支持发射1GHz以下频率的无线信号,覆盖市面上各种常见的无线遥控频率(315MHz、433MHz、868MHz、915MHz):

 6.1 开发环境搭建

到 TI德州仪器官网下载:(需注册账号) CCS studio (Code Composer Studio ):http://processors.wiki.ti.com/index.php/Download_CCS

FET-Pro430-Lite程序:http://www.elprotronic.com/download.html

SmartRF Studio : http://www.ti.com.cn/tool/cn/smartrftm-studio

以及GitHub上面的 miChronos项目代码:http://github.com/jackokring/miChronos

百度网盘:https://pan.baidu.com/s/1hsse2Ni

windows 7如果不是Service Pack 1 则需下载安装Windows 7 和 Windows Server 2008 R2 Service Pack 1 (KB976932)补丁,否则无法安装 Code Composer Studio 下载地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=5842

0x07 refer

Michael Ossmann: Software Defined Radio with HackRF, Lesson 11: Replay YouTuBe https://www.youtube.com/watch?v=CyYteFiIozM

TI eZ430-Chronos Hacking quickstart http://timgray.blogspot.jp/2012/12/ti-ez430-chronos-hacking-quickstart.html

The hackable watch: a wearable MSP430 MCU http://www.itopen.it/the-hackable-watch-a-wearable-msp430-mcu/

You can ring my bell! Adventures in sub-GHz RF land… http://adamsblog.aperturelabs.com/2013/03/you-can-ring-my-bell-adventures-in-sub.html?m=1

TI EZ430 Chronos watch, quick guide / tutorial to hacking the firmware https://www.youtube.com/watch?v=20dVNyJ8fYw&feature=youtu.be

Author:雪碧0xroot Blog

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

作者:雪碧0xroot@漏洞盒子安全团队

0x00

在文章第一部分 http://www.freebuf.com/articles/wireless/110773.html 搭建了嗅探GSM流量的环境,在第二部中,我们来讨论如何捕获发短信以及通话过程中的流量,从捕获到的数据中解密提取出短信文字以及通话语音。

IMG_0857.JPG

0x01

1.1 获取三星漏洞利用代码:

这是三星的Modem interface exposed via USB通过该exp可对设备输入AT指令进行调试。

AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。

wget https://raw.githubusercontent.com/ud2/advisories/master/android/samsung/nocve-2016-0004/usbswitcher.c

1.2 源码编译libusb:

wget http://jaist.dl.sourceforge.net/project/libusb/libusb-0.1%20%28LEGACY%29/0.1.12/libusb-0.1.12.tar.gz
tar zxvf libusb-0.1.12.tar.gz
cd libusb-0.1.12/
./configure
make
make install
sudo ldconfig

1.3 gcc编译PoC:

gcc usbswitcher.c -o switcher -lusb

 

0x02 获取Kc、TMSI参数

插入三星设备,可以在/dev/ttyACM*中找到它:

三星.png

2.1 switcher

busybox microcom /dev/ttyACM0

busy.png

./switcher

swift.png

这一步比较尴尬,需要反复执行才能成功进入交互界面,如果实在不行可以尝试下一种方式,使用minicom:

2.2 minicom

minicom -D /dev/ttyACM0

2.3 Kc

GSM系统中的加密也只是指无线路径上的加密,防止BTS和MS之间交换客户信息和客户参数时不被非法个人或团体所得或监听,在鉴权程序中,当客户侧计算SRES三参数组的提供时,同时用另一算法(A8算法)也计算出密钥Kc。根据MSC/VLR发送出的加密命令,BTS侧和MS侧均开始使用Kc。在MS侧,由Kc、TDAM帧号和加密命令M一起经A5算法,对客户信息数据流进行加密,在无线路径上传送。在BTS侧,把从无线信道上收到加密信息数据流、TDMA帧号和Kc,再经过A5算法解密后,传送BSC和MSC。可以通过AT指令获取KC值:

AT+CRSM=176.28448,0,0,9

演示视频中,Crazy Danish Hacker获得了该值为:5973237C3E96980303 丢弃最后两位,即:5973237C3E969803

2.4 TMSI 鉴权后分配临时识别码

临时识别码的设置是为了防止非法个人或团体通过监听无线路径上的信令交换而窃得移动客户真实的客户识别码(IMSI)或跟踪移动客户的位置。客户临时识别码(TMSI)是由MSC/VLR分配,并不断地进行更换,更换周期由网路运营者设置。更换的频次越快,起到的保密性越好,但对客户的SIM卡寿命有影响。TMSI的值也能通过AT指令来获取:

AT+CRSM=176.28542,0,0,11

演示视频中,Crazy Danish Hacker获得了该值为:9062FF7632F8665610FF00,取其前4bytes,也就是前8字节,即:9062FF76。

0x03 信号捕获

3.1 确定当前手机接入基站

手机在连入GSM基站时,我们可通过一些方式确定自己手机连入的是哪个基站、ARFCN是多少,安卓手机在2G状态时,可在键盘拨号界面输入:

*#*#4636#*#*  

上面这个是安卓通用的如果你的手机没反应,还可以尝试

Samsung (Android) : *#*#197328640#*#* or *#0011#
iPhone (all) : *3001#12345#*拨号
HTC (Android) : *#*#7262626#*#*

进去以后能找到基站的MCC、MNC、ARFCN这些参数。

MCC 移动国家码
MNC Mobile Network Code,移动网络码,共2位,中国联通GSM系统使用01,中国移动GSM系统使用02

ARFCN 绝对无线频道编号(Absolute Radio Frequency Channel Number – ARFCN ),是在GSM无线系统中,用来鉴别特殊射频通道的编号方案。
手机开机后,即搜索广播控制信道(BCCH)的载频。因为系统随时都向在小区中的各用户发送出用广播控制信息。手机收集到最强的(BCCH)对应的载频频率后,读取频率校正信道(FCCH),使手机(MS)的频率与之同步。所以每一个用户的手机在不同的位置(即不同的小区)的载频是固定的,它是由GSM网络运营商组网时确定,而不是由用户的GSM手机来决定。

手机读取同步信道(SCH)的信息后找出基地站(BTS)的认别码,并同步到超高帧TDMA的帧号上。手机在处理呼叫前要读取系统的信息。如:领近小区的情况、现在所处小区的使用频率及小区是否可以使用移动系统的国家号码和网络号码等等,这些信息都以BCCH上得到。

手机在请求接入信道(RACH)上发出接入请求的信息,向系统传送SIM卡帐号等信息。系统在鉴权合格后,通过允许接入信道(AGCH)使GSM手机接入信道上并分配给GSM手机一个独立专用控制信道(SDCCH)。手机在SDCCH上完成登记。在慢速随路控制信道(SACCH)上发出控制指令。然后手机返回空闲状态,并监听BCCH和CCCH公共控制信道上的信息。

在Part 1 中937.4MHz这个基站的ARFCN为12,本部分假设我们的手机接入的是这个基站,接下来,我们通过SDR捕获这个基站的下行数据包:

3.2 确定当前基站的下行频率:

打开http://www.cellmapper.net/arfcn.php

结果:

Clipboard Image.png

Network Type    GSM (TDMA)
E/U/ARFCN    12
Band Name    GSM-900
Uplink Frequency 上行频率 手机到基站
(phone to base station)    892.4 MHz
Downlink Frequency  下行频率 基站到手机
(base station to phone)    937.4 MHz
Band Number    900

获取Downlink Frequency 下行频率 (base station to phone) :937.4 MHz 写作:937400000

3.3捕获下行数据包:

grgsm_capture.py -h
linux; GNU C++ version 4.8.4; Boost_105400; UHD_003.010.git-197-g053111dc

Usage: grgsm_capture.py [options]

RTL-SDR capturing app of gr-gsm.

Options:
  -h, --help            show this help message and exit //打印帮助信息
  -f FC, --fc=FC        Set frequency [default=none] //设定捕获数据的中心频率
  -a ARFCN, --arfcn=ARFCN  //设定ARFCN
                        Set ARFCN instead of frequency. In some cases you may
                        have to provide the GSM band also
  -g GAIN, --gain=GAIN  Set gain [default=30] //设定gain
  -s SAMP_RATE, --samp-rate=SAMP_RATE  //设定采样率 默认2M
                        Set samp_rate [default=2M]
  -p PPM, --ppm=PPM     Set ppm [default=0]
  -b BURST_FILE, --burst-file=BURST_FILE
                        File where the captured bursts are saved
  -c CFILE, --cfile=CFILE
                        File where the captured data are saved
  --band=BAND           Specify the GSM band for the frequency. Available
                        bands are: P-GSM, DCS1800, PCS1900, E-GSM, R-GSM,
                        GSM450, GSM480, GSM850. If no band is specified, it
                        will be determined automatically, defaulting to 0.
  --args=ARGS           Set device arguments [default=]
  -v, --verbose         If set, the captured bursts are printed to stdout
  -T REC_LENGTH, --rec-length=REC_LENGTH
                        Set length of recording in seconds [default=none]
grgsm_capture.py -g 40 -a 12 -s 1000000 -c sms.cfile -T 20
-g 指定gain参数 40
-a ARFCN 12
-s 设定采样率1MHz
-c 将捕获到的数据存入sms.cfile
-T 设定时间

命令执行后可以用另外一部手机给接入ARFCN 12基站的手机打电话、发短信,这样我们就实现了捕获通话过程中的语音、短信数据包。

Clipboard Image.png

ls -lah sms.cfile

Clipboard Image.png

捕获到数据包后再次查看KC、TMSI,确定这两个数值没有改变。

0x04 信号解码

捕获完数据以后再次获取KC TMSI值:

minicom -D /dev/ttyACM0

KC:

AT+CRSM=176.28448,0,0,9

5973237C3E96980303 丢弃最后两位,即:5973237C3E969803

TMSI:

AT+CRSM=176.28542,0,0,11

9062FF7632F8665610FF00 取其前4bytes,也就是前8字节,即:9062FF76

ls -lah voice.cfile

一起来看看解码脚本的用法:

decode usage

grgsm_decode -h
Usage: grgsm_decode: [options]

Options:
  -h, --help            show this help message and exit //打印帮助信息
  -m CHAN_MODE, --mode=CHAN_MODE
                        Channel mode. Valid options are 'BCCH' (Non-combined
                        C0), 'BCCH_SDCCH4'(Combined C0), 'SDCCH8' (Stand-alone
                        control channel) and 'TCHF' (Traffic Channel, Full
                        rate)
  -t TIMESLOT, --timeslot=TIMESLOT
                        Timeslot to decode [default=0]
  -u SUBSLOT, --subslot=SUBSLOT
                        Subslot to decode. Use in combination with channel
                        type BCCH_SDCCH4 and SDCCH8
  -b BURST_FILE, --burst-file=BURST_FILE
                        Input file (bursts)
  -c CFILE, --cfile=CFILE
                        Input file (cfile)
  -v, --verbose         If set, the decoded messages (with frame number and
                        count) are printed to stdout
  -p, --print-bursts    If set, the raw bursts (with frame number and count)
                        are printed to stdout

  Cfile Options:
    Options for decoding cfile input.

    -f FC, --fc=FC      Frequency of cfile capture  //指定需解码文件的中心频率 (从哪个频率捕获就填多少)
    -a ARFCN, --arfcn=ARFCN  //指定ARFCN 同上,从哪个ARFCN捕获就填多少
                        Set ARFCN instead of frequency. In some cases you may
                        have to provide the GSM band also
    --band=BAND         Specify the GSM band for the frequency. Available
                        bands are: P-GSM, DCS1800, PCS1900, E-GSM, R-GSM,
                        GSM450, GSM480, GSM850.If no band is specified, it
                        will be determined automatically, defaulting to 0.
    -s SAMP_RATE, --samp-rate=SAMP_RATE   //指定采样率,默认1M
                        Sample rate of cfile capture [default=1M]
    --ppm=PPM           Set frequency offset correction [default=0]

  Decryption Options:
    Options for setting the A5 decryption parameters.

    -e A5, --a5=A5      A5 version [default=1]. A5 versions 1 - 3 supported //设定A5加密算法版本
    -k KC, --kc=KC      A5 session key Kc. Valid formats are //设定KC值
                        '0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF' and
                        '1234567890ABCDEF'

  TCH Options:
    Options for setting Traffic channel decoding parameters.

    -d SPEECH_CODEC, --speech-codec=SPEECH_CODEC
                        TCH-F speech codec [default=FR]. Valid options are FR,
                        EFR, AMR12.2, AMR10.2, AMR7.95, AMR7.4, AMR6.7,
                        AMR5.9, AMR5.15, AMR4.75
    -o SPEECH_OUTPUT_FILE, --output-tch=SPEECH_OUTPUT_FILE //将解密后的文件另存为
                        TCH/F speech output file [default=/tmp/speech.au.gsm].

在接下来的解码案例中,我们以gr-gsm开源项目的测试数据为例:https://github.com/ptrkrysik/test_data

测试数据已知参数如下:

ARFCN:725 
采样率:$((100000000/174))
Kc:0x1E,0xF0,0x0B,0xAB,0x3B,0xAC,0x70,0x02
wget https://github.com/ptrkrysik/test_data/raw/master/vf_call6_a725_d174_g5_Kc1EF00BAB3BAC7002.cfile
mv vf_call6_a725_d174_g5_Kc1EF00BAB3BAC7002.cfile test.cfile
sudo wireshark -i lo
grgsm_decode -a 725 -s $((100000000/174)) -m BCCH -t 0 -c test.cfile

Clipboard Image.png

在Immediate Assignment中,我们可以确定广播控制信道(HCCH)为: SDCCH、Timeslot:1

Clipboard Image.png

使用我们刚刚知道的参数再次解密:

grgsm_decode -a 725 -s $((100000000/174)) -c test.cfile -m SDCCH8 -t 1

Clipboard Image.png

在这一步我们解码出的数据包数量比前几步少了很多,我们可以通过Ciphering Mode Command这一栏的数据包确定A5类型:

A5算法在1989年由法国人开发,用于GSM系统的序列密码算法。
A5它用于对从电话到基站连接的加密,先后开发了三个版本记作A5/1、A5/2、A5/3,如果没有特别说明,通常所说的A5是指A5/1。

Clipboard Image.png

确定了加密算法,再次执行解密脚本:

grgsm_decode -a 725 -s $((100000000/174)) -c test.cfile -m SDCCH8 -t 1 -e 1 -k 0x1E,0xF0,0x0B,0xAB,0x3B,0xAC,0x70,0x02

在cc Setup这一项,可以看到来电号码:

Clipboard Image.png

Assignment Command一栏信息如下:

Clipboard Image.png

在上面这幅图中我们确定了 CHAN_MODE 为TCHF,Timeslot为5,有了这些信息,我们便能从捕获到的文件中提取出通话语音,其效果类似于通话监听:

grgsm_decode -a 725 -s $((100000000/174)) -c test.cfile -m TCHF -t 5 -e 1 -k 0x1E,0xF0,0x0B,0xAB,0x3B,0xAC,0x70,0x02 -d FR -o /tmp/test.au.gsm

Clipboard Image.png

进入/tmp缓存目录中,已经可以发现一个音频文件了:

Clipboard Image.png

安装VLC播放器:

sudo apt-get install vlc-nox
vlc  /tmp/test.au.gsm

Clipboard Image.png

耳机了传来歪果仁酸爽“test”的声音。解码出音频的文件:https://pan.baidu.com/s/1i5jn1A1

0x05 refer

Voice Decryption 语音解密
SMS Decryption 短信解密

SMS text messeges and voice calls sniffing

*本文作者:雪碧0xroot@漏洞盒子安全团队,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

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

http://www.freebuf.com/articles/wireless/110773.html

作者:雪碧0xroot@漏洞盒子安全团队

GSM Hacking

0x00 前言

近期,发现Crazy Danish Hacker在YouTuBe发布了一个挺不错的教程视频:使用SDR嗅探监听GSM网络的通信流量(GSM Sniffing Teaser – Software Defined Radio Series)。该教程从电视棒的安装到扫描、嗅探工具的使用、GSM流量包的捕获解密都有详细说明演示:

http://v.qq.com/iframe/player.html?vid=u0317s0mw3n

作为搬运工,在这里将分两三部分参考&总结一下该教程的主要内容,输出一篇中文教程,希望能够给对这方面感兴趣的童鞋带来一定帮助。

0x01 环境搭建

OS:GNU Radio LiveCD

HardWare:电视棒(rtl-sdr)、HackRF、Bladerf 均可

1.安装编译依赖包

sudo apt-get install git cmake libboost-all-dev libcppunit-dev swig doxygen liblog4cpp5-dev python-scipy

2.编译gr-gsm

git clone https://github.com/ptrkrysik/gr-gsm.git
cd gr-gsm
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig 

3.编译kalibrate

kalibrate-hackrf (HackRF用户)

git clone https://github.com/scateu/kalibrate-hackrf.git
cd kalibrate-hackrf
./bootstrap
./configure
make
sudo make install

kalibrate-rtl(电视棒用户)

git clone https://github.com/steve-m/kalibrate-rtl.git
cd kalibrate-hackrf
./bootstrap
./configure
make
sudo make install

0x01 扫描基站

1.1 kal

kal 
error: must enter channel or frequency
kalibrate v0.4.1-hackrf, Copyright (c) 2010, Joshua Lackey
modified for use with hackrf devices, Copyright (c) 2014, scateu@gmail.com
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)
    -a    rf amplifier enable
    -g    vga (bb) gain in dB, 0-40dB, 8dB step
    -l    lna (if) gain in dB, 0-62dB, 2dB step
    -d    rtl-sdr device index
    -e    initial frequency error in ppm
    -E    manual frequency offset in hz
    -v    verbose
    -D    enable debug messages
    -h    help

kal -s GSM900 -g 40 -l 40 //扫描GSM900频段

Clipboard Image.png

1.2 gr-gsm (HackRF、BladeRF)

在编译完成的gr-gsm项目中,App目录里有用于扫描、解码gsm流量的脚本:

Clipboard Image.png

Clipboard Image.png

1.3 Bladerf 配合 SDR-sharp

通过上述方式,我们获取到了基站的一些参数信息,如:中心频率、信道、ARFCN值、LAC、MCC、MNC值等。这为我们接下来的工作提供了便利。那么windows用户有其它方式来确定基站的中心频率么?
Windows用户可通过SDR-sharp的瀑布图来确认基站的工作频率,由于HackRF性能问题,查看GSM频率时瀑布图效果不明显,所以我这里用BladeRF来实现这需求。由于SDR-sharp默认不支持BladeRF硬件,首先我们需为其安装硬件驱动,详情可参考:https://github.com/jmichelp/sdrsharp-bladerf

复制Release目录中的SDRSharp.BladeRF.dll到SDR主目录;

复制GitHub项目中的LibBladeRF目录下所有dll文件到SDR主目录;
在FrontEnds.xml文件增加

<add key="BladeRF" value="SDRSharp.BladeRF.BladeRFIO,SDRSharp.BladeRF" />

Clipboard Image.png

Clipboard Image.png

在SDR-sharp中加载BladeRF的FPGA固件:

Clipboard Image.png

最终效果:

CnSzzAMUAAAttef.jpg

0x02 Sniffer 嗅探

通过扫描我们获取到了基站的中心频率、信道、ARFCN值、LAC、MCC、MNC值等参数信息:

Clipboard Image.png

上图表明在937.4MHz、940.4MHz这两个中心频率发现GSM基站信号。

ubuntu@ubuntu:~/gr-gsm/apps$ ls
CMakeLists.txt  grgsm_livemon      grgsm_livemon.py  helpers
grgsm_decode    grgsm_livemon.grc  grgsm_scanner     README

ubuntu@ubuntu:~/gr-gsm/apps$ grgsm_livemon -h
linux; GNU C++ version 4.8.4; Boost_105400; UHD_003.010.git-197-g053111dc

Usage: grgsm_livemon: [options]

Options:
  -h, --help            show this help message and exit
  --args=ARGS           Set Device Arguments [default=]
  -f FC, --fc=FC        Set fc [default=939.4M]
  -g GAIN, --gain=GAIN  Set gain [default=30]
  -p PPM, --ppm=PPM     Set ppm [default=0]
  -s SAMP_RATE, --samp-rate=SAMP_RATE
                        Set samp_rate [default=2M]
  -o SHIFTOFF, --shiftoff=SHIFTOFF
                        Set shiftoff [default=400k]
  --osr=OSR             Set OSR [default=4]

我们来嗅探一下937.4MHz的基站:

grgsm_livemon -f 937.4

Clipboard Image.png

右侧终端显示成功捕获到了基站通信数据包。

0x03 Decode解密

3.1 安装WireShark

apt-get install wireshark

3.2 嗅探&解密

ubuntu@ubuntu:~/gr-gsm/apps$ ls
CMakeLists.txt  grgsm_livemon      grgsm_livemon.py  helpers
grgsm_decode    grgsm_livemon.grc  grgsm_scanner     README

ubuntu@ubuntu:~/gr-gsm/apps$ gnuradio-companion grgsm_livemon.grc

Clipboard Image.png

执行GRC流图:

Clipboard Image.png

sudo wireshark -k -Y 'gsmtap && !icmp' -i lo

捕获到的数据包如下:

Clipboard Image.png

解密方式可先参考GitHub:

Usage: Decoding How To · ptrkrysik/gr-gsm Wiki
Decoding-hopping-channels
在文章第二部分内容中,我们将使用鉴权后分配临时识别码 TMSI、KC对捕获到的GSM通信数据包进行解密。

第三部分,我们将根据gr-lte开源项目来讨论分析4G LTE基站的安全问题。(the gr-lte project is an Open Source Software Package which aims to provide a GNU Radio LTE Receiver to receive, synchronize and decode LTE signals.)

0x04 refer

https://github.com/ptrkrysik/gr-gsm/wiki/Usage

https://z4ziggy.wordpress.com/2015/05/17/sniffing-gsm-traffic-with-hackrf/

GSM Sniffing: Kalibrate-RTL Usage – Software Defined Radio Series #5

GSM Sniffing: Installing GR-GSM – Software Defined Radio Series #7

GSM Sniffing: Using GR-GSM – Software Defined Radio Series #8

*本文作者:雪碧0xroot@漏洞盒子安全团队,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

GnuRadio + BladeRF + OpenLTE 搭建4G LTE 基站 Part 1

本文作者:雪碧0xroot@漏洞盒子安全实验室

Clipboard Image.png

0x00 前言

在移动互联网大规模发展的背景下,智能手机的普及和各种互联网应用的流行,致使对无线网络的需求呈几何级增长,导致移动运营商之间的竞争愈发激烈。但由于资费下调等各种因素影响,运营商从用户获得的收益在慢慢减少,同时用于减少韵味和无线网络的升级投资不断增加,但收入却增长缓慢。为保证长期盈利增长,运营商必须节流。

SDR Software Define Radio 软件定义无线电可将基站信号处理功能尽量通过软件来实现,使用通用硬件平台可快速地实现信号的调制解调,编码运算,SDR为现有通信系统建设提供了全新思路,给技术研究开发降低了成本、并提供了更快的实现方式。(引用 基于开源SDR实现LTE系统对比 )

SDR是否能打破传统运营商在通信行业的垄断呢?

另外值得关注的是:国外安全大会上从数年前2G GSM攻击议题到近期的LTE 4G安全议题,基站通信安全一直备受安全爱好者关注。

Clipboard Image.png

在这一背景下,国外OpenLTE开源项目成为热门话题:

Clipboard Image.png

OpenLTE是在Linux系统下的使用GNURadio软件开发包实现的3GPP通信协议的一个开源项目,主要实现一个简单的4G基站的功能。在文章后面的内容中,我们将分享如何搭建、使用OpenLTE.

至于使用BladeRF搭建GSM基站的内容可阅读:

GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站
GSM Hacking:使用BladeRF、树莓派、YatesBTS搭建便携式GSM基站
Demo:

IMG_0764.JPG

FreeBuf百科

2G网络是指第二代无线蜂窝电话通讯协议,是以无线通讯数字化为代表,能够进行窄带数据通讯。常见2G无线通讯协议有GSM频分多址(GPRS和EDGE和CDMA ) 传输速度很慢。

3G网络是第三代无线蜂窝电话通讯协议,主要是在2G的基础上发展了高带宽的数据通信,并提高了语音通话安全性。3G一般的数据通信带宽都在500Kb/s以上。目前3G常用的有3种标准:WCDMA、CDMA2000、TD-SCDMA,传速速度相对较快,可以很好的满足手机上网等需求。

4G网络是指第四代无线蜂窝电话通讯协议,该技术包括TD-LTE和FDD-LTE两种制式,是集3G与WLAN于一体并能够传输高质量视频图像以及图像传输质量与高清晰度电视不相上下的技术产品。 4G系统能够以100Mbps的速度下载,比拨号上网快2000倍,上传的速度也能达到20Mbps,并能够满足几乎所有用户对于无线服务的要求。

那么除去安全方面,2G、3G、4G之间有什么不同呢?对于用户而言,2G、3G、4G网络最大的区别在于传速速度不同。

给你一个秒懂的例子: 2G秒看苍老师.txt 3G秒看苍老师.jpg 4G秒看苍老师.avi:

Clipboard Image.png

0x01 环境搭建

OS:Ubuntu

GnuRadio 3.7

BladeRF

HackRF

1.1 BladeRF

1.1.1 驱动

mkdir bladeRF
wget -c https://github.com/Nuand/bladeRF/archive/master.zip
unzip master.zip
cd bladeRF-master
cd host
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DINSTALL_UDEV_RULES=ON ../
make -j4
make install > install.log
ldconfig

1.1.2 BladeRF 固件

wget -c http://www.nuand.com/fx3/bladeRF_fw_v1.8.0.img
bladeRF-cli -f bladeRF_fw_v1.8.0.img -v verbose

1.2 GNURadio

mkdir gnuradio
cd gnurdio
wget http://www.sbrac.org/files/build-gnuradio
chmod a+x build-gnuradio
./build-gnuradio –v
sudo apt-get install libpolarssl-dev 

0x02 另辟蹊径

以上步骤所需依赖包较多,想偷懒的童鞋可以使用GnuRadio发布的Ubuntu LiveCD,里边已经搭建好了gnuradio、HackRF、BladeRF、USRP、gqrx、rtl-sdr等一些列SDR所需的依赖环境。使用这种方式可以避免安装系统环境中遇到的绝大多数坑。
下载链接:http://gnuradio.org/redmine/projects/gnuradio/wiki/GNURadioLiveDVD

gnuradio.png

2.1 编译OpenLTE (文件列表

wget http://ufpr.dl.sourceforge.net/project/openlte/openlte_v00-19-04.tgz  //(目前最新版)
tar zxvf openlte_v00-19-04.tgz
cd openlte_v00-19-04/
mkdir build
cd build
sudo cmake ../
sudo make
sudo make install

2make.png

0x03 搜索附近基站

插入SDR设备,这里我使用了BladeRF(测试了一下HackRF也能使用,但由于HackRF采用USB 2.0传输数据,其效率会比BladeRF低很多,有条件的同学可以使用USRP):

3bladerf.png

osmocom_fft --samp-rate 80000000

2D0363E3-BA32-4D0F-958F-3D31E1FCDC79.png

Clipboard Image.png

OpenLTE编译完成之后会在build目录下生成可执行文件:

Clipboard Image.png

cd LTE_fdd_dl_scan
./LTE_fdd_dl_scan

新建一终端,通过Telnet进入OpenLTE工作终端交互界面:

telnet 127.0.0.1 20000

4telnet.png

Clipboard Image.png

telnet端执行start开始扫描:

Clipboard Image.png

LTE_fdd_dl_scan将扫描dl_earfcn_list列表中的FCN值:从25到575

ARFCN:绝对无线频道编号 (Absolute Radio Frequency Channel Number – ARFCN ),是在GSM无线系统中,用来鉴别特殊射频通道的编号方案,相信嗅探过GSM短信的童鞋对它一点不陌生。4G LTE中ARFCN被称作EARFCN。

3.1 搜索电信FDD LTE网络:(telnet端)

write band 1
help
start

Clipboard Image.png

Clipboard Image.png

3.2 搜索联通FDD LTE网络:(telnet端)

stop
write band 3
start

openlte.png

3.3 关闭搜索:(telnet端)

shutdown

3.4 移动、联通、电信TD-LTE频段与FDD-LTE部分频段:

bands

0x04 结语

文章第一部分主要分享如何搭建OpenLTE并扫描附近基站信号,在后续的内容中将根据OpenLTE官方WIKI分享OpenLTE其他功能的使用。如LTE_fdd_enodeb的发卡,添加用户功能:

Clipboard Image.png

0x05 参考&感谢

Mobile Security: Practical attacks using cheap equipment

Black Hat:LTE and IMSI catcher

①:https://www.blackhat.com/docs/eu-15/materials/eu-15-Borgaonkar-LTE-And-IMSI-Catcher-Myths-wp.pdf

②:https://www.blackhat.com/docs/eu-15/materials/eu-15-Borgaonkar-LTE-And-IMSI-Catcher-Myths.pdf

IMSI Catchers and Mobile Security

黄琳_HITB Paper:LTE REDIRECTION Forcing T argeted LTE Cellphone into Unsafe Network
OpenLTE:sourceforge.net

OpenLTE WIKI

OpenLTE开源代码结构解析(一)

OpenLTE开源代码结构解析(二)

基于开源SDR实现LTE系统对比

* 作者:雪碧0xroot@漏洞盒子安全实验室,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

http://www.freebuf.com/articles/wireless/108417.html

永不消逝的电波(四):从无线电角度揭秘定位劫持

GPS-LOGIC.png

0x00 前言

2015年的时候,360UnicornTeam 在Defcon黑客大会以及阿里移动安全 在BlackHat大会上均带来了GPS劫持的演讲,给大家揭开了GPS Hacking的神秘面纱在这篇文章中我们将通过无线的角度来看定位,以及学习如何进行定位的劫持和伪造。

我们生活中几种常见的定位方式:基于手机基站、基于GPS系统、基于WIFI;

0x01 基站定位

1.1 手机基站 & 蜂窝网络基站:

基站即公用移动通信基站是无线电台站的一种形式,是指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间进行信息传递的无线电收发信电台。

基站定位一般应用于手机用户,手机基站定位服务又叫做移动位置服务(LBS——Location Based Service),它是通过电信移动运营商的网络(如GSM网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务,例如目前中国移动动感地带提供的动感位置查询服务等。

1.1  COO(Cell of Origin)定位:COO定位是一种单基站定位,即根据设备当前连接的蜂窝基站的位置来确定设备的位置。

1.2  AOA定位:AOA(Angle of Arrival到达角度)定位是一种两基站定位方法,基于信号的入射角度进行定位。

1.3  TOA/TDOA定位:TOA(Time of Arrival到达时间)、TDOA(Time Difference of Arrival到达时间差)都是基于电波传播时间的定位方法。也都是三基站定位方法,二者的定位都需要同时有三个位置已知的基站合作才能进行。

基站定位的大致原理为:移动电话测量不同基站的下行导频信号,得到不同基站下行导频的TOA(Time of Arrival,到达时刻)或TDOA(Time Difference of Arrival,到达时间差),根据该测量结果并结合基站的坐标,一般采用三角公式估计算法,就能够计算出移动电话的位置。实际的位置估计算法需要考虑多基站(3个或3个以上)定位的情况,因此算法要复杂很多。一般而言,移动台测量的基站数目越多,测量精度越高,定位性能改善越明显。

CGI:Cell Global Identity小区全球标识,是全球范围内无线网络小区的唯一标识,不同运营商的不同网络可以有不同的CGI编号规则。

eNodeBID:基站的编号,在LTE网内是唯一的,因此eNodeBID + 小区ID = Cell ID在LTE网内也是唯一的。

这样的Cell ID加上网络号(PLMN ID)就可以保证全球唯一,就是LTE小区的CGI。LTE的小区全球标识叫做ECGI eUTRAN Cell Blobal Identity。

GSM网络中的设备都可以以编程方式获取到当前基站的Cell ID。

其实也可以通过一些手机指令获取:

苹果手机: *3001#12345#*拨号
安卓手机: *#*#4636#*#*

我们可以查询到信号强度、小区信息:TAC、频点号、PCI、EnodeBID、小区码CGI。

通过获取ECGI数据后,通过“基站云平台”查询,(需要下载EXE桌面软件)输入几个参数,可以查询到基站的经纬度及地理位置信息:

基站定位的精度只能达到基站距离的级别,一般为500米左右,密集城区为120米左右。

1.2 基站定位运用

户户通直播星:户户通需要插入SIM来搜索手机基站以进行定位:

111.PNG222.png

企业对车辆的管理:出于GPS成本高以及地下室等无信号的原因,有些物流企业采用了手机GSM定位技术方案。这种方案的成本是GPS的1/3。但受移动基站网络资源的限制,在连续定位方面的成本较高。

0x02 WIFI定位

2.1WIFI定位原理

WIFI定位通过侦测附近周围所有WIFI的SSID、MAC地址来实现定位。

WiFi定位技术除具有良好的精度和可扩展性外,其独特优势在于WiFi芯片已经在各类用户智能终端(智能手机、平板电脑等)中得到广泛普及,并且随“无线城市”的发展,国内各大城市电信运营商、公司与家庭均已安装了大量的WiFi热点与网关,通过利用现有的这些WiFi设施,能够显著降低建设与长期运营成本,快速实现项目预定目标。这些都是开展WiFi技术为主的无缝定位技术研究和推动LBS应用的最佳基础条件与保证。

2.2 基于WIFI定位的伪造

Kali下已经自带aircrack和mdk3,我们可以配合免驱无线网卡(RTL8182b)来使用这些工具。

百度公司WIFI(baidu.txt) MAC地址 SSID信道信息如下:

ec:26:ca:38:25:8a metrust 
74:1e:93:63:74:b9 STB_IKPG 
4c:09:b4:2e:bc:e5 VIDEOPHONE_zwRu 
c8:3a:35:3f:2e:e0 www.wboll.com 
a8:15:4d:14:a3:88 DYJL 
c4:14:3c:f3:5c:4d Baidu_Mobile 
4c:09:b4:2e:83:f4 CU_mcSC 
5a:c7:16:fa:e2:94 STB_Wa7a 
c4:14:3c:fb:58:3c Baidu_Friend 
c4:14:3c:e4:a1:dc Baidu_Friend 
c4:14:3c:f3:5c:4f Baidu 
00:1f:a4:ed:e6:d0 CU_pngE 
00:1f:a4:ed:e6:d1 VIDEOPHONE_pngE 
00:1f:a4:ed:e6:d2 STB_pngE 
00:1f:a4:ed:e6:d3 BACKUP 
ec:17:2f:25:ca:4e bjjfsd-VIP 
6c:e8:73:fe:01:ee dhjc 
f4:ec:38:58:79:b2 ZJDZGC off  
ec:26:ca:b9:a5:d2 zkyc168 
14:e6:e4:7e:ad:56 lichunfeng 
14:75:90:0f:52:10 bjjfsd01 
c4:14:3c:fb:58:ac Baidu_Friend 
c4:14:3c:f3:5c:4e Baidu_WiFi 
42:0f:0e:20:9c:62 xz-test 
32:0f:0e:20:9c:62 XZ-gaoceng 
10:0f:0e:20:9c:62 XZ-office 
12:0f:0e:20:9c:62 XZ-caiwu 
c4:14:3c:fb:58:3f Baidu 
c4:14:3c:e4:a1:df Baidu 
c4:14:3c:fb:58:3d Baidu_Mobile 
c4:14:3c:e4:a1:de Baidu_WiFi 
c4:14:3c:e4:a1:dd Baidu_Mobile 
c4:14:3c:fb:58:3e Baidu_WiFi 
c4:14:3c:fb:58:ad Baidu_Mobile 
c4:14:3c:f3:5c:4c Baidu_Friend 
c4:14:3c:fb:58:af Baidu 
ec:26:ca:6c:09:17 TP_820_5G 
14:75:90:2a:b8:3a zjyd 
72:c7:16:fc:86:07 STB_E2B9 
72:c7:16:fc:86:06 VIDEOPHONE_E2B9 
72:c7:16:fc:86:04 BACKUP 
b8:c7:16:fc:86:05 CU_E2B9 
c0:a0:bb:49:c8:04 martin 
00:25:86:a7:b5:82 etsee 
80:89:17:b2:dc:d2 OT 
14:75:90:31:34:ee hzcs 
b8:62:1f:51:84:54 ciscosb1 
14:75:90:35:43:0b sdtp 
d4:ee:07:10:69:b4 wechat.wboll.com 
c8:3a:35:21:f2:b0 Tenda_21F2B0 
8e:be:be:2a:7f:f7 Xiaomi_Hello_PZS7 
8c:be:be:2a:7f:f5 YF.007 
bc:d1:77:2c:96:1a Acoustic 
14:75:90:2a:b8:3b zjyd 
78:a1:06:54:2a:1e 007

奇虎360公司 (360.txt)WIFI MAC SSID 信息:

00:24:23:d8:7f:6b MopperMonk-EyE 
64:09:80:60:5e:67 360wifi-zzl 
74:25:8a:85:79:b7 360-yingshi-wifi
74:25:8a:85:79:b4 360-activity 
74:25:8a:85:79:b1 360-guest 
74:25:8a:85:79:b0 360-Lobby AP

mdk3的使用语法:

mdk3 mon0 b
        -n         #自定义ESSID
        -f     #读取ESSID列表文件
        -v     #自定义ESSID和BSSID对应列表文件
        -d               #自定义为Ad-Hoc模式
        -w               #自定义为wep模式
        -g               # 54Mbit模式
        -t               # WPA TKIP encryption
        -a               # WPA AES encryption
        -m               #读取数据库的mac地址
        -c         #自定义信道
        -s          #发包速率

伪造AP

找个没有WIFI信号的地方(防止其他有效WIFI对伪造进行干扰),开启无线网卡的monitor模式:

sudo airmon-ng check kill
sudo airmon-ng start wlan0

开始伪造WIFI热点

sudo mdk3 wlan0-mon b -v baidu.txt  //伪造百度公司附近的WIFI环境 
sudo mdk3 wlan0-mon b -v 360.txt  //伪造360公司附近的WIFI环境

由于办公地点有大量WIFI热点,WIFI定位伪造便不在此演示,有兴趣的童鞋可以找个没有热点信号的地方自行测试 🙂

0x03 GPS卫星定位

3.1GPS系统概述

GPS最初是美国国防部为军方提供的一个星基定位、测速和时间系统。GPS系统使用地心坐标,提供基于1984年的世界大地坐标系(WGS-84)的航空器的位置。其导航数据,如到航路点的距离、方位和地速,是根据航空器当前位置(经度和纬度)和下一航路点的位置计算出来的。

美国国防部在1993年12月8日宣布GPS具有初始运行能力。美国联邦航空局(FAA)在1994年2月17日发布了航行通告(NOTAM),宣布GPS可用于某些民用IFR飞行。

3.2 GPS系统描述

GPS是星基无线电导航、定位和授时系统。该系统在全球范围内向具有合适装备的用户(不限数量)提供高精度的位置和速度信息以及精确的时间。

GPS提供两级服务:标准定位服务(SPS)及精密定位服务(PPS)。

SPS为所有用户提供95%概率的100米或以下的水平定位精度,和99.99%概率的300米精度。PPS比SPS更精确,但民用航空用户一般只能使用SPS。

GPS运行的概念是利用空间一组作为精确参考点的卫星进行测距和三角计算。GPS接收机利用无线电信号的传播时间测量到卫星的距离。每颗卫星发送一个特定的编码,被称作粗捕获(CA)码,它包括有关卫星位置、GPS系统时间和卫星传输数据的健康和准确性等信息。已知信号传输的速度大约300000公里/秒和确切的传播时间,则信号的传输距离能够根据到达的时间推算出来。

GPS接收机将每颗卫星的CA码与接收机中数据库内所包含的同样的编码进行匹配。通过在匹配过程中移动卫星的编码和移动与其内部时钟的比较,接收机能计算出信号从卫星到接收机的传播距离,从这种计算距离的方法得出的距离被称为伪距,因为它不是直接计算距离,而是通过时间来计算。伪距测量会包含几种误差,如,电离层、对流层延迟和多路径误差。

除了知道到卫星的距离外,接收机还需知道卫星在空间的确切位置,也就是“星历”。每个卫星发送其确切轨道位置的信息。GPS接收机利用该信息精确确定卫星的位置。

利用计算的伪距和卫星提供的位置信息,GPS接收机通过三角方法计算出它的位置。GPS接收机需要至少四颗卫星进行三维定位(经度、纬度和高度)和时间解算。GPS接收机通过利用航空器已知的经、纬度和接收机数据库内已有的数据进行比较来计算出导航数值,例如,到达一个航路点的距离和航向或者确定地速。

24颗卫星组成GPS星座的设计是为了地球上任何地方的用户在视界内都可以看到至少5颗卫星。接收机使用遮蔽角(在水平面之上能够使用卫星的最低角度)以上的最少4颗卫星的数据。

GPS接收机通过接收机自主完好性监视(RAIM)来核实GPS信号的完好性(可用性),以确定是否有卫星提供了错误的信息。除了导航所需的卫星外,在视界内必需有另外1颗卫星以使接收机执行RAIM功能;这样实施RAIM功能要求在视界内至少有5颗卫星,或者4颗卫星加上气压高度表(气压辅助)来检测完好性的异常。气压辅助是利用非卫星输入源增强GPS完好性的方法。为确保气压辅助可用,当前的高度表设定必须按照使用手册的要求输入到接收机中。

不同接收机的RAIM信息会有一些差异。一般来说有两种类型的指示。一种是指示没有足够数量的卫星提供RAIM,另一种是指示RAIM检测出超过当前飞行阶段限制的潜在误差。没有RAIM能力,飞行员就不能确定GPS定位的准确性。

一些卫星接收机能够隔离不良的卫星信号并在导航解算时剔除该信号,该过程称为“失效探测和排除(FDE)”。为隔离不良的卫星信号和继续提供有效的导航信号,FDE要求在视界内有6颗卫星或者在有气压辅助时有5颗卫星。

3.3 GPS频率

GPS工作频率有两个:1575.4Mhz(民用)和1227.6Mhz(军用),信号采用圆极化方式传输。

Image

3.4 GPS系统组成 & 通信流程

GPS包含三大组成部分:空间部分、地面控制部分以及机载用户部分。

Image

空间部分 (空中卫星群)是由24颗导航卫星组成。这些卫星距离地面约20000公里,分布在6个轨道平面上,每个平面上有4颗卫星。这样任何时候在视界内都有5颗卫星。GPS卫星发送伪随机码调制的时间信号,并经机载接收机处理后得到卫星的位置和状态数据。通过得到卫星的精确位置,并与卫星上的原子钟时间精确同步,机载接收机可以精确地测量出每颗卫星信号到达接收机的时间,从而确定航空器位置。

地面控制部分 (地面支持网)由监测站和控制站组成,用于保证卫星位置和时钟的精确性。地面控制系统由5个监测站,3个注入站和1个主控站组成。

机载用户部分(用户设备)包括天线和机载卫星接收处理器(带有数据库),为飞行员提供航空器位置、速度和精确的时间信息。

要进行水平导航(2维定位)在视界内至少要有3颗卫星。要进行水平和垂直导航(3维定位)则在视界内至少要有4颗卫星。

500-si_hiw_gps_fa_la2534dc_0.jpg

地面支持网:监控卫星并根据测算结果向卫星提供时间改正参数、卫星星历等资料。 

空中卫星群:卫星接收来自地面站的信息,并向用户发射以C/A码和P码调制的、带有时间信息和卫星星历等导航参数的1575.42MHz和1227.60MHz两种载波频率的信号。 

用户设备:接收卫星发射的时间信号和卫星轨道信息,求得卫星位置,利用时间信号和伪码相关测量卫星到测者的伪距,并由计算机解算用户位置、速度等参数。

0x04 GPS定位伪造&劫持

4.1 环境搭建

玩SDR有下面三款硬件平台:HackRF、BladeRF、USRP

SDR

HackRF是这三款平台中因其价格低(相对于其他两款),备受黑客所青睐。三款SDR平台的对比可看《三款最优秀平价SDR对比》这篇文章。三款对比表格如下:

Image

BTW由于HackRF采用USB2.0接口,传输大文件的时候容易造成数据传输瓶颈问题(接下来生成的GPS数据将占用五到六个G的空间),并且其在发射大于400MHz的无线信号时会出现精确度误差,刚开始我用它来做下面的实验的时候手机出现了只能接收到“卫星”信号,而获取不到经纬度、时间等信息。
所以接下来的实验我们要通过BladeRF来发射GPS的无线信号,在这之前我们需要让系统识别出BladeRF硬件:

git clone https://github.com/Nuand/bladeRF.git
cd bladeRF/host/
mkdir build
cd build
cmake -DINSTALL_UDEV_RULES=ON ../
make
sudo make install
ldconfig  //刷新系统动态库缓存

上面的构建过程会将 bladeRF 安装到 /usr/local 下,而其中的库文件目录 /usr/local/lib{,64} 不在 ldconfig 的默认搜索路径里。所以我们可以将它们添加到 /etc/ld.so.conf 里。

sudo vim /etc/ld.so.conf

添加之后文件内容如下:

/usr/local/lib
/usr/local/lib64
include ld.so.conf.d/*.conf

使用bladeRF-cli -p检测设备是否已经连接识别:

-p.png

cd /usr/share/
mkdir Nuand
cd Nuand
mkdir bladeRF
cd bladeRF
wget http://www.0xroot.cn/hostedx40.rbf  //下载FPGA镜像

BladeRF在购买之后,板子里边是有固件镜像(firmware)的,但是没有FPGA镜像,每次插入USB的时候都需要执行bladeRF-cli -l /usr/share/Nuand/bladeRF/hostedx40.rbf手动载入FPGA镜像

root@0xroot:~# bladeRF-cli -l /usr/share/Nuand/bladeRF/hostedx40.rbf 
Loading fpga...
Done.
root@0xroot:~# 

此时,另外三个LED被点亮:

IMG_20160217_215918.jpg

4.2 安装GPS-SDR-SIM

git clone https://github.com/osqzss/gps-sdr-sim.git
cd gps-sdr-sim
make

gps-sdr-sim项目的brdc3540.14n星历文件默认生成2014年12月20零点的时间,也就是北京时间2014您12月20日早上八点。如需生成其它年月的时间需要到NASA储存星历数据的FTP服务器下载,FTP地址为:

ftp://cddis.gsfc.nasa.gov/pub/gps/data/daily/

4.3 GPS数据生成

这里我们使用西藏的经纬度坐标生成一个包含星历、时间和GPS坐标的.bin数据,一个地区的经纬度可以在在先地图经纬度查询网站找到(http://www.gpsspg.com/maps.htm) 西藏坐标:

西藏坐标.png

谷歌地图:29.6471695826,91.1175026412 ,我们保留小数点后六位即可:29.647169,91.117502

./gps-sdr-sim -e brdc3540.14n -l 29.647169,91.117502,100 -b 16

信号伪造

bladeRF-cli -s bladerf.script

演示视频:

demo 1:社交软件定位

http://v.qq.com/iframe/player.html?vid=k0184icrd0j&tiny=0&auto=0

demo 2:无人机No-Fly-Zone Bypass

https://v.qq.com/iframe/player.html?vid=j0350qryem2&tiny=0&auto=0

4.4 GPS伪造利用场景:

伪造无人机禁飞区域的GPS信息,如美国白宫,欺骗无人机迫使其不能飞行或伪造无人机返航点的位置使其返航,

例子1:毒贩利用漏洞入侵无人机实现非法偷渡

文章当中有一段:

其中之一的模块就是保护无人机免遭GPS欺骗。GPS欺很骗是一个很实用的网络攻击手段,主要实现方式是向GPS接收装置发送虚假GPS数据。非军用的无人机GPS信号没有加密,每个无人机上面都有一个GPS接收装置,用于接收来自轨道卫星的数据同时沿边境航行,监视非法越境者。

而毒贩们很快就明白了这一点,并利用GPS欺骗技术向无人机发送错误坐标。使得无人机接收的数据来源看起来像是真实可靠的。最后无人机接收了错误的坐标,修正航向,并离开它的正常巡视区域,去巡视它认为正确的坐标位置,其实最后巡视的就是毒贩们发送的错误坐标,无人机接收到错误的坐标后,需要反复进行修正回到其正常的巡逻区域,这一过程导致无人机燃料耗尽而不得不返回基地。毒贩趁此机会安全越过边境,之后他们才会切断他们的干扰装置。在2012年美国德克萨斯大学安全研究人员就演示了如何通过GPS欺骗劫持无人机。

例子2:汽车导航

这里由于条件限制,没有汽车录制视频,便向杨卿同学要了他们在Defcon黑客大会上的比亚迪汽车导航欺骗视频:

http://v.qq.com/iframe/player.html?vid=h0184ws1fa4&tiny=0&auto=0

0x04 参考资料 & 感谢:

4.1 360UnicornTeam:杨卿&黄琳与Defcon的演讲:GPS-Spoofing

https://media.defcon.org/DEF%20CON%2023/DEF%20CON%2023%20presentations/DEFCON-23-Lin-Huang-Qing-Yang-GPS-Spoofing.pdf

https://www.youtube.com/watch?v=jwJKMti_aw0

4.2 Improving the GPS Data Processing Algorithm for PreciseStatic Relative Positioning
http://www.sage.unsw.edu.au/about/school_pubs/pdfrep/s69.pdf

4.3 GLOBAL POSITIONING SYSTEMSTANDARD POSITIONING SERVICESIGNAL SPECIFICATION
http://www.gps.gov/technical/ps/1995-SPS-signal-specification.pdf

4.4 阿里移动安全: Wang Kang & Shuhua Chen & Aimin Pan on BlackHat
https://www.blackhat.com/docs/eu-15/materials/eu-15-Kang-Is-Your-Timespace-Safe-Time-And-Position-Spoofing-Opensourcely-wp.pdf

https://www.blackhat.com/docs/eu-15/materials/eu-15-Kang-Is-Your-Timespace-Safe-Time-And-Position-Spoofing-Opensourcely.pdf

4.5 乌云Drops:lxj616
http://drops.wooyun.org/tips/10580

4.6 乌云Drops:Kevin2600

http://drops.wooyun.org/tips/11155

4.7 百度百科:全球定位系统(GPS)

http://wenku.baidu.com/view/fde4fefbc8d376eeaeaa31d2.html?re=view

感谢:360独角兽团队:杨卿-ir0nSmith@360UnicornTeam , 黄琳@360UnicornTeamMickey@360攻防实验室 , spaceshuttle@Apple

博客文章:

spriteking.com/archives/1513
http://www.freebuf.com/news/topnews/87353.html

*本文原创作者:雪碧@0xroot.cn,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)