SMS短信嗅探实验报告
SMS短信嗅探实验
前言
历经千辛万苦,在三天的尝试之后,我的摩托罗拉 C118 成功完成刷机,可抽象的是,在筛选的几个活跃信道中,挂了一个多小时,没有搜索到任何,哪怕一条短信。实验如成。为了让这个几年前的老东西成功跑起来,翻了国内外各大论坛,重新温顾了我的 linux 知识(谢谢你,我前后换了4个版本的 ubuntu 系统),下面就来详细讲讲。
准备工作
硬件
Moto C118 手机一台,电池一块,充电线一条,TTL 转接模块一个,2.5mm耳机线半根(如果不想自己 DIY 可以直接某宝买现成的)
软件
使用 VMWare + ubuntu-16.04.6-desktop-i386.iso 镜像文件搭建的虚拟机一台
1 | Linux version 4.15.0-142-generic (buildd@lgw01-and64-048)(gcc version 5.4.0 20160609 (ubuntu 5.4.0-6ubuntu1~16.04.12))#146~16.04.1-Ubuntu SMP Tue Apr 1309:26:57 UTC 2021 |
OsmocomBB 相关软件包(安装方法见下文)
原理阐述
射频信号转化
系统通过天线接收到射频(RF)信号。接着,这个RF信号经过一个名为Rita混频器的设备,通过混频器的作用,RF信号被直接下变频到模拟I/Q(正交)基带信号。接下来,这个I/Q基带信号被传送到名为Iota ABB的设备的基带模数转换器(ADC),ADC将模拟信号转换为数字信号。最终,生成的数字信号被传递到HardwareCalypso DBB的基带串行端口(BSP)进行后续处理和分析。
pie title Key elements in Product X "Calcium" : 42.96 "Potassium" : 50.05 "Magnesium" : 10.01 "Iron" : 5
1 | flowchart LR |
数字基带信号处理
从基带串行端口(BSP)传递的数字基带样本被送到DSP内核,其中这些样本经过一系列处理步骤,包括处理、解调、去交错和解码等。随后,处理完成的信号通过一个共享存储器接口传递到ARM内核。在ARM内核上,存在一个名为OsmocomBB layer1的组件,其主要任务是处理MAC(媒体访问控制)块,然后通过L1CTL将它们发送到UART(通用异步收发传输)。
1 | flowchart LR |
跨设备通信
PC上运行的名为osmocon的程序通过串行端口接收L1CTL消息。这个程序的任务是解复用(将不同的sercomm流分开),然后通过Unix域套接字将L1CTL消息传递给任何可能正在运行的layer23程序,例如移动设备。
1 | flowchart LR |
实验过程
安装依赖
最头疼的一集,因为很多依赖的库已经失效了,而新版又不能完全兼容旧版,就是这第一步逼我尝试了四个版本的 ubuntu 系统才顺利的完成安装。
1 | aptitude install libtool shtool autoconf git-core pkg-config make gcc |
如果发现 libncurses5-dbg、libncursesw5-dbg、zlibc、libmpfr4
这四个包找不到,那就对啦,因为你的系统版本对不上,我多次尝试才发现 16.04.6 这个版本可以顺利安装所有软件包。
ARM编译环境
ARM交叉编译环境是一种用于在不同主机架构上开发和编译适用于ARM架构的软件的工具。它使开发人员能够有效地创建、移植和测试ARM应用程序,同时避免直接在目标ARM设备上进行开发,提高了开发效率和跨平台开发的便捷性。
1 | mkdir arm |
这个 gnu-arm-build.3.sh
是一个编译的脚本文件,接着按照脚本需求创建文件夹。
需要注意的是,有的教程会让你使用 gnu-arm-build.2.sh
脚本,这两个的区别就在于 gcc 的版本,gcc 版本过高会导致一些很抽象的错误。
1 | mkdir build install src |
接着我们进入src文件,下载必要的文件包。
1 | cd src/ |
最后那个 ftp 地址的文件可能很慢,我翻出去试了好几个地区,都很慢,建议直接去仓库找网络资源,然后我们返回 arm 目录,执行构建脚本。
1 | cd .. |
虽然我们刚刚安装了很多依赖,但我不能保证安装是顺利的,这个过程会持续大概半小时,如果发现你的 shell 划过了很多五颜六色的 log ,请不要慌张,这是正常的。如果提示你 package 缺失可以使用如下命令进行查询:
1 | sudo apt-cache search <package> |
然后选择差不多的版本安装(这就听天由命了),温馨提示,有些包需要你用压缩包来安装,下面会讲。
如果你很幸运,成功完成了编译,shell 最后一行是:
1 | Build complete! Add <path> to your PATH to make arm-none-eabi-gcc and friends accessible directly. |
这个 path 就依你情况而定,然后把这个路径加到环境变量文件 ~/.bashrc
中:
1 | vi ~/.bashrc |
如果你没有安装 vim 的话记得熟悉一下 vi 的用法(有点坑),然后我们让这个变量生效。
1 | source ~/.bashrc |
为了确保添加成功,可以使用 echo $PATH
进行查看。
编译osmocom-bb
OsmocomBB(Open Source Mobile Communications Baseband)是一个开源的移动通信基带站项目,旨在深入探索手机通信的核心部分,采用GPL许可证,鼓励用户自由查看、修改和分发代码,推动通信安全和技术的发展。它首要关注GSM标准,允许用户创建自己的GSM网络或调整现有手机行为。通过通用软件无线电(SDR)硬件,降低成本、增强灵活性,模拟多种无线电环境。吸引安全研究人员、黑客、通信爱好者,推动通信技术的前沿,包括网络漏洞和通信协议的研究与测试。
在编译 OsmocomBB 之前,我们要先安装 libosmocore ,因为 OsmocomBB 项目是基于libosmocore 的。libosmocore是一个开源软件库,主要用于支持移动通信项目。它提供了通信协议栈、信令处理、消息解析和其他基础功能,有助于简化开发通信系统的复杂性。libosmocore的作用包括提供通信协议的实现、协助构建通信基带站、支持各种通信标准(如GSM)、提高通信系统的互操作性,以及推动开放源代码和安全研究。它是许多移动通信项目的基础,为开发者提供了一个强大的工具,以加速通信技术的发展和改进。
同样的,继续安装需要的软件包
1 | sudo apt-get install build-essential libtool libtalloc-dev shtool autoconf automake git-core pkg-config make gcc |
如果你又遇到了软件包缺失的情况,相信你已经会解决了,换个版本或者手动安装。
接着就可以 clone 项目进行编译了:
1 | git clone git://git.osmocom.org/libosmocore.git |
编译安装完 libosmocore 就可以继续编译 osmocombb 了,还是先 clone 仓库:
1 | git clone git://git.osmocom.org/osmocom-bb.git |
如果到这都没问题的话,那么恭喜你已经完成了软件环境的配置。
但是你大概率会碰到 “No package ‘talloc’ found” 的错误,同时你的 “apt-gey install” 在这时候也找不到相应的安装包,这时候就要自己手动安装了。
1 | wget https://www.samba.org/ftp/talloc/talloc-2.1.7.tar.gz |
刷机教程
先使用 lsusb
查看所有的 usb 设备,然后在 Moto C118 关机情况下连上你的虚拟机(可能需要配置串行端口),再次查看 usb 设备,会看到一个新的设备。
接着进入 osmocombb 的目录:
1 | cd osmocombb/osmocom-bb/src/host/osmocon/ |
这里如果找不到你的 usb 设备,就是串行端口的问题,然后按一下开机键,shell 会开始疯狂滚动,程序开始写入手机硬件。结束之后你的手机上会有 layer 1 osmocom bb
的字样。
开始嗅探
这里我们一共需要四个终端,在完成刷机之后那个终端我们成为终端 A ,接着我们打开第二个终端 B ,在进入 osmocombb/osmocom-bb/src/host/layer23/src/misc
之后,使用如下命令搜索附近伪基站:
1 | sudo ./cell_log |
然后我们打开终端 C ,在上述 misc
目录下输入如下代码进行单个基站的信道嗅探:
1 | ./ccch_scan -i 127.0.0.1 -a ARFCN // 使用活跃信道的 ARFCN 值 |
最后我们打开终端 D ,启动 wireshark 进行抓包:
1 | wireshark -k -i lo -f 'port 4729' |
在过滤器中输入 gsm_sms
筛选短信,但是抽象的是,我挂了一个小时,没有监听到任何一条短信,虽然完成了基站的改造,却没有结果,属实有点可惜了。