开发者社区> 技术小牛人> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

GSM短信侦听的便宜方案

简介:
+关注继续查看
GSM短信侦听的便宜方案

侦听GSM短信常用的是OsmocomBB + C118方案,主要是用luca/gsmmap分支。使用ccch_scan这个程序可以把通信封装成GSMTAP发给本机,然后用WireShark接收GSMTAP并作协议解析和短信解码。国内部分黑客写了Python或Perl脚本,替代WireShark解码,并打印输出或保存到MySQL数据库。还有人写了Web前端,来提高易用性。

针对OBB只支持PCH在TS0的情况,有人改了firmware,分别支持PCH在TS2,TS4和TS6,编译生成了4个firmware。然后又有人把这拿来做生意,用软件狗加密后做成LiveCD出售,这就是网上所谓3信道,4信道版本的由来。

这种泛泛的侦听所有短信的做法效率很低,用处也不大。

而且,ccch_scan只是一个演示程序,本身不是为了侦听所有短信而设计的,功能流程上有很明显的缺陷:程序守听PCH,收到任何的Immediate Assignment就会切换Timeslot跟随通信过程,如果是短信就继续侦听并输出,是话音等就返回PCH继续守听。问题在于离开PCH再到回来这期间可能丢失多个Imm Ass。这就是为什么总有人反映用ccch_scan会漏接短信的原因。

真正合理的设计,应该是master/slave结构,多个master对更多的slave,每个master固定守在一个PCH,收到Imm Ass就分配给一个slave去跟随,slave处理完毕就返回待命。

比如,一个典型的处于闹市的移动S333站型的基站的一个扇面,在ccch_conf=110的情况下,需要4个master和大约16个slave,就可以完整记录所有短信。

这个设计,我还没有看到国内有人实现出来。国外黑客有个半成品,我拿来改写了一部分,除了短信也想把语音通话全部记录下来,现在还没改写完。

相比于简单粗暴的无差别侦听,我个人对于侦听指定目标的短信更有兴趣。其实,ccch_scan有个-t参数可以指定特定的TMSI,基本满足需求,我就直接改写ccch_scan增加了短信解码输出,这样不用借助别的程序,自己就能解决问题

那么问题来了,已知特定目标的手机号码,怎么确定目标手机当前camping在哪个基站,以及TA的TMSI? 如果你确切知道TA在哪儿,只要到TA身边不远拿出Nokia Net Monitor看一下当前ARFCN以及相邻的ARFCN,通常跑不出这几个ARFCN,很容易拿下。

如果只知道大概位置,就需要先确定TA的TMSI,再穷举出TA所连接的基站。TMSI是在LAC范围内有效的,Paging也是在一个LAC里的所有基站同步广播的。而一个LAC覆盖的物理区域还是很大的,在一个城市里不需要切换太多LAC就应该能找到目标的TMSI。

发现目标TMSI比较好用的是Silent SMS。我修改过的mobile程序,可以按特定时序向目标手机发送Silent SMS,然后在PCH上侦听,按照时序和Paging的次数来排查,最终确定目标TMSI。

确定了TMSI之后,继续切换侦听不同基站的PCH,直到在有的基站侦听到了对应的Imm Ass和短信内容通信,就可以确定了。如果基站的ccch_conf不等于000,还需要用目标手机的IMSI算出paging group从而确定该手机所在的TS。

再说说上行短信的侦听。因为手机功率低,手机天线效率低,所以你通常要离目标很近才行,300米以内最好。你所处地势越高,越空旷,接收效果越好。一定要用外接天线,你既然都能忍受带着一台笔记本电脑,为什么不能带好一点的外接天线?天线应该尽量在室外,增益越高越好,最好用定向天线:八木或锅。没有定向天线,就要天线长度尽量长,能有2倍波长以上最好。馈线尽可能短,尽可能高品质。然后说接收设备,C118一定要去除滤波器和换巴伦,RTL-SDR和别的SDR效果也都不错。

然后,你想主动些,利用手机短信验证码重置TA的各个账户,登录进去偷取或修改资料,最好这些短信只有你能收到,TA收不到,这就要用到拦截短信的办法。

要了解短信拦截,先要谈谈鉴权。

通常运营商在Mobile Oriented业务上是要鉴权的,因为他们要计费。而Mobile Terminated业务因为是免费的,配置上就比较松,可能没有鉴权。

如果你运气比较好,还能发现一些基站在MO业务上只要求IMSI来鉴权。这就意味着你可以spoof任何手机号码。只需要去网上的HLR Lookup服务查一下该手机号对应的IMSI就可以了。

如果你通过特殊办法获得了TA的KI,只需要把TA从网络上detach了,你再attach就可以替代TA了。

收短信属于MT业务,一般情况下,联通大部分配置是不要鉴权的,或者简单鉴权比如IMEI。移动老的基站不少也是不要鉴权的,新基站大部分都要SRES鉴权。

一个LAC里不同的基站配置可能不一样,需要侦听来确定。

短信拦截的原理基于race condition,即把响应Paging及收短信的代码从Layer 23搬到Layer 1,这样你就在GSM协议栈上比TA快了一倍,所以你就能先于TA代替TA响应paging和收取短信。

这个功能国外黑客有演示代码,但是bug很多,连LAPDm协议流程都有问题,在国内运营商环境没法正确运行。当然,我已经做了必要的修改。

目前,我正在做的GSM的MITM的实验,即目标手机和基站之间插入一个自制基站和一部攻击手机,诱导目标手机接入自制基站,用攻击手机仿冒目标手机接入运营商网络,从而实现短信的拦截。这种方式不管运营商有没有鉴权,我们都能在不惊动目标的情况下实现短信拦截。

3G和4G短信的侦听是也是要以GSM为基础的,如何实现以后再单独发帖讲。


本文转自 K1two2 博客园博客,原文链接:http://www.cnblogs.com/k1two2/p/5336574.html  ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ESP32-C3入门教程 基础篇(七、LEDC — LED PWM 控制器)
测试第7课,补一补基本的PWM控制器的测试。 说明一下,ESP32-C3没有MCPWM硬件,所以测试只有LEDPWM, 如果想用ESP32-C3控制电机,可以考虑使用 RMT,后期有机会测试一下。
40 0
Java Stream 流式编程怎么写?
Stream它并不是一个容器,它只是对容器的功能进行了增强,添加了很多便利的操作,例如查找、过滤、分组、排序等一系列的操作。并且有串行、并行两种执行模式,并行模式充分的利用了多核处理器的优势,使用fork/join框架进行了任务拆分,同时提高了执行速度。简而言之,Stream就是提供了一种高效且易于使用的处理数据的方式。
38 0
JavaWeb - 正则表达式之手机号校验(移动、联通、电信)
JavaWeb - 正则表达式之手机号校验(移动、联通、电信)
147 0
阿里云服务器Oracle开放1521端口教程(安全组配置)
在阿里云服务器上安装Oracle数据库,需要开放1521端口,在安全组设置即可开放云服务器1521端口
422 0
【java】Stream的使用
首先,给大家推荐一个好的地方:http://ifeve.com/stream/ 可以好好学一下 接下来,今天要删除数组中的某些元素,想到了之前用过的这个JDK8的Stream   1.Array转化为Stream并进行筛选 【有个坑】:数组转化为Stream有两种方式   1.Stream.of(数组)   2.Arrays.stream(数组)   区别:两种都支持引用数据类型,但是如果是基本数据类型的话,请选择第二种,所以妥善期间使用第二种比较合适。
976 0
5723
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载