42

打造一款伪基站防御利器(一)

 5 years ago
source link: https://www.tuicool.com/articles/7FnM7vz
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

虽然目前国内伪基站相比于前几年来说已经少了很多,但还是有少量流动的,或者一些边境区域会受到影响。以往的打击伪基站手段都是采用大数据分析,发现后出警抓捕。但对于流动的,或者跨境的,就比较难办了。 基于这种现状,2017年开始跟某地运营商开始研发有防御伪基站功能的设备。

即设备所在范围内,出现伪基站后,设备对伪基站展开攻击,令伪基站失效。

M7vammB.jpg!web

思路

要实现跟伪基站的空中对抗,早期的实验条件,当然少不了C118和OsmocomBB,C118和OsmocomBB就不多说了。

第一阶段,尝试短时间内发送大量RACH请求去消耗伪基站资源。

首先搭建实验环境,通过BladeRF搭建了一个YateBTS。

ryYz2uY.jpg!web

YateBTS搭建起来后,把2台手机设置到2G模式下,接入YateBTS,成功的拨通了两台手机后,实验基站即搭建成功。接下来就是利用OsmocomBB,修改它的代码,发起RACH dos攻击。

yAjQ3uZ.jpg!web

要观测RACH的效果,少不了Wireshark这个工具。从Wireshark抓包的结果上来看,C118跑起修改过的OsmocomBB后,信令里已经出现了大量IMM REJ,这个时候可以说,YateBTS已经拒绝服务了。

这个时候,其他手机虽然还能检测出YateBTS信号,但已经无法完成位置更新。也就是说,如果这个是一个伪基站,它在我们的RACH攻击下,已经彻底失去吸入用户的能力。

第一阶段,实验环境测试我们已经觉得达到了效果,于是打算找运营商测试。在运营商配合下,找了个实验小区,对该小区频点进行RACH测试,每秒约发起15个RACH请求,发现很快运营商的基站就出现IMM REJECT了,这个结果,我们已经对该方案的可行性已经觉得OK。当天测试了十几分钟后,发现小区关闭了,后来沟通发现,原来监控人员发现小区指标异常,所以关站了。

当时还没有伪基站的设备,在运营商配合下,联系了当地的执法部门,把以前缴获的伪基站设备进行实际测试。 当时也是第一次看到了真正的伪基站设备,一台笔记本和一套射频设备。

开启真正的伪基站后,大家的手机关闭4G,手机马上收到了伪基站发来的短信。这个时候,在伪基站上再新建了一条测试短信,开始对伪基站进行RACH攻击,大家再关闭4G。大伙还是挺激动的,因为第一次真正的测试,但当大家手机陆续响起短信声音,就知道情况不妙了。

果然,大家还是收到了伪基站的短信。 通过测试程序,C118还是快速发起RACH,但伪基站跟之前测试的不一样,发现并没有IMM REJ的消息,全是ASS的,也就是说,跟之前的测试很不一样。就这样折腾了一个下午,发现这个方法,并不能让伪基站停止工作,问题不知道出现在哪。

没办法,只能继续寻找测试环境。后来在强大的闲鱼上,买到了一块SSRP,和一套程序,回到实验环境继续测试。

EV3M3uz.jpg!web

东西大概就这样。我一直以为用这些的都是搞伪基站的,后来才发现,人家不是用来做伪基站发短信,而是用来做个伪基站,去检测车里面是否有GPS。我在想,目前还有那么多2G物联网设备,协议可能都没加密,用这种部署个伪基站把物联网设备吸入后抓包会怎样?

硬件和软件都找到后,再进行测试。伪基站程序,都是一套OpenBTS,加一个网页控制端。发现黑产还是存在黑吃黑的情况,就是同一套底层程序,界面换一下,说支持4G,说多线程,好多选项其实只有界面,没有实际用途,就是骗人的。还有就是发送数量,实际发送1条,会随机显示发送了十几条(意思是我这套设备牛啊….)。早期这些发送数量被量刑的,不知道算不算冤了。

UzI3qmz.jpg!web

开始RACH测试后,通过OpenBTS的控制台,可以看到,SDCCH信道的容量在60,然后当前攻击状态下,用了51条信道。 想当然的我打算增加多几台C118来加大1秒内发送RACH数量,但结果,测试手机还是会收到伪基站的短信。思路一下陷入僵局。

大概有1个月的时间没有进展,为了回家晚上也能做测试,SSRP在办公室,晚上就用2台C118做实验环境。其中一台跑OpenBTS当小基站,另外一台当客户端。

当时的思路怀疑,是否PC上跑性能有瓶颈,毕竟usb转串口的速率不高,GSM对时间精度又比较敏感,所以,就打算把攻击代码,从PC上直接移植到layer1的固件里,这样省去了PC上的时间。

正是这样不断的调试,一天凌晨,改了很多次的固件测试失败后,最后一次测试打算上床睡觉。这次测试,发现手机跑起来后,另一端的OpenBTS崩溃了!再同样的测试了几次,几次OpenBTS都是崩溃。这次激动得当晚都睡不着觉。像跟做iOS逆向一样,有时成功就是差最后一点的坚持,技术是基础,不断尝试,当然还要靠点运气。

第二天赶紧跑回办公室,拿伪基站的设备进行测试,发现原本发送中的任务,被攻击了一次后,任务被暂停了!!ps看了一下,OpenBTS的PID不一样了,证明进程被重启过!!这下跟哥伦布发现新大陆一样兴奋。漏洞的细节就不方便公布了。

总的来说,是触发了OpenBTS的某个漏洞导致进程崩溃重启,OpenBTS还是有很多漏洞的。伪基站的OpenBTS重启过程中,大约会有5秒时间信号是消失状态的,如果信号出现,马上又对伪基站进行攻击,伪基站就会是不停的重启状态。这样不稳定的信号,达不到正常用户小区重选的阀值,就不会落入伪基站中。

第二阶段

得到了伪基站的漏洞后,第二阶段就是怎样设计硬件,能够方便部署。 C118+笔记本的方式很难做成产品模样。OsmocomBB不就是一个linux下的软件么,移植到树莓派上!

于是,陆续有了以下的“产品”原型:

vURzUjF.jpg!web

uimYv2b.jpg!web

树莓派体积还是大了点,又陆续找到了一款合适的ARM板,自己用三极管和GPIO设计了个电源开关,画了个PCB,硬件0.1版本出来了。

eiaAFjz.jpg!web

2017年底,硬件0.1版本实地测试,运营商安排测试人员,用专门的伪基站侦测仪器现场测试。该地市发现的伪基站信号,用伪基站侦测仪能不断收取到伪基站短信。启动攻击设备后,伪基站侦测仪检测到的伪基站信号时有时无,与预期一致。被攻击过一次的伪基站,即使停止攻击,也不会收到伪基站短信。

RbaqMvi.jpg!web

FnMbEnU.jpg!web

Mb2A7zb.jpg!web

经过实测后,硬件能够很好工作,剩下就是怎样把硬件不断改进的过程,上图就是1.0版本的硬件(加入了4G模块,回传工作状态)和基站检测仪原型,检测伪基站方向。(未完待续,下一篇会介绍电路原理及改进过程)

OsmocomBB可玩性其实还有很多,除了基础的sample里的几个,还可以用来单手机多待当多路短信猫使用。或者把SIM卡通过网络鉴权,可以机卡分离异地登录等。

*本文作者:超雪团队2019,转载请注明来自FreeBuf.COM


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK