APP检测GSM伪基站方案探索

来源:http://www.postsclassifieds.com 作者: 2017-09-20 11:46

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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