美文网首页
GSM嗅探攻击的防御测试

GSM嗅探攻击的防御测试

作者: 是二千 | 来源:发表于2018-09-19 12:16 被阅读0次

声明

本文仅为技术测试和探讨,请勿用于非法用途。

GSM嗅探攻击的测试与防御措施

目录:

(1)背景介绍

(2)原理介绍

(3)环境搭建

(4)准备硬件

(5)嗅探测试

(6)防范措施

1.背景介绍

原标题:「防不了」的新型盗刷方式:GSM 短信嗅探详解—凤凰网

      [1]关于信息安全,我们似乎觉得,只要自己不「作」,就不会「翻车」:平时不无脑点击各种来路不明的链接、不随便将验证码告知他人,不法分子便对我们无可奈何。然而,最近一种新的盗刷方式却刷新了我们的理解——不用用户点击任何链接,甚至在用户没有察觉的情况下,就能轻松获得手机上的验证码,盗取用户支付宝,微信,网银中的资产。与普通的盗刷方式不同,所有受害人都没有点击未知链接,也没有主动将验证码之类的敏感信息转发给任何人,甚至大部分受害人都是在早上起床才发现被人在凌晨盗刷。这实在是刷新了我们的理解,难道不法分子的技术已经能够直接远程操控手机了吗?答案并不完全对,其实这个技术还不是那么新,这几个受害人碰到的不法分子,使用的都是一种可以远程获取手机信息的方式:GSM 短信嗅探(GSM Sniffing)。

