导语:前言 本文将介绍如何嗅探手机与基站通信数据以实施中间人(MitM)攻击,其实这并不是什么新的研究,但我希望这可以帮助那些没有通信背景的人了解手机与基站通信数据背后的安全原理,以提高自我保护。应该说,了解其中原理可以让我们对如
前言
本文将介绍如何嗅探手机与基站通信数据以实施中间人(MitM)攻击,其实这并不是什么新的研究,但我希望这可以帮助那些没有通信背景的人了解手机与基站通信数据背后的安全原理,以提高自我保护。应该说,了解其中原理可以让我们对如今很多生活场景下的连接都有所防范,因为我们家里面,就有许多需要连接到后端的带有SIM卡(因为手机用的就是SIM卡)的物联网设备。本文,我会以使用2G和GPRS的SIM卡为例,进行详细介绍。
嗅探手机信号的可能性
今年2月,已经有新闻曝出,不到50块做出的手机信号嗅探器可以获取你的手机号码。追踪手机信号可能比你想象得更容易、成本更低廉,事实上来自丹麦的黑客“IT pro Keld Normal”,只用了价值7美元(约合人民币47元)的USB设备,就能够嗅探到周围基站的信号和连接此基站的手机。
虽然很多操作涉及到Ubuntu系统和Python编程语言,但并不复杂。因为,USB硬件基本上就是一个天线,能够接收到基站的信号及数据,物理距离越接近、就能获得更多数据。然后,软件会对数据库进行分析,最终获得IMSI。
另外,利用伪基站对周围的手机进行中间人攻击已不是什么新鲜事了,比如警方使用的信号基站模拟器(又称为Stingray),Stingray会伪装成基站不断向附近手机发送信号,而且会窥探用户数据和隐私。
目前能够嗅探手机信号的场景
目前在很多物联网设备中,很多设备都是通过SIM卡连接到其后端的。这些设备小到咖啡机、智能手表、智能眼镜,大到智能汽车、关键医疗设备等。如果有攻击者想要对你的物联网设备下手,只需嗅探到你的物联网设备和后端服务器之间的信号流量即可。
测试环境的设置
为了向大家展示如何嗅探手机与基站通信数据,从而实施中间人攻击,我使用了USRP(Universal Software Radio Peripheral,通用软件无线电外设)硬件制作一个简单的伪基站。
从本质上讲,USRP充当了一个无线电通讯系统的数字基带和中频部分。
硬件要求
带有天线和数据线(USB 3)且连接到PC的 USRP B210;
一部 智能手机或旧的GSM手机;
SIM卡;
一台笔记本电脑;
软件要求
OpenBTS;
SipauthServ;
如果你想测试一下短信,可选Smqueue;
如果你想测试一下通话,可选Asterisk;
Ubuntu 16.04操作系统;
什么是OpenBTS
OpenBTS示意图
OpenBTS.org是一个开源软件项目,致力于通过互联网协议和灵活的软件架构来制作电信协议和传统复杂的专有硬件系统。 OpenBTS软件是一个Linux应用程序,它使用软件定义的无线电向用户设备呈现标准的3GPP空中接口,同时将这些设备作为SIP端点呈现给互联网。这就构成了新型无线网络的基础,该网络承诺将覆盖范围扩大至所有网络服务市场,同时释放创新平台,包括为新兴网络技术提供支持,例如针对物联网的新兴网络技术。
创建伪基站
安装示意图
首先要做的是建立一个运行的OpenBTS,其中所使用的源代码,都来自这个链接。不过其中会有一些缺失的代码依赖项,需要进行修复。除此之外,还需要建立OpenBTS所需的具体设置。首先,我需要两个主要的服务,即OpenBTS本身和SipauthServe。从源代码构建OpenBTS和SipauthServe后,在终端中启动这两个服务。不够在上面的源代码链接中,还有其他组件,例如Smqueue和Asterisk,这是让通话和短信功能正常进行所必需的。但是,由于测试的重点主要是移动数据(这里是GPRS),所以我并不关心在这里是否设置了这些组件,但感兴趣的读者可以尝试一下。
运行OpenBTS
1. 使用USB 3数据线将USRP设备连接到电脑。
2. 在本文中,由于我创建了一个虚拟机,所以我可以构建测试时所必需的软件。如果你也有一台虚拟机,要确保你的USB 3接口可用。在virtualbox中,你可以通过 USB > Devices > Ettus Research USRP B210启用USB 3。
3. 使用 uhd_usrp_probe命令,可以让USRP在linux中提供相应的硬件驱动程序,一旦它检测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 1
3.启用IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
4.安装iptables,你可以点此进行完整的GPRS和IPtables设置。
让手机连接到基站
如果你用的是智能手机进程测试,则必须更改一些设置才能使手机连接到基站。如果你用的是物联网,则测试的挑战性会更大,因为在物联网设备中几乎没有配置“移动网络”的选项。
设置Android手机,设置Android手机的过程和在iPhone中差不多:
1.启用2G:这是从4G降级到2G,设置步骤为“设置>蜂窝网络>首选网络类型> 2G”。
2.添加APN:设置步骤为“设置>蜂窝网络>访问点名称”。添加时,请确保将MCC和MNC设置为与SIM卡相同的值。如果是在德国,MCC是262,跨国公司将根据自己手机的提供商进行变更。除此之外,APN和Name值可以任意设置。另外,保持身份验证的选项为none。
设置APN
3.搜索我的基站并手动进行连接,步骤为“设置>蜂窝网络>搜索网络”,通常出现的数字包含MCC和MNC的值。
注册到基站的消息
如果你看到该消息,说明你的电话已在网络上注册成功,可以通过在OpenBTSCLI中进行检查确认。
OpenBTS> tmsis
这将显示注册到你的基站的SIM卡的IMSI,如果你成功做到了这一步,你就已经有了第一个发现,那就是SIM卡的IMSI。 IMSI是你SIM卡的私有标识符。具有IMSI的攻击者可以识别并跟踪用户的网络,甚至可以尝试执行模拟攻击。
嗅探移动数据
一旦GPRS正常工作,你应该能够在你的手机中看到“LTE”或移动数据符号的标识“G”。你也可以在你的智能手机浏览器中尝试使用谷歌,不过速度非常慢。
在你的OpenBTS VM中打开Wireshark,你将能够看到嗅探到的数据包。
在wireshark中嗅探到的流量