如何通过中间人攻击嗅探SIM卡的流量通信
写在前面的话
这篇文章我将介绍如何制作中间人(MitM)设置来嗅探SIM卡和后端服务器之间的流量。虽然这不是一项新的研究,但我希望这将帮助一些没有电信基础的人学习移动数据嗅探和虚假基站的知识。但是我只会介绍使用2G和GPRS的SIM卡的方案。希望将来可以带来更多关于3G,4G的文章吧!
为什么
随着越来越多的物联网设备诞生,这些设备一般通过SIM卡连接到其服务器。他们可以是很常见的东西,如咖啡机,智能手表,智能眼镜,汽车或重要医疗设备等更大的东西。如果您想要嗅探物联网设备和后端服务器之间的流量,这篇文章可以帮你。
目标
为了对移动数据流量进行中间人攻击。我们需要使用USRP硬件制作了一个简单的伪基站。
要求
我在文中提到的用于进行此设置的设备。当然还有许多其他代替品。所以我没有任何声称这是最好的方法!
硬件
1.USRP B210)(带天线和电缆usb3连接到PC)
2.智能手机/或旧的GSM手机。在IoT pentest场景的情况下,我们在此处使用IoT设备。
3.一张SIM卡
4.一台笔记本电脑
软件
1.OpenBTS
2.SipauthServ
3.Smqueue(可选)
4.Asterisk(可选)
5.操作系统 - Ubuntu 16.04
什么是OpenBTS
OpenBTS.org是一个开源软件项目,致力于制作电信协议和传统的复杂的专有硬件系统,具有互联网协议和灵活的软件架构。OpenBTS软件是一个Linux应用程序,它使用软件定义的无线电向用户设备提供标准的3GPP空中接口,同时将这些设备作为SIP端点呈现给Internet。这构成了一种新型无线网络的基础,该网络有望扩大对未服务和服务不足市场的覆盖范围,同时释放创新平台,包括为新兴网络技术提供支持,例如针对物联网的网络技术。(点击阅读原文查看参考)
建立伪基站
首先要做的是运行OpenBTS。我按照参考材料从源代码构建OpenBTS。通常会有一些缺少的依赖项需要修复。除此之外,构建OpenBTS不需要特定的设置。首先,我们主要需要两个服务,即OpenBTS本身和SipauthServe。从源代码构建OpenBTS和SipauthServe后,启动终端中的两个服务。在上面的参考中,还有其他组件,如Smqueue和Asterisk,它们使呼叫和SMS功能正常工作。但由于我们的重点主要是移动数据(这里是GPRS),我们在这里不关心设置这些组件。
运行OpenBTS
1.使用USB将USRP设备连接到计算机。
2.就我而言,我新建了一个虚拟机,我在其中构建了所有必需的软件,移植起来很方便。但在使用虚拟机时,要确保具有USB转发功能。在virtualbox中,您应该要启用USB>设备> Ettus Research USRP B210(或类似的名称。如果您不知道正确的名称,请执行dmesg以确定。)
3.uhd_usrp_probe:使用此命令,用于Linux的USRP硬件驱动程序外设报告实用程序,一旦检测到设备,将下载B210的固件。
4.运行SipauthServe:
home/dev/subscriberRegistry/apps$ sudo ./sipauthserve
5.运行OpenBTS:
home/dev/openbts/apps$ sudo ./OpenBTS
6.运行OpenBTSCLI
home/dev/openbts/apps$ sudo ./OpenBTSCLI
配置基站
在上面的步骤中,您会注意到我们运行了OpenBTSCLI。这主要是为了配置我们的OpenBTS。
下面是OpenBTSCLI中主要配置:
1.允许任何电话无需任何身份验证即可连接到基站。无论其提供商。
OpenBTS> config Control.LUR.OpenRegistration
2.启用GPRS
OpenBTS> config GPRS.Enable
3.启用IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
4.设置iptables:原文详细介绍了整个GPRS和IPtables设置。
让手机连接到基站
智能手机需要更改某些设置才能使其连接到基站。如果是物联网设备,需要设置更多东西,因为在物联网设备中几乎没有选项来配置“移动网络”。我们稍后会谈到这一点。
设置Android手机
(在iPhone上基本相似。)
1.启用2G。这将从4G下调至2G:设置>蜂窝网络>首选网络类型> 2G
2.添加APN:设置>蜂窝网络>接入点名称。添加时,请确保将MCC和MNC设置为与SIM卡相同的值。在德国,MCC为262.跨国公司将根据提供商进行更改。APN和Name值可以是任何值。此外,将身份验证保持为none。
3.搜索我们的基站并手动连接到它:设置>蜂窝网络>搜索网络。通常它显示为包括MCC和MNC值的数字。
如果您看到该消息,即您的手机已在网络上注册,则可以通过检入OpenBTSCLI来确认:
OpenBTS> tmsis
这将显示注册到基站的SIM卡的IMSI。IMSI是SIM卡的私有标识符。具有IMSI的攻击者可以识别和跟踪订户的网络。
移动数据嗅探
GPRS正常工作后,您应该可以在手机中实际看到“LTE”或移动数据符号的位置看到符号“G”。尝试在智能手机的浏览器中搜索某些内容。这会超级慢。
*参考来源:insinuator,周大涛编译,转载请注明来自FreeBuf.COM
- 跨浏览器tab页的通信解决方案尝试
- 深度学习的GPU:深度学习中使用GPU的经验和建议
- socket.io搭配pm2(cluster)集群解决方案
- 用 Python 来刷微信「跳一跳」游戏的记录
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十二)数据层优化-explain关键字及慢sql优化
- 高吞吐koa日志中间件
- 关于SQLRecoverableException问题的排查和分析(r4笔记第13天)
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
- node中的Stream-Readable和Writeable解读
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(六)一定要RESTful吗?
- 深入node之Transform
- 巧用shell脚本统计磁盘使用情况(r4笔记第12天)
- 使用fasttext实现文本处理及文本预测
- 关于导入导出sequence(r4笔记第11天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tensorflow ActiveFunction激活函数解析
- C++核心准则Con.1:默认情况下使对象不可修改
- 进化算法个体和指标的一致性
- matlab代码折叠与分节注释
- Flask从零到一 1 | 虚拟环境和第一个flask程序
- 按照元素指定条件筛选结构体数组
- 多目标优化按支配关系分层实现
- CentOS 7 解决丢失 nginx.pid
- $(function(){})和$(document).ready(function(){})
- javascript中的setTimeout() 方法和clearInterval() 方法和setInterval() 方法
- matlab生成数字1-n的列向量
- JavaScript中的匿名函数及函数的闭包
- ios下Safari无法触发click事件的处理
- 禁止网页右键、复制、另存为、查看源文件等功能
- ajax知识点