2.原理

       拦截手机信号,分析其中的短信和通话内容。这听起来像是电影之中的剧情,但是其实做到这一点没有想象中那么难。我们都知道,手机作为一种无线设备,必须通用基站进行数据交换。无论是 2G,3G 还是 4G 网络,手机和基站之间本质都是通过无线电波进行通讯,而无线电波是向四周扩散的,理论上只要在手机功率发射电波的范围内的任何设备都可以接收到这些无线电波。

        而基站和手机之间约定的无线电波接收方法和格式就是通信协议。在国内:

        4G协议就是我们经常在状态栏上看到的 LTE(OFDM,UWB),它的好处除了我们能够感受到的网速快和延时低外,还有一个特别重要的优点:支持 VoIP 方式通话,也就是我们打电话时语音数据不仅可以走 4G 通道,也可以借助有线和无线网络传输,摆脱对移动信号的依赖。

        3G用的是 UMTS/WCDMA/TD-SCDMA,这个时期各家运营商的制式都不大相同,缺乏一个统一的标准,而且相比 2G 来讲 3G 创新的点并不多,速度也不能满足当时的需求。

        2G网络使用的,就是今天的罪魁祸首 —— GSM 协议。2G 网络架构是开源的,它本身传输数据时也没有加密,这就导致短信内容是明文传输[1]的,这就给不法分子提供了可乘之机。

        因为现在 2G 网络并没有完全被淘汰,所以干坏事儿的门槛就断崖式降低了。

        在硬件上,不法分子们经常改装的手机摩托罗拉 C118 在网上便宜到只要十几块钱就能买到一台,加上数据线等材料和工具,犯罪成本总共算下来也不过几十块钱。而软件上,他们也不再需要专业人士的帮助。只要借助 OSMOCOMBB 即可,它的全称为 Open Source Mobile Communications Baseband,是从硬件层到应用层彻彻底底开源的 GSM 协议实现项目,它的出现让人无需学习复杂的网络通讯和通讯设备的硬件知识,就能在 GSM 协议里面按照自己的需求随意更改,添加功能。GSM 嗅探就是添加的功能之一。

        不法分子只需要将修改过后的 OSMOCOMBB 编译进随便一台手机里面,软硬件结合,手机就可以变成一台反向获取附近基站发出的无线电波的设备,再加上一台电脑就可以轻松获取到周围空气中飞奔的短信内容。

        关于这方面的相关教程甚至被定义为「新手难度」,还很容易就能搜索到(数量可以说达到泛滥的地步了……)。

        有了这套设备后,不法分子的犯罪流程就容易理解了:

        地点随机,时间深夜:随机挑选一个地点作为目标,带着伪基站和修改好的 OSMOCOMBB 手机半夜过去。之所以大部分类型盗刷都发生在半夜,是因为这个时候大部分人都在睡觉,给不法分子操作时间最长,而且用户不能即使发现止损。获取号码,登录网站:使用伪基站获取附近手机的手机号码,然后拿着号码请求登录普通网站。过滤数据,验证号码:过滤 OSMOCOMBB 手机获取到的数据,如果拿到了网站发出的验证码即表明号码有效。号码有效,开始盗刷:接下来就是消费支付宝银行卡里面的钱,如果用户在一些网站上做过手持身份证验证,不法分子还可以登陆这些网站拿到手机主人的名字,身份证号和手持身份证照片。有了这些,大额贷款也可以申请了。

        这个过程,从头到尾都不需要受害人参与。

        为什么最近才开始出现众多受害者

        既然 GSM 嗅探利用的是 2G 协议的漏洞,不是什么新的东西,那为什么直到最近几天才「搞了个大新闻」呢?

    其实,这项攻击技术在很多年前就已经开始有人尝试。但是由于以下 2 个原因并没有成为一种流行的攻击方式:

        以前技术门槛更高:当时硬件成本和编译方法还没有像如今一样简单,这提高了准入门槛。直到 Github 上开源的嗅探项目越来越多也越来越 「小白」,才有更多的不法分子采用这种方法(千万别高看他们的文化水平,有能力自己修改 GSM 项目的人不会用它来犯罪)。以前实名制范围不够广:那时候还没有实名制,所以大部分服务都没有强制绑定手机号码,大多数用户依旧采用邮箱登录。以前在线支付尚未普及:加之网络支付和网银等在那时普及度不高,所以获得短信内容的意义不是很大。这种方法主要还是私家侦探等用于窃听私人信息。

        至于这个锅就要扔到GSM 不加密和手机验证码登录身上,手机验证码登录本身就是一个很不安全的验证方式,现在短信验证码能够做到的东西(转账,实名等)已经远远超出了它本身安全性的范围。

        另外,虽然 GSM嗅探听起来很吓人,但是这也不代表不法分子可以为所欲为,它也是有自己的缺点的。

        距离限制:不法分子只有在受害者手机在其基站附近才能实现嗅探,距离被严重限制。不过,如果不法分子提高成本,购买高性能天线的话则可以延长嗅探距离。

        形式限制:这种方法只能获取短信验证码,所以只能做和短信验证码有关的事。如果用户的个人信息保护地非常好那么不法分子能做的事情就少了很多(U 盾等实体二步认证硬件就是为了防范这种攻击)。

        当然这些缺点也不妨碍 GSM 嗅探成为最近危害性最大的攻击手段之一。[1]

        [1]引用自凤凰网

2>osmocom项目简介

        OsmocomBB(Opensource mobile communication Baseband)是国外一个开源项目,是GSM协议栈(Protocols stack)的开源实现。其目的是要实现手机端从物理层(layer1)到layer3的三层实现,主要进行2G网短信嗅探。目的是要实现手机端从物理层(layer1)到layer3的三层实现。但是目前来看,真正的物理层(physical layer)并没有真正的开源实现,暂时也没看到实施计划。只有物理层控制。因为真正的物理层是运行在baseband processor的DSP core上,涉及到许多信号处理算法的实现,而且还要牵扯很多硬件RF的东西。

         OsmocomBB项目始于2010年,到目前,还没有实时操作系统支持,没有GPRS的实现,以及移动管理(Mobility Management)的实现。

        目前来看,真正的物理层(physical layer)并没有真正的开源实现,暂时也没看到实施计划。只有物理层控制。因为真正的物理层是运行在baseband processor的DSP core上,涉及到许多信号处理算法的实现,而且还要牵扯很多硬件RF的东西。这项技术至少在2010年,技术已经成熟,2011年就有开源实现了。得益于OsmocomBB 的开源项目,使得我们用一台笔记本和很简单的硬件就能完成GSM sms嗅探。

        GSM加密采用A5算法。A5算法1989年由法国人开发,是一种序列密码,它是欧洲GSM标准中规定的加密算法,专用于数字蜂窝移动电话的加密,用于对从电话到基站连接的加密。A5的特点是效率高,适合硬件上高效实现。

        A5发展至今,有A5/1、A5/2、A5/3、A5/4、A5/5、A5/6、A5/7等7个版本,目前GSM终端一般都支持A5/1和A5/3,A5/4以上基本不涉及。值得注意的是,A5/2是被『故意弱化强度』的版本,专用于『出口』给『友邦』,2006年后被强制叫停,终端不允许支持A5/2。国内使用GSM的运营商没有使用加密技术。

