GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站
引文
如果你已经购买了Nuand(官方)BladeRF x40,那么就可以在上面运行OpenBTS并可以输入一些指令来完成一些任务。一般来说HackRF,是一款覆盖频率最宽的SDR板卡。它几乎所有的信息都是开源的,甚至包括KiCad文件。缺点是它没有FPGA,使用的低速的USB2接口,ADC/DAC的精度比较低。
再使用 bladeRF 板卡时需要注意两个“镜像”:固件 (firmware) 镜像与 FPGA 镜像。二者是两个不同的概念。但是业界叫法不一,有时候会把二者混为一谈。一般而言,固件指的是嵌入到硬件设备中的软件,存放在只读存储器 (ROM) 或者闪存 (flash) 中,一般不易修改,修改的操作称为“刷新”(flashing)。固件这个名词最初和微代码相关,不过 bladeRF 里源代码是嵌入式 C 程序。FPGA 全名为可编程门阵列,其门电路、寄存器连接可以编程重构,其源程序一般是硬件描述语言 (HDL),通过综合 (synthesis) 等步骤得到二进制文件。在 bladeRF 板卡上,FPGA 只是一块 Altera 芯片。在没有内置非挥发存储时,FPGA 镜像需要每次上电时重新加载,bladeRF 就是这种情况。所以在拿到板卡时,上面已有固件,但还没有 FPGA 镜像。下面本文会具体说明在使用 bladeRF 时如何刷新固件、加载/更新 FPGA 镜像、以及如何自动加载 FPGA 镜像。注意,有时为了避免混淆,会称 FPGA 镜像为 FPGA 比特流,或者 FPGA 配置(因为它就是配置了门电路等组件的连接)。
本文中介绍的工具、技术带有一定的攻击性,请合理合法使用。
系统:
Ubuntu 12.04 LTS Server (32位)下载:(点击我)
升级git版本
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:git-core/ppa (press enter to continue)
sudo apt-get update
sudo apt-get install git
安装一些前提软件包。
设置好之后,开始安装。
将下面代码复制粘贴,运行-将会开始安装:
sudo apt-get install $(
wget -qO - https://raw.githubusercontent.com/RangeNetworks/dev/master/build.sh | \
grep installIfMissing | \
grep -v "{" | \
cut -f2 -d" ")
另外一种安装方式是通过在所有文件中搜索文本文件 IFMissing,然后再通过apt-get 命令来安装它。当然你也可以直接通过程序代码来操作。
值得注意的是,安装时候有两个安装包会失败(libzmq3 & libzmq3-devel)-但可以在Ubuntu系统下直接安装。
$ sudo add-apt-repository ppa:chris-lea/zeromq
$ sudo apt-get update
$ sudo apt-get install libzmq3-dbg libzmq3-dev
下一步是安装uhd,当然还要注意GNURadio。运行下面的指令将会执行安装,当然这回花掉一些时间,而这也取决于你的电脑。
wget http://www.sbrac.org/files/build-gnuradio && chmod a+x ./build-gnuradio && ./build-gnuradio
一旦执行完成,你将会收到失败或成功的提示信息。如果失败可以选择重新安装,并查看相关信息来解决问题。下面将会安装和配置 OpenBTS相关软件,包括:libgsm1-dev 、asterisk-dev 、asterisk-config。安装
$ sudo apt-get install libgsm1-dev asterisk-dev asterisk-config
当然你可以自主选择是否安装libusb,请注意不是 libusbx 。安装可以到www.libusb.org页面下载,然后将其复制到 /usr/src目录下。将/usr/lib/x86_64-linux-gnu/libusb.so原始文件备份后覆盖它。
安装OpenBTS
完成上面的事情之后,现在就开始安装它吧。
1.为其(OpenBTS)创建一个目录(结合实际情况)
2.然后安装并运行它
#!/bin/bash git clone https://github.com/RangeNetworks/openbts.git
git clone https://github.com/RangeNetworks/smqueue.git
git clone https://github.com/RangeNetworks/subscriberRegistry.git #From here and downwards you can copy&paste (that's why the ';' are for)
for D in *; do (
echo $D;
echo "=======";
cd $D;
git clone https://github.com /RangeNetworks/CommonLibs.git;
git clone https://github.com/RangeNetworks/NodeManager.git);
done;
git clone https://github.com/RangeNetworks/libcoredumper.git;
git clone https://github.com/RangeNetworks/liba53.git
3.创建 libcoredumper
cd libcoredumper;
./build.sh && \
sudo dpkg -i *.deb;
cd ..
4.创建 liba53
cd liba53;
make && \
sudo make install;
cd ..
5.在同一目录下,check out“YateBTS”
svn checkout http://voip.null.ro/svn/yatebts/trunk yatebts
6.下一步去掉 FPGA(自动加载)信息,然后加载并打开它
vim ./yatebts/mbts/TransceiverRAD1/bladeRFDevice.cpp
从#ifdef(108行)到#endif(129行)结束,这之间是空的,应该为后来留为备用的。
7.更换目录(YateBTS)然后运行 autogen.sh
$ cd opbts/yatebts
$ ./autogen.sh
8.这样就可以创建配置文件,如果你立刻运行并配置脚本,将会出现错误然后出现搜索YATE信息。所以先要打开它配置
$vim configure
能够找到as_fn_err $吗?能够找到$LINENO变量(开源软件 Yate)并替换吗?那么进行下一步吧
9.重新配置
./configure
10.这个时候需要开源软件YateBTS两个文件目录
a) Peering
$ cd /home/openbts/obts/yatebts/mbts/Peering
$ make
b) TransceiverRAD1
$ cd /home/openbts/obts/yatebts/mbts/TransceiverRAD1
$ make
11.复制两个文件到 OpenBTS 文件目录下
$ cd ..
$ cp ./yatebts/mbts/TransceiverRAD1/transceiver-bladerf openbts/apps/
$ cd openbts/apps/
$ ln -sf transceiver-bladerf transceiver
12.编译OpenBTS
$ cd /home/openbts/obts/openbts
$ ./autogen.sh
$ ./configure --with-uhd
$ make
13.下一步配置SQL-lite软件库(bladeRF),需要做一些修改
vim /home/openbts/obts/openbts/apps/OpenBTS.example.sql
查询并替换以下信息
完成并进行下一步
14.创建OpenBTS配置目录
$ sudo mkdir /etc/OpenBTS
15.在OpenBTS目录下,安装软件库
$ sudo sqlite3 -init ./apps/OpenBTS.example.sql /etc/OpenBTS/OpenBTS.db ".quit"
16.一旦完成,下一步可以通过命令来测试它
$ sqlite3 /etc/OpenBTS/OpenBTS.db .dump
如果看到了大量的输出数据信息,那么就表明成功了。进行下一步
17.通过命令运行OpenBTS
$ cd /home/openbts/obts/openbts/apps
$ sudo ./OpenBTS
如果看见系统启动,你的基站准备好并启动它,如果使用手机搜寻附近网络,应该出现测试PLMN网络的测试信息(00101)。
18.如果开始上面的测试,退出openBTS然后安装用户注册表(sipauthserve以及smqueue),需要这些才能够运行openBTS。没有这些,手机不会连接测试网络。
19. 对于用户注册表,必须要创建一个文件目录,即/var/lib/asterisk/sqlite3dir,创建它
$ sudo mkdir -p /var/lib/asterisk/sqlite3dir
20.创建 sipauthserve
$ cd subscriberRegistry
$ ./autogen.sh
$ ./configure
$ make
在/home/openbts/obts/subscriberRegistry/apps目录下创建
21.下一步配置 sipauthserve
$ cd /home/openbts/obts/subscriberRegistry
$ sudo sqlite3 -init subscriberRegistry.example.sql /etc/OpenBTS/sipauthserve.db ".quit"
22.下一步安装SMQUEUE,其与SubscriberRegistry.h文件有关联,可以在其目录修复它
$ cd /home/openbts/obts/smqueue
$ ln -s /home/openbts/obts/subscriberRegistry/ SR
$ autoreconf -i
$ ./configure
$ make
23.一旦完成之后,就需要修改其配置文件
$ cd /home/openbts/obts/smqueue
$ sudo sqlite3 -init smqueue/smqueue.example.sql /etc/OpenBTS/smqueue.db ".quit"
bladeRF 固件升级与FPGA镜像加载
24.在https://github.com/Nuand/bladeRF/wiki/Upgrading-bladeRF-firmware升级固件
25.完成之后在http://www.nuand.com/fpga.php下载镜像(FPGA)
26.加载FPGA镜像
$ bladeRF-cli -L <path to fpga image file>
这步一定要有耐心,不要突然终止,别让板子变成砖了。
27. 完成之后,开始运行之前的配置的服务吧。
$ cd /home/openbts/obts/smqueue
$ sudo ./smqueue & $ cd /home/openbts/obts/subscriberRegistry/apps
$ sudo ./sipauthserve & $ cd /home/openbts/obts/openbts/apps
$ sudo ./OpenBTS &
28.启动OpenBTSCLI
$ cd /home/openbts/obts/openbts/apps/
$ sudo ./OpenBTSCLI
29. 默认情况下, OpenBTS不会接受额外的登记信息,需要做到下面几点
a) 输入你手机的IMSI(国际移动用户识别码)
b) 设置所有的IMSI号可以被登记
config Control.LUR.OpenRegistration .*
这么做将会导致信号范围内所有的手机连接到你配置的基站上面,包括(隔壁的妹子or老王)。
现在你可以在手机上能够搜索到基站网络了,可以拨打服务电话(作者那边是600)做测试(Asterisk)。
了解更多
[1] https://github.com/Nuand/bladeRF/wiki/Minimalistic-build-and-run-test-for-OpenBTS-5
[2] https://wush.net/trac/rangepublic/wiki/BuildInstallRun#ConfiguringOpenBTS
[3] https://wush.net/trac/rangepublic/wiki/CommonErrors
[4] http://openbts.org/w/index.php/Main_Page
[5] https://github.com/Nuand/bladeRF/wiki/Upgrading-bladeRF-firmware
*参考来源:linux.net.pk
GSM BTS Hacking: 利用BladeRF和开源BTS 5搭建基站的更多相关文章
- GSM Hacking:使用BladeRF、树莓派、YatesBTS搭建便携式GSM基站
每次看到黑客在网上发布的那些GSM技术相关文章我都十分惊讶.然而在没有Software Defined Radios (SDRs)之前,玩GSM并不便宜,除此之外想要好好玩你得下大功夫. 拓展阅读 G ...
- 开源BTS产品中存在多处漏洞,攻击者或可劫持手机通讯基站
前言 在过去的几周时间里,我从多个方面对GSM的安全性进行了调查和研究,例如GSM通信协议中存在的漏洞.除此之外,我还对目前世界上应用最为广泛的BTS软件进行了安全审计.在这篇文章中,我将会给大家介绍 ...
- 利用cocoapods管理开源项目,支持 pod install安装整个流程记录(github公有库)
利用cocoapods管理开源项目,支持 pod install安装整个流程记录(github公有库),完成预期的任务,大致有下面几步: 1.代码提交到github平台 2.创建.podspec 3. ...
- 【Slickflow学习】.NET开源工作流环境搭建(三)
第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-环境搭建 在VS2010中使用附加进程的方式调试IIS ...
- Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建与调试
Eclipse+CDT+YAGARTO+J-Li:开源开发环境搭建与调试:作者:Chongqing:邮箱:ycq.no1@163.com:文档版本:V1.0:发布日期:2014-08-04:前言:此文 ...
- soul开源网关项目搭建学习
1. soul开源网关项目搭建学习 1.1. 地址 https://gitee.com/shuaiqiyu/soul 1.2. 介绍 官方介绍:这是一个异步的,高性能的,跨语言的,响应式的API网关. ...
- 使用基于 PHP 的开源软件 YOURLS 搭建短链接地址服务
使用基于 PHP 的开源软件 YOURLS搭建 系统配置 php7.1+mysql5.7+nginx 下载源代码 git clone https://github.com/YOURLS/YOURLS. ...
- 利用Octopress在github pages上搭建个人博客
利用Octopress在github pages上搭建个人博客 SEP 29TH, 2013 在GitHub Pages上用Octopress搭建博客,需要安装ruby环境.git环境等.本人在Fed ...
- 人手一份核武器 - Hacking Team 泄露(开源)资料导览手册
https://zhuanlan.zhihu.com/p/20102713 author:蒸米 0x00 序 事先声明本人并不是全栈安全工程师,仅仅是移动安全小菜一枚,所以对泄漏资料的分析难免会有疏忽 ...
随机推荐
- NodeJS几个值得学习的开源框架
1.Primus Primus,是Transformer的创造者,并且也被称为通用包装器实时框架.Primus里包含了大量的用于Node.js的实时框架,并 且它们都拥有各种不同的实时功能.此外,Pr ...
- 8个实用的页面布局和用户界面jQuery插件
网页设计师和网页开发人员在做项目的时候可能会有一些页面的布局或者对于UI有一些特定的要求.可能一些需求不能单独使用CSS就能实现的.于是很多时候开发人员都会消耗大量的时间和精力去写一些JS来协助实现. ...
- [转]C#中的Monitor类
object obj=new object(); Monitor在锁对象obj上会维持两个线程队列R和W以及一个引用T : (1) T是对当前获得了obj锁的线程的引用(设此线程为CurrThread ...
- 为不同浏览器创建XMLHttpRequest对象
/*声明一个XMLHttpRequest对象*/ var xmlHttp=false; /*@cc_on@*/ /*if(@_jscript_version>=5) try { xmlHttp= ...
- Could not find artifact com.sun:tools:jar:1.5.0
问题: Failed to execute goal on project petroleum: Could not resolve dependencies for project petroleu ...
- Threading.Tasks.Task多线程 静态全局变量(字典) --只为了记录
--------------------------------------------------------------后台代码---------------------------------- ...
- Android统计图表MPAndroidChart.
Android统计图表MPAndroidChart MPAndroidChart是在Android平台上开源的第三方统计图表库,可以绘制样式复杂.丰富的各种统计图表,如一般常见的折线图.饼状图.柱状图 ...
- c# 调用 ShellExecute
using System.Runtime.InteropServices; namespace ConsoleTest{ class Program { public enu ...
- [CSS]三层嵌套的滑动门
原理: 最外层放水平平铺的背景,第二层放左边,第三层放右边,注意这个做法背景图不能透明 结构: <div class="module-title"> <span ...
- Hibernate中的集合映射
1.定义实体 public class User { private int userId; private String userName; private Set<String> ad ...