不知道为什么,感觉伪基站又有些卷土重来的趋势,不想废话,先分享几个伪基站识别技巧,供拍砖交流。
0x01 了解伪基站
前几年协助某些部门做过伪基站的电子取证分析,在对批量伪基站设备和软件平台的分析时,发现虽然大多数伪基站使用者,在设置参数前都会先对周边基站的开放频点、MNC、LAC、CI等信息进行扫描,但有些选项却有趣地带有明显的掩耳盗铃风格,比如这个基站别名。如下图所示,出于避免怀疑的心理,大多数伪基站的别名都会设置为“应急通信”……这算是一叶蔽目么?
伪基站原理什么的有很多人在讲,就不重复废话了,下图里是伪基站平台上某个号码的已发送对象与欺诈短信数量,可以清晰地从IMSI列表上看到周边出现的手机被依次强制拉入。
和木马的自毁设计一样,既然国内伪基站基本上都基于OpenBTS开源项目,所以那些开发的guys也都会设计平台在指定时间或者通过预设操作,试图在后台销毁一切已发送数据。不过明显地,很多人都低估了现在的电子取证能力,下图里是当时鉴定组里某帅草在Ubuntu下提取的已删除log数据,这台伪基站里同类文件有数万个。为什么要“毁尸灭迹”?当然是销毁罪证喽,但关键点是,目前在国内,发送条数也是量刑的重要参照依据,这下明白了吧。
0x02 基本判断
最基本的判断完全是基于表面化的异常情况判断,不能说一定是伪基站所致,但应该引起警觉或者可以做点测试打消怀疑,以下判断依据仅作参考:
1)通话中信号突然中断。
在排除周边信号不好或者存在信号死角之外,很可能是被伪基站强制“吸”走,于是信号被“切断”。典型现象就是手机信号从满格跌落到无信号,然后又快速回升。在伪基站上看到的效果参见上图的IMSI列表。
2)通信网络模式改变。
现在大家用的都是4G或者3G网络,正常情况下载手机屏幕顶上右侧会出现一个阶梯状信号格数提示,一般会显示“4G”或“3G”,当突然改变为“GSM”、“G”或者不再显示具体网络类型时,就意味着遭遇到强制“降频”,即从4G(仅举例:1880-1900MHz)被拉到了GSM(仅举例:890-990/935-954MHz)。
这是由于伪基站主要还是基于GSM制式,无法对4G网络支持所致。当然,对于公安技侦部门来说,在特殊场合监控时某些设备可能也会导致同样效果,这里就不再解释。好吧,若是非常幸运遇到了CDMA制式的伪基站……当我没说。
3)无法接收短信接打电话。
肯定的,一旦被伪基站“劫持”,手机的所有通信就只能与伪基站交互,由于伪基站无法与合法基站进行鉴权等交互,所以就相当于处于“孤岛”模式,自然所有对外联系都被中断。这就解释了有时候信号格数还行,但却打不出去电话接收不到短信的原因,特别是对于一些就处于3G/4G信号薄弱的区域。
4)运营商信息。
在Android下,可以通过查看手机电话卡(就是SIM卡)状态信来查询当前网络的运营商相关信息,在疑似被伪基站劫持时,打开查看便知。一般伪基站在此处的信息非常稀少,比如网络名称标识下“中国移动”就会显示为“应急通信”,甚至有时候会放一个相似的词,比如之前就见过“中国挪动”,也不知道是不是恶搞。
5)异常LAC和CID值。
这算是以前对早期伪基站的一个判定方法,一个区域内出现异常数值的LAC或者CID值。原理是伪基站一般为了减少运营商注意,会刻意先探查周边的基站LAC和CID参数后,然后给伪基站设置一个绝对不会出现冲突或干扰的高位数值。同一个运营商下的基站设备肯定也要考虑这个,但正常是不会设置差距较大的数值,所以在移动探查中,一旦出现一个比周边LAC、CID值差距很大的基站,除了真正的应急通信基地车,很可能就是伪基站。
大致就这么多,下面再看看其它的技巧。
0x03 基站定位辅助判断
一提到基站定位,估计有人就会想到什么三角、多点定位法,一般而言,必须获取到基站的三个参数(MNC、LAC、CID)才能进行基站定位,拿到这三个参数就可以借助基站网站对此基站的位置进行定位,直接地图上显示出基站的位置。不过这次我们是识别伪基站,并不是为了精确锁定伪基站位置,所以还是简单粗暴点。
作为判断伪基站真伪的技巧之一,说出来很简单,就是获取下当前疑似伪基站的LAC和CID,直接到基站数据网站查询该基站是否真实存在,没有入库的即为伪基站:)
3.1 基站数据库
在此之前,我们先了解下一个标准的基站数据库应该具备的内容,也顺便解释下刚提到的MNC、LAC和CID。
3.2 基站定位数据查询实例
对于玩过OsmocomBB和Airprobe的人来说,通过对空口数据的抓包,可以很轻易地获取到附近基站信息。
从上图中提取LAC和CID值,到相关的基站查询网站,输入LAC和CID就能立刻查到该基站的具体物理位置。深圳的同学对下图这个地址是不是很熟悉?嘿嘿,这个就是深交所附近的基站位置。
通过对请求数据的分析:
请求地址:http://v.juhe.cn/cell/get
请求参数:
mnc=&lac=9332&cell=3612&hex=&dtype=&callback=&key=0cd0f9b15c29099bcab50aa8b955b63b
请求方式:GET
返回内容如下图:
由上面查询的内容和返回的字段,再对照标准基站数据库信息结构就可以看出,虽然有点区别,但一个基本的基站数据库具备内容大致一样:
MCC:移动国家号(MCC)由三位十进制数组成,它表明移动用户(或系统)归属的国家
MNC:这里厂商定义为移动基站:0,联通基站:1。各个厂商都会进行调整。
LAC: 为了确定移动台的位置,每个GSMPLMN的覆盖区都被划分成许多位置区,位置区码(LAC)则用于标识不同的位置区。
CELL:就是CELL ID,这里厂商为了方便简化为CELL。
LNG:地图坐标纬度
LAT:地图坐标经度
O_LNG:谷歌地图坐标纬度
O_LAT:谷歌地图坐标经度
PRECISION:精确度
ADDRESS:预设地址描述
好了,常见基站定位/基站数据查询网站扔出来了,支持开发接口、API什么的,总之以后别再为基站数据来烦我:
1) http://www.cellid.cn/
2) https://www.juhe.cn/d/cellmap/gsm.php
3) http://www.jizhanyun.com
3.3 更简便的获取LAC与CID
对于稍懂通信技术的人而言,工程手机是个实时获取基站信息的好选择,用伪基站的都会配一个刷过的NOKIA老式手机,当然,刷下C118也能用,不过对于现在人手一个的智能手机而言,也有些APP能够更方便地获取到LAC和CID信息,比如这款非常有名的GSM Signal Monitoring(国内市场:GSM信号监测专业版),支持GSM和UMTS网络,能够自动收集并显示周围基站的小区ID、LAC、信号强度等级的信息。其它APP用得少就不介绍了。
恩,下图就是这款工具的日志,哈哈,能查到我的位置不?
频点列表
在对基站扫频时,正常情况下,从实用性上考虑,一个G网的基站至少提供3个以上的频点支持(请不要拿偏僻基站的例子反驳,谢谢),繁华地段的基站甚至会开放7、8个以上的频点,同时部署密度会增大,而每个频点上的8个时隙(Slot)也会全部开放接入。好,扫盲结束,我们直接从数据包上看看实际的频点列表是封装在GSMTAP协议中,具体是下面这样的:
而在默认情况下,虽然OsmocomBB可以很容易地抓取到任意频点Slot0的一些数据,但是严重的丢包率还是使得该开源项目用于实战的可行性降低了很多。关于时隙的概念大家自行查资料吧,就会明白OsmocomBB里面这个最明显的大坑是什么。