3. 环境搭建

        测试了十余个系统版本,各种bug各种报错,一次环境配置带构建要一个多小时的操作,然后最后蹦出来俩红红的error恶心死人。经过一周的各种摸索,终于确定了稳定配置需要的各种包各种依赖各种乱七八糟。

系统:ubuntu-14.04.5-desktop-i386

其余可以按照这里的命令复制粘贴执行即可。

所有操作均在root权限下进行

#sudo -s

#apt-getupdta

#apt-get installaptitude#aptitude installlibusb-0.1-4 libpcsclite1 libccid pcscd libtool shtool autoconf git-corepkg-config make gcc build-essential libgmp3-dev libmpfr-dev libx11-6 libx11-devtexinfo flex bison libncurses5 libncurses5-dbg libncurses5-dev libncursesw5libncursesw5-dbg libncursesw5-dev zlibc zlib1g-dev libmpfr4 libmpc-devlibpcsclite-dev subversion libosip2-dev libortp-dev libusb-1.0-0-dev g++sqlite3 libsqlite3-dev erlang libreadline6-dev libncurses5-devlibtalloc-dev   wireshark

        理论上来说这么一大段可以直接丢进去,但是要保证依赖完整网络稳定有梯子,否则需要一个个安装。

2>配置talloc

#cd~/Documents

#wgethttps://www.samba.org/ftp/talloc/talloc-2.1.7.tar.gz

#tar -zxvftalloc-2.1.7.tar.gz

#cdtalloc-2.1.7/

#./configure

#make

#sudo makeinstall

3>build文件

#cd

#mkdirosmocombb

#cdosmocombb

#mkdir buildinstall src

#wget http://bb.osmocom.org/trac/raw-attachment/wiki/GnuArmToolchain/gnu-arm-build.3.sh

#cd src

#wgethttp://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2

#wgethttp://ftp.gnu.org/gnu/binutils/binutils-2.21.1a.tar.bz2

#wget ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz

#cd ..

#chmod +xgnu-arm-build.3.sh

#./gnu-arm-build.3.sh

        然后开始奔跑,执行完毕需要较长时间,我的电脑CPU型号为E5-1607,4C4T*3.0GHz,没有睿频,虚拟机分配了两个核心,20:29开始执行脚本,21:04执行完毕。开始执行之后,可以出去抽根烟,或者吃个饭,或者躺那小睡一会。

        等吃完饭,抽完烟,睡完觉,回来基本上就构建结束了。

        看到 “Buildcomplete! Add <YOURPATH>/bin to your PATH to make arm-none-eabi-gcc and

friends accessible directly.” 才算是构建成功。

    放一张build complete的截图以纪念这么多天以来无数次的重试

Build Complete!

  等到构建结束后,需要添加环境变量

#cd install/bin

#pwd           #复制打印出的完整路径

#cd ~

#vim ./.bashrc   #现在编辑~/.bashrc

#在最后一行添加

#export PATH=$PATH:/home/自己用户名/Documents/osmocombb/install/bin

