Loading...   前阵子大家都在玩的GSM嗅探,终于自己也闲下来有时间搞搞了。买了几个C118,数据线,ttl线就搞起来了。毕竟前面有老司机搞过,还弄成了开源项目,所以其实比较简单。逐渐的现在大家都在像3G、4G转移,GSM 嗅探的用武之地越来越少,也只能依靠一些信号干扰器强制降级才能勉强有一些利用场景。这篇paper是我玩OsmocomBB的记录,为后来人作为参考吧。 <!--more--> ## 0X00 背景 <hr />   OsmocomBB是国外一个开源项目,是GSM协议栈(Protocols stack)的开源实现,全称是Open source mobile communication Baseband.目的是要实现手机端从物理层(layer1)到layer3的三层实现。但是目前来看,真正的物理层(physical layer)并没有真正的开源实现,暂时也没看到实施计划。只有物理层控制。因为真正的物理层是运行在baseband processor的DSP core上,涉及到许多信号处理算法的实现,而且还要牵扯很多硬件RF的东西。 <!--more--> 官方介绍是:   OsmocomBB is an Free Software / Open Source GSM Baseband software implementation. It intends to completely replace the need for a proprietary GSM baseband software, such as drivers for the GSM analog and digital baseband (integrated and external) peripherals the GSM phone-side protocol stack, from layer 1 up to layer 3.   In short: By using OsmocomBB on a compatible phone, you are able to make and receive phone calls, send and receive SMS, etc. based on Free Software only.   这项技术至少在2010年,技术已经成熟,2011年就有开源实现了。得益于OsmocomBB 的开源项目,使得我们用一台笔记本和很简单的硬件就能完成GSM sms嗅探。 ![OsmocomBB-1.jpg][1] ## 0X01 原理分析 <hr /> **关于加密**   GSM加密采用A5算法。A5算法1989年由法国人开发,是一种序列密码,它是欧洲GSM标准中规定的加密算法,专用于数字蜂窝移动电话的加密,用于对从电话到基站连接的加密。A5的特点是效率高,适合硬件上高效实现。 A5发展至今,有A5/1、A5/2、A5/3、A5/4、A5/5、A5/6、A5/7等7个版本,目前GSM终端一般都支持A5/1和A5/3,A5/4以上基本不涉及。值得注意的是,A5/2是被『故意弱化强度』的版本,专用于『出口』给『友邦』,2006年后被强制叫停,终端不允许支持A5/2。 **工作流程** > 手机开机时的位置更新流程: > 1.MS(手机)向系统请求分配信令信道(SDCCH); > 2.MSC收到手机发来的IMSI可及消息; > 3.MSC将IMSI可及信息再发送给VLR,VLR将IMSI不可及标记更新为IMSI可及; > 4.VLR反馈MSC可及信息信号; > 5.MSC再将反馈信号发给手机; > 6.MS倾向信号强的BTS,使用哪种算法由基站决定,这也导致了可以用伪基站进行攻击。 **关于GSM网络相关知识** ![OsmocomBB-2.jpg][2] **关于GSM相关信息,请见附录。 ## 0X02 所需硬件 <hr /> **支持的手机** > o MotorolaC123/C121/C118 (E88) -- our primary target > o MotorolaC140/C139 (E86) > o MotorolaC155 (E99) -- our secondary target > o MotorolaV171 (E68/E69) > o SonyEricssonJ100i > o Pirelli DP-L10 > o Neo 1973 (GTA01) > o OpenMoko - Neo Freerunner (GTA02) > o SciphoneDreamG2 (MT6235 based) *参考:http://bb.osmocom.org/trac/wiki/Hardware/Phones 我们选择**Moto C118**,因为官方支持的最好、硬件成本低,¥35/台(手机+电池+充电器) ![OsmocomBB-3.jpg][3] **USB转串口模块**   推荐带TX/RX LED的 FT232模块,当然其他模块也可以,比如CP2102、CP2303等模块,不过使用前要先调好比特率。FT232模块,我买的是¥35的,第一个嘛,为了求稳定。后面做多个手机联合嗅探的时候可以尝试买一些便宜的。 ![OsmocomBB-4.jpg][4] **C118数据线**   这个数据线就是2.5mm耳机头 转 杜邦线,注意一头是2.5mm耳机孔的,另一边是杜邦线连接串口模块。手边有2.5mm耳机插头的可以自己做一个。当然网上现在也有现成的了,不过成本稍微高一点。¥15左右一条 ![OsmocomBB-5.jpg][5] *如何自己DIY Moto C118数据链接线,可以看后面附录 **MiniUSB链接线**   这个线应该都有,以前的mp3、手机啥的都是这个线,马云家卖¥10,如果你用了Pl2303那类的USB转换板,就可以不用这根线了,那个板子上自带U口。 ![OsmocomBB-6.jpg][6] ## 0X03 编译OsmocomBB <hr /> **基础环境** **MacOs 10.10.5** + **VMworkstation** + **Ubuntu 12.04 x64**   我的实验用的是这样的环境,网上很多教程都说X64的虚拟机不能正常编译,但是我确实是成功了。也可以尝试使用别的环境试试,毕竟我的实验环境仅供参考。   网络环境要求能够正常访问github,实验环境周围存在GSM信号。 **C118手机有足够的电量,支持实验。 **准备所需目录以及文件** 具体项目目录结构和所需文件如下图: > ~source/arm/build/ >      |->http://bb.osmocom.org/trac/raw-attachment/wiki/GnuArmToolchain/gnu-arm-build.2.sh >      |->install/ >      |->src/ >        |->http://ftp.gnu.org/gnu/gcc/gcc-4.5.2/gcc-4.5.2.tar.bz2 >        |->http://ftp.gnu.org/gnu/binutils/binutils-2.21.1a.tar.bz2 >        |->ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz **准备好之后的目录如下图**: ![OsmocomBB-7.jpg][7]   我是把整个source目录放在了用户文件夹下,仅做参考。只需要按照上面文字格式的结构图准备就好,图片中未出现部分后面会写如何出现… **编译环境准备** 1.编译前安装所需的依赖库文件: sudo 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 ![OsmocomBB-8.jpg][8] 2.在arm根目录执行build.sh文件进行build操作: chmod +x gnu-arm-build.2.sh ./ gnu-arm-build.2.sh ![OsmocomBB-9.jpg][9] 3.完成后arm/install/目录结构如图所示: ![OsmocomBB-10.jpg][10] 4.因为编译需要,把arm/install/bin路径加入到环境变量中,我这里是加入到用户的环境变量中。使用pwd命令获取绝对路径: ![OsmocomBB-11.jpg][11] 5.修改~/.bashrc文件,最后一行加入: export PATH=$PATH:/home/wooyaa/source/arm/install/bin 6.执行source命令让配置文件即时生效: source ~/.bashrc 7.在终端中输入arm然后按tab键,如果出现如下图所示就说明编译环境搞定了: ![OsmocomBB-12.jpg][12] *建立Arm代码的编译环境可以参考:[http://bb.osmocom.org/trac/wiki/GnuArmToolchain][13] **编译OsmocomBB** 把osmocom项目gitclone到source目录下: git clone git://git.osmocom.org/osmocom-bb.git git clone git://git.osmocom.org/libosmocore.git 1.在libosmocore/目录中编译osmocom核心库文件 cd /home/wooyaa/source/libosmocore/ autoreconf -i ./configure make sudo make install 2.编译OsmocomBB: cd /home/wooyaa/source/osmocom-bb/src/ git checkout --track origin/luca/gsmmap //选择分支 make //交叉编译 *1.如果没什么问题,软件环境和固件就都编译好了。 *2.Ununtu 12.04自带FT232R驱动,所以直接连接就能使用,不需要再装驱动。 **常见错误** 1.常见报错有可能是autoconf、libtool、libpcsclite-dev等文件的缺失,只要装好就行了。 2.具体版本请使用apt-cache search xxx在你自己电脑中的apt-get的list中查找。 ## 0X04 使用方法 <hr /> **连接硬件** 1.在终端中输入lsusb,会显示当前usb连接的信息: ![OsmocomBB-13.jpg][14] 2.如果驱动正常,插上MiniUSB线后就能看到usb-serial: ![OsmocomBB-14.jpg][15] 网上的教程大多都误认为是将firmware刷入手机,实际上这里只是把固件加载到手机RAW中执行。 **加载Firmware到手机raw中** cd /home/wooyaa/source/osmocom-bb/src/host/osmocon/ ./osmocon -m c123 -p /dev/ttyUSB0 ../../target/firmware/board/compal_e88/ layer1.compalram.bin > 1>其中 –m c123跟c123xor的区别就是是否检测数据总和 > 2>上面命令需要在关机下执行,然后短按开机键 3.终端上会显示”starting up”字样,如下: ![OsmocomBB-15.jpg][16] 4.手机屏幕显示Layer 1 osmocom-bb 字样就表示成功了: ![OsmocomBB-16.jpg][17] **扫描基站** cd /home/wooyaa/source/osmocom-bb/src/host/layer23/src/misc/ sudo ./cell_log –O   其中cell_log的参数是字母O,具体作用是只检查ARFCN是否可用,不进行其它操作,可以用./cell_log --help参看说明。终端中会输出日志信息,其中会包含能够收到的基站的相关信息,格式类似这样: > cell_log.c:248 Cell: **ARFCN=40** PWR=-61dB MCC=460 MNC=00 (China,China Mobile) ARFCN后面的编号可以代表基站信道号,还包含了运营商信息。 ![OsmocomBB-17.jpg][18] **关于嗅探** 因为我们买的便宜货,每个手机只能嗅探一个信道,具体一些的,可以参考下面的图(我们现在只能抓Downlink的数据包): ![OsmocomBB-18.jpg][19]   因为想要Sniffer Uplink的包,要修改硬件,C118主板上的RX filters要换掉,换成我们需要的HHM1625&&HHM1623C1滤波器组件,才能抓Uplink的数据包。   有关信道号ARFCN的问题,可以参考下面的图: ![OsmocomBB-19.jpg][20] **开始嗅探** 1.选择想要监听的信道号并开始嗅探广播数据 在目录`/home/wooyaa/source/osmocom-bb/src/host/layer23/src/misc/`下执行嗅探: ./ccch_scan -i 127.0.0.1 -a THE_ATFCN_ID 其中THE_ATFCN_ID就是扫描到的日志中参数ARFCN的值。 苹果手机可以执行:*3001#12345#* 进入工程模式后,选择GSM Cell Environment->GSM Cell Info->GSM Serving Cell,就可以看到目前手机连接的基站ARFCN值了,应该在第二步中,也能看到这个ID存在。 **其他手机的命令:** Samsung (Android): *#0011# ![OsmocomBB-20.jpg][21] 2.使用wireshark抓取监听数据 因为osmocomBB执行之后默认会在本地开启4729端口,这时候的GSM协议已经被封装上了TCP-IP,可以在本地用wireshark抓到,所以我们使用wireshark去监听4729的端口 sudo wireshark -k -i lo -f ’port 4729’ ![OsmocomBB-21.jpg][22] 3.在wireshark中过滤gsm_sms协议数据,过滤之后得到的数据里面就包含短信的明文信息 ![OsmocomBB-22.jpg][23] 4.过滤后得到的明文短信信息 ![OsmocomBB-23.jpg][24]   SMS text就是短信的明文内容,其他git分支还支持把监听到的数据保存到cap包,然后通过脚本来过滤包内容,达到嗅探短信明文的目的。后面会有计划的去尝试。 **配置OsmocomBB**   layer23是用/home/wooyaa/source/osmocom-bb/src/host/layer23/src/mobile下的mobile程序实现,所以通过执行mobile文件可以进行自定义,配置一些关于osmocom-bb的信息。 cd /home/wooyaa/source/osmocom-bb/src/host/layer23/src/mobile sudo ./mobile -i 127.0.0.1 执行mobile程序之后,会在本地开启4247端口,使用telnet连接,然后配置执行,随时使用?来查看help信息。 ![OsmocomBB-24.jpg][25] **关于嗅探内容** 下行短信里怎么没有短信接受者的号码,这里有篇关于SMS传输的基本原理说明: > [http://robinlea.com/pub/Amphol/Secur...arch_Labs.html][26]   简单来讲,短信接受者的号码、IMEI等数据,只有在"Location Update"时才会在网络中出现,并且是以加密形式传输的。当接收短信时,基站根据之前位置更新时注册的信息,判断接收者的位置。所以,想要拿到接受者的号码,需要破解A5/1算法并还原出"Location Update"时的原文。 Airprobe项目里有介绍如何破解A5/1算法找到Kc: > [https://srlabs.de/airprobe-how-to/][27]   只不过需要价格昂贵的USRP2...   另外还看到个RTL-SDR的文章(就是以前传说中可以跟踪飞机的电视棒),也支持Airprobe: > [http://www.rtl-sdr.com/rtl-sdr-tutor...and-wireshark/][28] **Tips** > 1.记住所有操作在sudo -s root权限下操作。 > 2.开机键不是长按,而是短按,否则就进入原系统了。 > 3.现在2G短信越来越少了,多等等会有的。理论上话音一样能够被监听及解码,只是涉及技术更为复杂。 > 4.CP210x的接线,RX和TX有可能需要对调。运行cp210x-program需要先安装ibusb-dev,如果输出是“No devices found”或“Unable to send request, 3709 result=-110”,则有问题。 *可以参考:CP210x Tutorial ## 0X05 后期计划 <hr /> **捕获上行包**   因为想要嗅探Uplink的包,要修改硬件,C118主板上的RX filters要换掉,换成我们需要的HHM1625&&HHM1623C1滤波器组件,才能抓Uplink的数据包。要使手机能够成为『passive uplink sniffer』,必须动到电烙铁,替换掉RX filters。 替换前: ![OsmocomBB-25.jpg][29] 摘掉后: ![OsmocomBB-26.jpg][30] 替换后: ![OsmocomBB-27.jpg][31] 使用OsmocomBB RSSI monitor查看信号强弱: ./osmocom-bb/src/host/osmocon/osmocon -p /dev/ttyUSB0 -m c123xor -c ./osmocom-bb/src/target/firmware/board/compal_e88/rssi.highram.bin ./osmocom-bb/src/target/firmware/board/compal_e88/chainload.compalram.bin 由于RSSI太大,不便于像OsmocomBB那样直接加载,所以要先用-C参数加载一个小的chainloader程序去加载我们真正的RSSI Payload程序。 ![OsmocomBB-28.jpg][32] *参考:http://bb.osmocom.org/trac/wiki/rssi.bin **短信内容实时web页面展示** 制作成绵羊墙,在线实时显示嗅探到的短信 **多设备联合嗅探** 尝试多设备一起嗅探,增强嗅探范围和效果。( TK神牛在位的时候好像之前研究过~ ## 0X07 附录 <hr /> **DIY Moto C118数据链接线** ![OsmocomBB-29.jpg][33] ![OsmocomBB-30.jpg][34] 图中例子耳机为moto T191的耳机,右图中标注的颜色为耳机线拆开后里面线芯的颜色。耳机线拆开后里面会包含3根带有外皮的铜线。 **GSM网络相关知识** 推荐看看 [GSM network and services 2G1723 2006][35] ![OsmocomBB-31.jpg][36]   从协议图中得知,移动设备(MS)和基站(BTS)间使用Um接口,最底层就是刷入手机的**layer1物理传输层**,之上分别是**layer2数据链路层和layer3网络层**。 ![OsmocomBB-32.jpg][37]   位于图中layer2的**LAPDm**,是一种保证数据传输不会出错的协议。一个LAPDm帧共有23个字节(184个比特),提供分片管理控制等功能。 layer3的协议则可以分为RR/MM/CM三种,这里只列出嗅探相关的功能: RR(Radio Resource Management):channel, cell(控制等信息,可以忽略) MM(Mobility Management):Location updating(如果需要接收方号码,需要关注这个动作) CM(Connection Management):Call Control(语音通话时的控制信息,可以知道何时开始捕获TCH),SMS(这里的重点) ![OsmocomBB-33.jpg][38]   参考GSM的文档 TS 04.06 得知 LAPDm 的Address field字段中,定义了 3.3.3 Service access point identifier (SAPI)。SAPI=3就是我们要的Short message service。 使用tcpdump配合show_gsmtap_sms.py脚本在console列出短信明文。 tcpdump -l -ilo -nXs0 udp and port 4729 | python2 -u show_gsmtap_sms.py **一些名词解释** > MS:Mobile Station,移动终端; > IMSI:International Mobile Subscriber Identity,国际移动用户标识号,是TD系统分给用户的唯一标识号,它存储在SIM卡、HLR/VLR中,最多由15个数字组成; > MCC:Mobile Country Code,是移动用户的国家号,中国是460; > MNC:Mobile Network Code ,是移动用户的所属PLMN网号,中国移动为00、02,中国联通为01; > MSIN:Mobile Subscriber Identification Number,是移动用户标识; > NMSI:National Mobile Subscriber Identification,是在某一国家内MS唯一的识别码; > BTS:Base Transceiver Station,基站收发器; > BSC:Base Station Controller,基站控制器; > MSC:Mobile Switching Center,移动交换中心。移动网络完成呼叫连接、过区切换控制、 无线信道管理等功能的设备,同时也是移动网与公用电话交换网(PSTN)、综合业务数字网(ISDN)等固定网的接口设备; > HLR:Home location register。保存用户的基本信息,如你的SIM的卡号、手机号码、签约信息等,和动态信息,如当前的位置、是否已经关机等; > VLR:Visiting location register,保存的是用户的动态信息和状态信息,以及从HLR下载的用户的签约信息; > CCCH:Common Control CHannel,公共控制信道。是一种“一点对多点”的双向控制信道,其用途是在呼叫接续阶段,传输链路连接所需要的控制信令与信息。 ## 0X06 参考文献 <hr /> > 1.[https://github.com/osmocom/osmocom-bb][39] > 2.[http://bb.osmocom.org/trac/wiki/TitleIndex][40] > 3.[http://wulujia.com/2013/11/10/OsmocomBB-Guide/][41] > 4.[https://blog.hqcodeshop.fi/archives/253-iPhone-cell-Field-Test-mode.html][42] > 5.[http://bbs.pediy.com/showthread.php?t=182574][43] > 6.[http://www.blogjava.net/baicker/archive/2013/11/13/406293.html][44] > 7.[https://www.nigesb.com/gsm-hacker-sheet.html][45] *本文为`wooyaa`原创,转载请提及`wooyaa`以及原文链接,其他均参照[MIT][15]协议。 [1]: https://wooyaa.me/usr/uploads/2023/04/1123680232.jpg [2]: https://wooyaa.me/usr/uploads/2023/04/3886324379.jpg [3]: https://wooyaa.me/usr/uploads/2023/04/807758398.jpg [4]: https://wooyaa.me/usr/uploads/2023/04/758791053.jpg [5]: https://wooyaa.me/usr/uploads/2023/04/547104812.jpg [6]: https://wooyaa.me/usr/uploads/2023/04/3577512317.jpg [7]: https://wooyaa.me/usr/uploads/2023/04/1481718015.jpg [8]: https://wooyaa.me/usr/uploads/2023/04/15819807.jpg [9]: https://wooyaa.me/usr/uploads/2023/04/1248349912.jpg [10]: https://wooyaa.me/usr/uploads/2023/04/1248611065.jpg [11]: https://wooyaa.me/usr/uploads/2023/04/92249537.jpg [12]: https://wooyaa.me/usr/uploads/2023/04/245136772.jpg [13]: http://bb.osmocom.org/trac/wiki/GnuArmToolchain [14]: https://wooyaa.me/usr/uploads/2023/04/1675217780.jpg [15]: https://wooyaa.me/usr/uploads/2023/04/3201834058.jpg [16]: https://wooyaa.me/usr/uploads/2023/04/2658156300.jpg [17]: https://wooyaa.me/usr/uploads/2023/04/2863765193.jpg [18]: https://wooyaa.me/usr/uploads/2023/04/289157273.jpg [19]: https://wooyaa.me/usr/uploads/2023/04/3147444918.jpg [20]: https://wooyaa.me/usr/uploads/2023/04/3269044303.jpg [21]: https://wooyaa.me/usr/uploads/2023/04/1309740301.jpg [22]: https://wooyaa.me/usr/uploads/2023/04/4210969613.jpg [23]: https://wooyaa.me/usr/uploads/2023/04/1559130324.jpg [24]: https://wooyaa.me/usr/uploads/2023/04/3092200422.jpg [25]: https://wooyaa.me/usr/uploads/2023/04/1660601310.jpg [26]: http://robinlea.com/pub/Amphol/Security_Research_Labs.html [27]: https://srlabs.de/airprobe-how-to/ [28]: http://www.rtl-sdr.com/rtl-sdr-tutorial-analyzing-gsm-with-airprobe-and-wireshark/ [29]: https://wooyaa.me/usr/uploads/2023/04/610275180.jpg [30]: https://wooyaa.me/usr/uploads/2023/04/639168097.jpg [31]: https://wooyaa.me/usr/uploads/2023/04/1872782759.jpg [32]: https://wooyaa.me/usr/uploads/2023/04/1522670445.jpg [33]: https://wooyaa.me/usr/uploads/2023/04/1666106351.jpg [34]: https://wooyaa.me/usr/uploads/2023/04/399243856.jpg [35]: http://web.it.kth.se/~johanmon/attic/2g1723/lectures.html [36]: https://wooyaa.me/usr/uploads/2023/04/1523266137.jpg [37]: https://wooyaa.me/usr/uploads/2023/04/2215616014.jpg [38]: https://wooyaa.me/usr/uploads/2023/04/4005484388.jpg [39]: https://github.com/osmocom/osmocom-bb [40]: http://bb.osmocom.org/trac/wiki/TitleIndex [41]: http://wulujia.com/2013/11/10/OsmocomBB-Guide/ [42]: https://blog.hqcodeshop.fi/archives/253-iPhone-cell-Field-Test-mode.html [43]: http://bbs.pediy.com/showthread.php?t=182574 [44]: http://www.blogjava.net/baicker/archive/2013/11/13/406293.html [45]: https://www.nigesb.com/gsm-hacker-sheet.html 最后修改:2023 年 04 月 28 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏
3 条评论
不错。。。。不过好像已经不是啥新技术了~
是的,新开博客。。把老文章丢上来,占占位置。。。。sorry
Hello! Can you contact me by my email? I have a commercial project that I need your help on.