GSM Hacking:使用BladeRF、树莓派、YatesBTS搭建便携式GSM基站
每次看到黑客在网上发布的那些GSM技术相关文章我都十分惊讶。然而在没有Software Defined Radios (SDRs)之前,玩GSM并不便宜,除此之外想要好好玩你得下大功夫。
拓展阅读
GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站
在阅读多篇有关GSM基站的文章之后,我注意到有关GSM基站这个话题有许多的不一致或者是讲的不够细致。 基于这一点,我决定写下今天这篇文章,进行手把手教学。 在文章开始之前,我要感谢所有开创GSM技术的黑客以及研究人员 尤其我要感谢Karsten Nohl(这哥们就是Ninja)出版的有关GSM Hacking的书籍(可以去看看他所使用的SS7协议),以及感谢Simone Margaritelli写下的“How To Build Your Own Rogue GSM BTS For Fun And Profit“(中文版本可以参考FreeBuf发布的 极客DIY:如何构建一台属于自己的基站 )译文,让我第一次实现了GSM基站的搭建。
硬件及价格
- A Nuand bladeRF x40 USB 3.0 Software Defined Radio. Price: $420.00
- Two Quad-band Cellular Duck Antennas SMA. Price: $15,9
- A Raspberry Pi 3 Model B Kit. Price: $69,99
- A Anker Astro E7 26800mAh Portable Charger (optional). Price: $54,99
树莓派操作系统及初始配置
首先我们要做的就是下载,解压,安装RASPBIAN Jessie Lite(Version: March 2016, Release date: 2016-03-18, Kernel version 4.1)镜像到存储卡中。
1 | wget -c http://vx2-downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2016-03-18/2016-03-18-raspbian-jessie-lite.zip |
在SD卡中完成安装后就可以将其插入到树莓派中了,启动该设备并进行初始化配置。
注意:你需要知道树莓派分配的IP地址,在本文中树莓派分配的IP地址为192.168.0.10
1 | blog@strcpy.info:/home/blog/$ ssh pi@192.168.0.10 |
注意:在树莓派中默认的用户名为pi,默认的密码为raspberry
现在你登录到树莓派中,使用超级用户运行配置命令 我们首先从文件系统开始:
1 | pi@raspberry:~ $ sudo su |
树莓派重启之后你就可以开始安装依赖包的进程了。
安装依赖关系
你必须将这些必要的依赖包安装到环境中去
1 | blog@strcpy.info:/home/blog/$ ssh pi@192.168.0.10 |
连接Nuand bladeRF x40
现在你就可以将bladeRF x40插入到树莓派的一个USB接口上,记得检查是否连接到设备。
1 | root@raspberry:/home/pi# dmesg |
Nuand bladeRF源代码
下载并安装 Nuand bladeRF源代码
1 | root@raspberry:/home/pi# cd /tmp |
Yate以及YateBTS (SubversiveBTS)源代码
为了创建GSM基站你需要下载并安装Yate和YateBTS,他们都是开源软件 感谢Simone Margaritelli,你不用去找兼容bladeRF x40的Yate和YateBTS版本。他在Github上分享了一份清单
1 | root@raspberry:/tmp/bladeRF-master/host/build# cd /tmp |
Nuand bladeRF x40固件
下载并安装 Nuand bladeRF x40 firmware v1.8.0
1 | root@raspberry:/tmp/SubversiveBTS/yatebts# cd /tmp |
安装完后,从树莓派USB口拔下Nuand bladeRF x40,之后再重新插入。 现在我们是时候检测安装的bladeRF-cli, libbladeRF, Nuand bladeRF x40 firmware以及Nuand bladeRF x40 FPGA版本。
1 | root@raspberry:/tmp/# bladeRF-cli -i |
从bladeRF退出,直接键入‘quit’
Network in a Box (NIB) Web GUI
在Apache WWW目录中给NIB Web GUI创建一个symlink,并赋予配置文件的写权限
1 | root@raspberry:/tmp/# cd /var/www/html |
配置GSM基站系统
现在你就可以通过浏览器访问Network in a Box (NIB) Web GUI,并开始基站的配置 注意:在浏览器键入http://192.168.0.10/nib 对于GSM基站系统,你需要设置以下值
1 | Radio.Band=900 |
显然在YateBTS的公开版本中,设置“Identity.ShortName” 值是没有影响的。根据社区反馈信息,我们得知只有一个商业版本设置这个值是有影响的。 在OpenBTS中,设置这个值能够很好的完成工作。 因此设置“Identity.ShortName=SubversiveBTS”的值也是没有影响的
支持订阅者
你可能需要允许订阅者的手机连接到GSM基站
注意:* 正则表达式
Tapping选项
你可以激活GSM and GPRS,启用这些选项你可以通过GSMTAP的L1/L2接口抓取GSM (发信号) 和GPRS (发信号和通信)
至此,这个简化版的配置就完成了。 接下来你需要配置GPRS提供数据连接(互联网) 相信我,GPRS的数据连接非常慢
配置GPRS BTS Operability
首先我们需要使用IPTABLES配置GPRS的网络连接
root@raspberry:/var/www/html# iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
注意:改变树莓派连接的wlan0网络接口
对于GPRS operability,我们需要设置以下值
1 | Firewall.Enable=no firewall |
开启基站
执行以下命令开启基站
root@raspberry:/# yate -s
如果所有配置都正确,你可以看到如下信息
1 | ... |
连接手机
你要手动在网络列表中选择“Test ID PLMN 1-1”网络ID来连接到GSM基站 在本文中,网络ID为“Test ID PLMN 1-1”是由于我们之前在“Identity.MCC =001”和 “Identity.MNC =01”中进行设置的
注意:MCC 和 MNC的值可以在这里找到
手机成功连接到GSM基站之后,会通过短信发送一条包含分配号码的欢迎信息。
- 注意:你可以通过编辑**/usr/local/share/yate/scripts/nib.js**文件修改欢迎信息 *
订阅者
在本节中你可以详细管理基站的订阅者
在这里你可以看到在线的订阅者
真实测试
在“Test ID PLMN 1-1” GSM基站上进行短信测试
http://static.video.qq.com/TPout.swf?vid=t0196cldj9w&auto=0
在“Test ID PLMN 1-1”GSM基站上进行通话测试
http://static.video.qq.com/TPout.swf?vid=p0196n9q02g&auto=0
在“Test ID PLMN 1-1”GSM基站上进行GPRS测试
http://static.video.qq.com/TPout.swf?vid=w01962wfhvp&auto=0
参考资料
- http://wiki.yatebts.com/index.php/Main_Page
- https://github.com/Nuand/bladeRF/wiki/Setting-up-Yate-and-YateBTS-with-the-bladeRF
- https://imjuanpablo.wordpress.com/2015/02/14/should-you-need-openbts-on-your-bladerf
- https://evilsocket.net/2016/03/31/how-to-build-your-own-rogue-gsm-bts-for-fun-and-profit
- http://linux.net.pk/blog/poor-mans-gsm-bts-nuands-bladerf-openbts-5-setup-instructions
- https://discourse.criticalengineering.org/t/howto-gsm-base-station-with-the-beaglebone-black-debian-gnu-linux-and-a-usrp/56
- https://github.com/Nuand/bladeRF/wiki/Minimalistic-build-and-run-test-for-OpenBTS-5
- https://www.raspberrypi.org/documentation/installation/installing-images/linux.md
- http://www.circuitbasics.com/raspberry-pi-basics-setup-without-monitor-keyboard-headless-mode/