GSM/SMS实验网络基站短信嗅探实验

中文:GSM/SMS实验网络基站短信嗅探实验

⚠警告⚠声明

仅供学习交流!严禁将此技术用于非法途径!违者后果自负!PS:为了避免相关情况发生,本文不进行教程支援及问题解答

这技术很早以前就有了,记得当时还可以用OpenBTS进行短信发送。。。

写出来第一个目的是为了看看还能不能嗅探到短信,其次是重温下 GSM 网络的相关知识,温故而知新嘛,不喜勿喷,如有错误还请指出。

### 初探GSM

GSM网络即全球移动通信系统,GSM是一个蜂窝网络,每个网格都有自己的覆盖范围

img

GSM基本系统构成:OSS(操作维护子系统)、BSS(基站子系统)、NSS(网络子系统),每个子系统还都划分了不同的服务,如:ISDN、PDN、PSTN、DPPS等等,一个个的写太麻烦了,这里简单阐述下就好,想要深入了解的可以找我要PDF文档自己研究。

相关资料补充:

  • SIM(用户识别模块)

这是一张符号 ISO 标准的卡,就是你手机里边的那张,它包含所有与用户有关的和某些无线接口的信息,使用移动台时都需要插入SIM 卡,当紧急呼叫时可以不使用SIM操作ME(移动台)

  • BTS(基站收发信台)和BSC(基站控制器)

BTS属于BSS(基站子系统)的无线部分,由BSC(基站控制器)进行控制,一般服务于某个小区的收发信设备,完成BSC与无线信道之间的交换。

  • MSC(移动业务交换中心)

MSC是一个控制多个BSC的节点。它是GSM系统中的核心设备,具有多种功能。

  • HLR(归属用户位置寄存器)和VLR(用户位置寄存器)

VLR服务于控制区域内移动用户的,存储着进入控制区内域内已登记的移动用户相关信息,为已接入的用户提供呼叫必要条件

HLR是GSM的中央数据库,存储着该HLR控制的所有移动用户的相关数据,一个HLR可以控制若干个移动交换区所有移动用户重要的静态数据都存储在 HLR 中,包括移动用户识别号码、访问能力、用户类别和补充业务等等数据

  • EIR(移动设备识别寄存器)

EIR存储着移动设备的IMEI识别码,通过检查白色清单、黑色清单或灰色清单这三种表格,在表格中分别列出了准许使用的、出现故障需监视的、失窃不准使用的IMEI识别码

  • AuC(鉴权中心)

AUC主要负责安全措施,对无线上的语音数据和信号信息进行保密

有关GSM安全算法(A5…)可以自行谷歌,本文不再赘述

img

那么说回来,不法分子是如何知道我们的短信信息呢?这个很简单,我们的手机都处在一个大的基站辐射范围内(3G/4G)这就好比基站是谷仓,而手机是一粒粒的米粒,米粒通过电饭锅煮熟,基站负责(收发)每一粒米粒喷发出来的香味(信号)而不法分子使用降频工具手机会降级到2G进行通信,这个时候GSM嗅探工具就可以嗅探到我们的SMS信息了。

img

### Pre

硬件:

  1. Moto C118 [label](某鱼十几)[/label]
  2. USB转TTL 2.5mm线 [label](一瓶饮料的价格)[/label]
  3. CP2102模块 [label](一瓶饮料的价格)[/label]

[gallery link=”none” size=”medium” ids=”3159,3160,3158”]

