APP检测GSM伪基站方案探索

安全
GSM伪基站如果用于钓鱼,危害就会很大。所以我就有一个想法,希望在APP层面检测伪基站。因为伪基站隐蔽且容易流动,如果不在手机端检测伪基站就不能及时发现异常。

GSM伪基站如果用于钓鱼,危害就会很大。所以我就有一个想法,希望在APP层面检测伪基站。因为伪基站隐蔽且容易流动,如果不在手机端检测伪基站就不能及时发现异常。

虽然APP与伪基站对抗不在一个层级,但一定可以在APP层找到破绽——毕竟,伪基站要做到100%模拟正常基站难度也是很大的。比如通过OpenBTS、GNURadio和USRP实现的伪基站,默认都有好多独有特性。

 

 

 

 

这就有点类似在应用层检测系统的rootkit,虽然困难,但也并非完全不可能。我记得有一个简易的检测办法,本地看系统开放了哪些端口,然后远程扫描开放端口,两个数据不一致,那就是有rootkit了。

可见,100%的虚拟现实是非常困难的。那么回到这个场景,伪基站的破绽在哪里?

尝试

第一步很容易想到从OS层面能拿到的基站信息入手,看看获得的信息能否有效甄别假基站。

Android SDK里面提供了类android.telephony.gsm.GsmCellLocation来获取基站信息,可以得到Cid、Lac、Psc、hashCode,不过这些信息都很容易随意伪造,看来得换个思路。

接下来我们又想到,在伪基站里电话和短信是不通的。虽然伪基站可以实现劫持,但是我目前见过的网上公开案例来看,伪基站都没有做这个事。拨打电话这个操作太重,我们就在APP层发短信。如果网络信息变化后,短信不能正常发出就说明可能存在伪基站。

发短信会涉及到费用,感觉不是很靠谱。不过我们想到给运营商号码发是免费的,比如移动就给10086,联通就给10001,电信的2G不是GSM,就先不管了。

于是,我们设想的方法是一旦发现基站信息发生变化,APP就发送一条短信给运营商,运营商收到后会答复,我们就看一定时间内是否有固定的回复内容,如无就认为当前接入的是伪基站。

不过后来考虑到收发短信权限太敏感,同时Android4.4及以后版本对APP的短信权限做了更严格地控制,所以这个方案我们也放弃了。

最后我们聚焦到网络上。APP一旦发现基站信息发生变化,就调用GPRS获取IP,如果得不到IP,就认为是伪基站——当然伪基站也可以搞个DHCP分配IP,如果发生对抗,我们还可以继续从IP的范围、网关IP等信息再来深入对抗。

demo演示

老规矩,在Android上实现了一个demo,以下是测试效果图。后面这个demo会放到腾讯安全应急响应中心官网“实验室”栏目,欢迎大家关注。

 

 

一些想法

这个方法还没有考虑周全。比如漫游到境外的情况;还有,目前见到的伪基站都是发了短信后迅速将用户踢出网络,用户则会重新回到正常网络,整个过程只有短短几分钟,所以实际检测效果还待测试。

如果有安装量大的手机终端软件,倒可以把手机附近的基站信息都上报到云端,如果伪基站出现,或许就可以及时发现。

后记

仍然感谢其他小伙伴popey、HuangJacky和riusksk的工作。

最后,一个有意思的想法是,如果这个“现实”世界是在一个“虚拟机”里运行的,你能从“应用层”找到破绽吗?

责任编辑:蓝雨泪 来源: TSRC
相关推荐

2014-06-12 09:26:24

2014-04-30 17:43:36

2016-04-07 18:43:16

2015-04-24 10:11:42

无线安全伪基站

2015-04-02 09:43:17

2016-08-10 10:30:38

2022-06-24 08:01:07

CSScontent元素

2013-05-14 09:21:30

LTE基站天线

2014-11-17 09:43:10

2015-10-15 11:11:17

2014-03-06 16:56:14

2009-08-07 19:24:11

全网解决方案WANA移动网络华为

2018-03-15 10:14:47

2009-02-20 09:53:00

华为移动宽带

2013-03-04 17:36:23

华为eLTEGSM-R

2015-03-30 00:52:56

2010-08-09 12:39:37

2012-11-26 14:45:41

2012-11-07 11:14:35

2021-08-26 12:31:40

APP安全网络安全网络攻击
点赞
收藏

51CTO技术栈公众号