4>编译libosmocore

#apt-getinstall libghc-gnutls-dev

#cd libosmocore/

#autoreconf -i

#./configure

#make

#make install

#cd ..

        有时候会遇到make找不到无法定位什么的,在./configura的最后,看一下报的什么错,一般都是No package ****found,百度搜对应包怎么装即可。

5>编译ismocombb 并设置自动更新

#cd osmocom-bb

#git checkout --trackorigin/luca/gsmmap

#cd src/

#make

然后需要修改几个

vim /home/vancir/Documents/osmocombb/osmocom-bb/src/target/firmware/board/compal/highram.lds

vim /home/vancir/Documents/osmocombb/osmocom-bb/src/target/firmware/board/compal/ram.lds

vim /home/vancir/Documents/osmocombb/osmocom-bb/src/target/firmware/board/compal_e88/flash.lds

vim /home/vancir/Documents/osmocombb/osmocom-bb/src/target/firmware/board/compal_e88/loader.lds

vim /home/vancir/Documents/osmocombb/osmocom-bb/src/target/firmware/board/mediatek/ram.lds

在上述文件中找到KEEP(*(SORT(.ctors)))之后再下一行添加如下代码:KEEP(*(SORT(.init_array)))

等全部修改完毕,再进入到 osmocom-bb/src 重新编译

#cd src/

#make -e CROSS_TOOL_PREFIX=arm-none-eabi-

4.硬件

硬件杜邦线玩烧了,等线到了再继续。

南部沿海遭遇台风,购买的硬件迟迟不能发货。

耐不住,再搓两根线玩起来。

硬件设备清单:

   1>摩托罗拉C118 某宝价¥10+运费¥10

   2> FT232  USB串口转换模块 某宝价¥29包邮。FT232相比来说比较昂贵,淘宝上也有CP2102转接线。

   3> TTL转换线,某宝价¥4+运费¥10,或者自己制作

   4> 一个运行着配好环境的系统的电脑¥无法计算的价格

        摩托罗拉C118要有电池,可以开机,有信号,某宝上很多商家卖的C118是没有电池的,需要自己买电池。官方给出了一个支持的手机设备的列表:

MotorolaC123/C121/C118(E88) -- our primary target

MotorolaC140/C139(E86)

MotorolaC155(E99) -- our secondary target

MotorolaV171(E68/E69)

SonyEricssonJ100i

Pirelli DP-L10

Neo 1973 (GTA01)

OpenMoko - NeoFreerunner (GTA02)

SciphoneDreamG2(MT6235 based)

使用的是摩托罗拉C118

        翻出了一个上古时期的2.5mm耳机,剪断,剥线,这种线芯是漆包线中间夹了尼龙线芯,剥出来后需要用打火机轻烤一下,注意火候,烤轻了去不掉线表面的漆层,烤过了铜线会氧化生成氧化铜影响导电性。烤过之后,拿张糙点的纸搓一搓。

        转换线的话,用的是2.5mm音频线,就很早以前的设备的常用耳机,现在手机上的耳机接口都是3.5mm的。把线剥开,分别接到FT32的GNU、TXD、RXD上面,因为大部分2.5mm耳机里面的线的颜色都不统一,所以就不提供颜色和线序了。

        转换模块使用的是稳定性比较高的FT232

FT232串口转换模块

    接好线之后,所有硬件就准备就绪了


垃圾佬的尴尬

关于线的连接,买的做好的线还么到,也没有制作杜邦线的工具,只能这样凑合了,拿夹子夹着。。。。。。

垃圾佬的生存是如此艰难,充电也是想办法解决的

垃圾佬充电法

没错。。两根线直接戳进去了。。小朋友们不要模仿,会有危险的

感谢王加杰老铁送的充电头。

补一张完整硬件图

C118→半截2.5mm耳机线→杜邦线→FT232→USB连接电脑。

这就是所有硬件及连接顺序了,确认联通,我们就可以开始实操了。

5.  执行