软件:

  1. osmocom-bb(https://osmocom.org/projects/baseband)

有关 osmocom-bb 项目,这是一个开源GSM协议的项目,目的是要实现手机端从物理层layer1到layer3的三层实现。

  1. OpenBTS-5
  2. GNU

img

### Build

img

首先更新下系统的环境(笔者这里的系统是Kali),自行换源更新,接下来安装对应依赖,以防后面编译GNU时出现错误。

1
2
3
4
5
6
7
apt-get install 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
aptitude install libtool shtool automake autoconf git-core pkg-config make gcc

安装完了后,找个目录新建一个文件夹,接着下载编译时要用到的 shell 脚本

1
http://bb.osmocom.org/trac/raw-attachment/wiki/GnuArmToolchain/gnu-arm-build.3.sh

官网貌似502了,我把shell脚本放在了我的 Github 上,需要的可以自行 Fork。

https://github.com/icecliffs/backup/tree/main/gnu-environment-shell

新建几个文件夹 install src build

进到 src 里边把下面的文件下载到里边

1
2
3
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

接下来回到上级目录给gnu-arm-build.3.sh 赋予执行权限,然后 ./gnu-arm-build.3.sh

1
2
3
4
5
6
7
8
9
$ cd ..
$ ./gnu-arm-build.3.sh
I will build an arm-none-eabi cross-compiler:

Prefix: <YOURPATH>/install
Sources: <YOURPATH>/src
Build files: <YOURPATH>/build

Press ^C now if you do NOT want to do this.

输入 Enter 键,开始编译环境,时间有点久跳出下面的代码即表示搭建成功!

1
2
Build complete! Add <YOURPATH>/bin to your PATH to make arm-none-eabi-gcc and friends
accessible directly.

这时候我们还需添加环境变量,打开 ~/.bashrc 在末尾添加以下内容

1
export PATH=$PATH:<YOURPATH>/install/bin

以上是构建 GNU 的过程,接下来开始搭建 osmocom-bb 环境,克隆仓库到本地目录

1
git clone git://git.osmocom.org/osmocom-bb.git

搭建前我们还需要安装一个 osmocom-bb 的 libosmocore 库,先把相关依赖安装下

1
2
3
4
5
6
7
8
9
10
11
apt-get install build-essential libtool shtool autoconf automake git-core pkg-config make g
克隆仓库到本地目录
git clone git://git.osmocom.org/libosmocore.git
开始编译 libosmocore
cd libosmocore
autoreconf -i
./configure
make
make install
cd ..
ldconfig

接着切换到 osmocom-bb/src 目录里面,make 即可。

上文的安装步骤非常精简,因为我已经安装过了,所以大多数步骤都是凭记忆写的,想看详细版的可以自行谷歌

如果编译时遇到下图,多半是权限不足或未安装相关函数库导致的,可根据报错内容自行安装软件包

img

也有可能是丢失下面的包,安装即可(仅作参考

img

### Attack

将手机接上 2.5mm 杜邦线,然后刷入固件,注意接线顺序

->TXD;**->RXD;黑->GND**

img

进到 osmocom-bb/src/host/ 里输入以下命令,手机需关机,命令执行后按下电源键开始刷入固件。

1
2
./osmocon -p /dev/ttyUSB0 -m [固件类型] \
../../target/firmware/board/compal_e88/[二进制文件]

img

刷完后手机屏幕会出现 Layer23 (我把屏幕拆了,不然还可以让你们看 lol)

img

[label]按手机上的按钮终端会显示相关信息[/label]

接下来扫描附近的基站

1
./cell_log -O

img

PS:我们这2G服务基本上都没了,到后面学习 OpenBTS 发信技术后我会在原有基础上重新写一篇,如果有2G信号的话会显示信号(PWR)像这样

1
2
3
4
5
6
7
8
9
10
11
<000e> cell_log.c:248 Cell: ARFCN=58 PWR=-23dB MCC=460 MNC=01 (China, China Unicom)
Cell ID: 460_1_378E_2DE6
<000e> cell_log.c:248 Cell: ARFCN=59 PWR=-62dB MCC=460 MNC=01 (China, China Unicom)
Cell ID: 460_0_372C_C7D1
<000e> cell_log.c:248 Cell: ARFCN=77 PWR=-34dB MCC=460 MNC=00 (China, China Mobile)
Cell ID: 460_0_3926_0759
<000e> cell_log.c:248 Cell: ARFCN=85 PWR=-24dB MCC=460 MNC=00 (China, China Mobile)
Cell ID: 460_1_378E_2F78
<000e> cell_log.c:248 Cell: ARFCN=68 PWR=-32dB MCC=460 MNC=01 (China, China Unicom)
Cell ID: 460_1_378E_2DE4
<000e> cell_log.c:248 Cell: ARFCN=69 PWR=-12dB MCC=460 MNC=01 (China, China Unicom)

其中PWR为信号强度,值越小说明信号越好,ARFCN为基站信道号

1
./ccch_scan -i 127.0.0.1 -a [ARFCN]

img

执行后如果一直滚代码说明能正常嗅探到基站数据

有关 GSM 频段,可参考下面的图表

频段 名称 信道号 上行(MHz) 下行(MHz) 其他
GSM 850 GSM 850 128 - 251 824,0 - 849,0 869,0 - 894,0 美国, 南美洲国家 和 亚洲部分国家。
GSM 900 P-GSM 900 1-124 890,0 - 915,0 935,0 - 960,0 GSM最先实现的频段,也是使用最广的频段。
E-GSM 900 975 - 1023 880,0 - 890,0 925,0 - 935,0 900M扩展频段
R-GSM 900 n/a 876,0 - 880,0 921,0 - 925,0 铁路GSM(GSM-R),为铁路调度通信系统开发的特殊版本。
GSM1800 GSM 1800 512 - 885 1710,0 - 1785,0 1805,0 - 1880,0 适用于对信道容量需求大的市场,应用范围仅次于900M。
GSM1900 GSM 1900 512 - 810 1850,0 - 1910,0 1930,0 - 1990,0 主要用于美洲国家,由于有频率重叠,与1800M系统不兼容。

来源于 http://www.blogjava.net/baicker/archive/2013/11/13/406293.html

接下来打开 Wireshark 嗅探即可,选择协议 gsm_sms

img

img

上文已经说了,我们这三网2G基本上都停止服务了,所以得跑到有2G网络的地方

### Extension

为了更方便的识别数据,减少上面的步骤,GSMSniffer项目对2G网络短信嗅探抓取的一个Demo实现自动载入系统/扫描基站与抓取短信并存入数据库

基本架构

  • Tengine
  • PHP 7.3
  • MySQL

上面三个服务都省略搭建步骤,把项目克隆下来后直接修改文件运行即可

img

img

### Defence

手机开4G/5G Only,没开的话可以搜索手机工程代码进入到里边自己打开,换服务,移动2G还存在一点点,联通基本上都没了,电信的不知道。

也希望我这是最后一篇关于GSM短信嗅探的,毕竟新的技术过的久了就会发现许多漏洞,几天前 GeekPwn 参赛选手就破解了某信LTE微基站(Orz)

Reference

作者

IceCliffs

发布于

2020-11-04

更新于

2023-10-28

许可协议

评论