伪基站识别技巧(一) - K1two2
不知道为什么,感觉伪基站又有些卷土重来的趋势,不想废话,先分享几个伪基站识别技巧,供拍砖交流。
0×01 了解伪基站
前几年协助某些部门做过伪基站的电子取证分析,在对批量伪基站设备和软件平台的分析时,发现虽然大多数伪基站使用者,在设置参数前都会先对周边基站的开放频点、MNC、LAC、CI等信息进行扫描,但有些选项却有趣地带有明显的掩耳盗铃风格,比如这个基站别名。如下图所示,出于避免怀疑的心理,大多数伪基站的别名都会设置为“应急通信”……这算是一叶蔽目么?
伪基站原理什么的有很多人在讲,就不重复废话了,下图里是伪基站平台上某个号码的已发送对象与欺诈短信数量,可以清晰地从IMSI列表上看到周边出现的手机被依次强制拉入。
和木马的自毁设计一样,既然国内伪基站基本上都基于OpenBTS开源项目,所以那些开发的guys也都会设计平台在指定时间或者通过预设操作,试图在后台销毁一切已发送数据。不过明显地,很多人都低估了现在的电子取证能力,下图里是当时鉴定组里某帅草在Ubuntu下提取的已删除log数据,这台伪基站里同类文件有数万个。为什么要“毁尸灭迹”?当然是销毁罪证喽,但关键点是,目前在国内,发送条数也是量刑的重要参照依据,这下明白了吧。
0×02 基本判断
最基本的判断完全是基于表面化的异常情况判断,不能说一定是伪基站所致,但应该引起警觉或者可以做点测试打消怀疑,以下判断依据仅作参考:
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值差距很大的基站,除了真正的应急通信基地车,很可能就是伪基站。
大致就这么多,下面再看看其它的技巧。
0×03 基站定位辅助判断
一提到基站定位,估计有人就会想到什么三角、多点定位法,一般而言,必须获取到基站的三个参数(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什么的,总之以后别再为基站数据来烦我:
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里面这个最明显的大坑是什么。
扯远了,回到我们的判断技巧上,既然一个正规的基站应该是提供了不少于3个频点的接入,且每个频点上支持8个Slot(虽然不一定每个有用)。那么技巧来了,只需要用工程手机或者扫频软件查验下当前基站的可用频点数量,并切换下不同的频点,便知基站是是真假。深入点的还可以切换时隙Slot0~Slot7进行抓包,就会发现和正规基站完全不同的情况,细节以后找机会描述。
0×04 短信中心号码识别
基本思路是对接收到的常见短信/彩信进行解析,提取短信服务中心号码,通过对短信服务中心号码的判断,来识别是否为伪基站发送。各个地区都有自己的信息中心号码,短消息是无法发送成功的。对于中国移动,短消息中心号码以+861380开头,紧接4位该号码所在的地区码(电话区号),比方0571(杭州),最后一般是500。对于区号小于四位的地区,地区码则在第四位补0,例如北京0100。
如下图就是直接在Android下查看SIM卡对应的短信中心号码,如下右图显示的短信中心号码是+8613800290500,依照定义,该号码是陕西的短信中心号码。
所以,在遭遇到伪基站的信号劫持后,短信中心号码失效,无法再正常接收和发送短信,而收到的强制推送的垃圾、钓鱼短信,也不再是通过预设的短信中心号码。这需要很简单的一个查询参数就能判断是否伪基站。
0×05 基于IP判断
在手机正常收到彩信,我们点击读取彩信内容时,实质上是访问到彩信中包含的一个IP地址。下图是标准的基于MMSE架构的彩信,可以看到彩信中包含的实际地址。
而能查看彩信内容也就是访问该IP地址的前提,简单来说,自然就是手机本身也持有一个已注册的合法IP地址,这个地址可以通过读取手机状态信息获得。需要说明的是,这个IP并不是固定的,将随着手机的重启会更新。如下图所示,同样的,也能在手机的移动梦网MMS设置中看到代理网关的IP地址。
思路来了,只需要从IP上开展下判断就可以直接识别出伪基站。可以开展的角度有IP地址段区间(192开头的肯定有问题了)、IP开放端口扫描识别等等…….自己琢磨吧。
0×06 构造特殊短信
篇幅太长了,再收缩一下。再换一个麻烦点的思路,该思路适用于复杂的伪基站劫持环境,比如被彻底劫持了语音和短信通信的场景。
根据短信SPEC的规定,短信分为class0,class 1,class 2 和class 3四种,具体描述如下表所示:
其中,class 0 短信是不用用户确认就直接显示的短信,平常的普通短信多为class 1,会存储在手机上,而SIM上的存储空间是用于存储class2短信的。用户只能手动的将手机里的短信copy到SIM上。
看到这里,明白思路了么?就是如果疑似被困在某个伪基站下,可以发送除Class1类型之外的特殊短信确认下,目前没有业务架构支撑的伪基站是无法识别这些类型短信的,
悄悄说声,其实也可以利用下伪造号码向任何手机发送短信漏洞,恩,在线漏洞库里有很多,参考下就明白。帮人帮到底,Google用inurl参数配合关键字smssend也可以找到很多短信发送后台页面。
0×07 对业务的威胁
前年参加TSRC时就已经在提伪基站识别,当时TX已经在考虑伪基站对QQ的影响,这个其实对电商业务的威胁也挺明显,只是目前造成的危害还没那么夸张。
威胁1:线上实时交易威胁。可能整个交互被劫持,当然,难度很大,建议在启动交易前先进行“通信环境安全检查”,确保当前没有在伪基站或者疑似被监控被劫持的通信网络环境下,确保交易的顺利开展。
威胁2:虚假短信欺诈威胁。在线上交易过程中,典型的交易短信提示、验证码短信提示、账户修改短信提示、余额不足短信提示、账户密码错误短信提示……等等,实在太多地方可以做手脚,当然,这些虚假短信既可以独立出现(比如附上一个钓鱼网站),也可以配合一系列复杂的钓鱼手段出现(比如虚假站点的验证短信,增加真实感)。从理论上而言,对一个小区2栋居民楼的大部分用户的欺诈短信发送,总会有上钩的。
威胁3:移动袭击难以锁定。目前已经破获的大部分伪基站案件中,除了早期那些放到昌河面包车里的“僵尸伪基站”外,嫌疑人都是边开车边开动伪基站,半小时甚至更短时间就会离开,这样很难第一时间锁定来源,也就造成了欺诈事件的难以破获。
威胁4:难以察觉的降级攻击。一般而言,攻击者若是为了获得某个区域一片人群的交易数据,完全可以用干扰器故意打掉或者伪基站劫持的方式破坏掉4G及3G网络,使得当前网络通信环境不得不从高速4G降级到慢速的2.5G,在无法忍受慢速的情况下,很多人就会选择附近的商业或者免费的WiFi热点,这样,提前部署的钓鱼WiFi就可以大量收获了……这些实现起来真不难。
威胁5…..略
0×08 小结
去年有机会和公安部“打击伪基站领导办公室”的一位负责人交流:虽然在过去两年,公安部严打已经打掉了绝大多数伪基站的上下游,但是技术一直在进步,比如OpenLTE开源项目中的一些架构、软件无线电的新应用、配合OpenIMS业务架构等等,都很可能被用于新的伪基站技术……这些技术将使得伪基站更小更强大,而且,低成本高性能一直是伪基站开发者追求的目标之一,撇去黑产收益方面不说,单纯从技术角度研究,还是蛮有意思的。