将硬件连接至电脑,如果连接正确手机有电的话,可以在虚拟机可移动设备中看到FT32

连接FT232至虚拟机

        接下来的操作需要新建终端的时候,前面打开的终端不能关闭

        打开终端,进入osmocom目录

#lsmod |grep usb

有这一项说明连接成功

看到这个说明连接成功

# cd osmocom-bb/src/host/osmocon/

#./osmocon -m c123xor -p/dev/ttyUSB0 ../../target/firmware/board/compal_e88/layer1.compalram.bin

然后点一下红色的开机键,记得是点一下,不是长摁,长摁会直接进入系统。

大概10秒左右可以完成

刷入固件成功

直到手机显示Layer1啥玩意的,说明烧固件成功

新建一个终端,执行命令

# cd~/osmocombb/osmocom-bb/src/host/layer23/src/misc/

#./cell_log –O

这个命令是扫描当前环境中的信道和基站

扫描到的基站信息 扫描到的基站信息

可以看到当前是扫描到了6个基站,3个移动3个联通

ARFCN字段的值就是该基站的信道编号。

新建一个终端,执行命令,开始嗅探,-a xxx 参数 xxx为要嗅探的基站编号

#./ccch_scan -i 127.0.0.1 -a 613

实际上我是测试了几次,找到了自己手机号所在的信道,于是对这个信道进行监听,方便看到效果

新建一个终端,执行命令,打开wireshark捕获4729端口的数据

#wireshark -k -i lo -f 'port 4729'

打开了wireshark,过滤器选择gsm_sms,然后接下来只需静静的等待即可。

给自己发了几条短信测试。

以上这几条给我自己制造的短息,

如果长时间嗅探不到信息,可以考虑换个信道试试。

6.如何防范

        说实话,面对这种绕过用户的攻击手段普通用户还真的没有太有效的防范方法。

手机定时开关机/飞行模式:晚上睡觉前关机或者打开飞行模式,这样手机不会连到伪基站,基站获取不到手机的状态信息就不会将验证码短信发送给手机,不法分子获取不到手机号码和验证码短信。

警惕信号好的地方掉2G 网络:这种攻击需要借助 2G 网络,有时候不法分子会用伪基站让手机掉到 2G 来拦截语音短信和联网数据。当你的手机在平时信号很好的地方突然掉到 2G 就要小心附近是不是有伪基站和 GSM 嗅探了。

 设置手机不会掉到2G 网络:用户可以在网络设置里面设置为只使用 3G,4G 网络。这样子的缺点是不支持 4G VoLTE 的手机会打不了也接不了电话,相当于自爆。当然如果手机还不支持 4G 或是 VoLTE 功能也该换了,否则别说 GSM 嗅探了,连伪基站攻击都防不了。

开通 VoLTE:开通之后加上手机支持,电话和短信都是走 4G 通道,不会使用 2G 网络。例如移动用户就可以发送KTVOLTE到 10086 开通VoLTE;联通用户可以发送VBNCDGFBDE到 10010开通。不过即使这样也防不了不法分子会用伪基站让手机掉到 2G,需结合前面两点使用。

专门使用一个手机号接收验证码:可以先准备一台手机,双卡手机的话可以准备一张手机卡,专门用于接收验证码短信。这个手机或这张卡平时可以不开机或者禁用。这种方法虽麻烦但也许是目前最有效的。

使用多重验证:支持多重密保验证的网站,让对方仅凭手机号也验证码没办法进入你的账户。

受到损失后及时报警查看附近监控:如果是看教程自己改手机那种小毛贼的话,也许能通过附近监控找到,但是如果是惯犯或者对于拿着巨型天线扫描的专业组织就没办法了。

考虑使用电信:因为电信在 2G 使用的协议是 CDMA,所以可以天然免疫 GSM 嗅探这种攻击方式。

相关文章

网友评论

      本文标题:GSM嗅探攻击的防御测试

      本文链接:https://www.haomeiwen.com/subject/iktinftx.html