设为首页 - 加入收藏 - 网站地图 SecYe安全 Www.SecYe.Com - 国内网络信息安全IT技术门户网
当前位置:首页 > 网络安全 > Web安全 > 正文

APP检测GSM伪基站方案探索

时间:2013-12-31 16:00 来源:未知 作者:www.secye.com 阅读:

引子

 

上一篇《GSM短信窃听解决方案设计与实现》发表后,得到了一些专家的批评指正,非常感谢RadioWar团队的高手h4k_b4n(还记得这个ID吗?他是当年名动天下的安全团队BCT的创始人哦)和中国移动电信研究院的专家老王,他们的指点使我们更了解这块领域。

 

 

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会放到腾讯安全应急响应中心官网“实验室”栏目,欢迎大家关注。

 

 

 

一些想法

 

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

 

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

 

后记

 

仍然感谢其他小伙伴popeyHuangJackyriusksk的工作。

 

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

 

本文来源:SecYe安全网[http://www.secye.com] (责任编辑:SecYe安全)

点击复制链接 与好友分享!

顶一下
(0)
0%
踩一下
(0)
0%