SeaGlass:手工搭建伪基站监控系统
“伪基站”即假基站,设备一般由主机和笔记本电脑或手机组成,通过短信群发器、短信发信机等相关设备能够搜取以其为中心、一定半径范围内的手机卡信息,利用2G移动通信的缺陷,通过伪装成运营商的基站,冒用他人手机号码强行向用户手机发送诈骗、广告推销等短信息。近两年BAT3在国内搭建了强大的伪基站监控系统,在打击犯罪上贡献不少。
最近数年来,随着伪基站、黄貂鱼(IMSI-catcher)技术的快速发展,大家的手机很容易被这类设备信号劫持。它们可以精确定位手机、窃听通信、发送垃圾信息甚至远程植入木马。
IMSI-catcher
近期泄漏数据和公开请求记录显示,美国政府在巴尔的摩、密尔沃基、纽约、塔科马、阿纳海姆、图森等多个城市的执法行动中使用过黄貂鱼,放在机动车或者飞机上来识别和定位嫌疑犯。这类强大的监控装置长期处于司法监督空白区域,为了提高透明度和问责制度,我们应该关心谁使用了、用了多久、何时使用等信息。SeaGlass是由华盛顿大学的安全研究人员设计的系统,用于观测城市中的伪基站、黄貂鱼的活动情况。SeaGlass硬件以上为背景介绍,下边我们来看SeaGlass的硬件部分,主要是传感器。传感器收集所有基站信号数据并上传至服务器,它利用算法去识别可能存在的黄貂鱼信号。
传感器部件
- 1.Raspberry Pi电脑
- 2.蜂窝调制解调器扫描细胞频谱
- 3.全球定位系统
- 4.诱饵手机
- 5.移动热点上传数据
传感器部件
SeaGlass传感器采用现成的零件,装在箱子里,并安装到车子的后备箱。当车子在城市行驶时,传感器会不断收集和上传发射塔信号数据到云端。
这些传感器比手机更具有优势,因为它们有专门的蜂窝扫描组件和外部天线,用于接收到更多的信息。虽然手机上装个应用也可以看到当前连接基站的有限信息,但传感器一次可以观测数百个无线频道和接收数十个广播属性。
全市收集
我们在西雅图、密尔沃基两个城市内进行尝试,在两个月内收集了数百万次观测。
西雅图和密尔沃基的测量范围如下图,热图颜色表示每平方公里的测量次数,动图显示两个月内扫描到的所有基站位置。
西雅图(图像放大到市中心)
密尔沃基(图像放大到市中心)
每个基站都有不同位置的数百或数千个测量结果,这让我们可以准确地对潜在基站进行建模。在西雅图共找到了超过1400个不同的基站,在密尔沃基找到了600多个。
西雅图Lake Union地区某个基站在两个月内周围信号的变动如下所示:
红色为较强信号,蓝色为弱信号
通过对每个基站的典型行为进行建模,SeaGlass能找出存在异常行为的基站。
算法
黄貂鱼的监控行为非常隐蔽,但如果你有足够密度的城市蜂窝网络分布图视图,便能够检测到相关的异常行为。
我们设计了检测方法,可以在项目收集的数据上自动标记异常点。SeaGlass项目对这几个异常特征进行检测:
欺骗信号
为了以正常蜂窝网络相同的频率进行信号广播,黄貂鱼可以模拟合法基站的可识别属性(MCC、MNC、基站ID等)。黄貂鱼通常会使用更强的信号广播来劫持手机,并远离模拟的真基站,以避免干扰到真基站的运作。
为每个基站建立模型,显示出基站信号的位置分布,可以很容易识别出与正常信号分布不符的信号。如图所示,在基站7843的信号分布图上,较暗的颜色代表更强的信号,较大尺寸代表统计观测到的异常结果,请注意底部的大圆点。
异常频道
为避免干扰基础网络,黄貂鱼假冒附近基站时,会在不同频率/频道上广播信号。大多数基站只在一个或两个频道传输信号,如果某个基站总是不停地换频道,那么很可能是附近有人在用黄貂鱼。
如图显示了某个基站ID在6个频道上进行广播,位置是西雅图南部的地方单位公民和移民服务(USCIS)大楼附近。可以比较的是,本次数据中没有发现有任何其它基站在超过3个频道上传输的,96%以上的基站仅在单个频道上传输。图中不同颜色代表不同频道,尺寸代表接收信号强度。请注意USCIS大楼附近的异常颜色区域。
异常信号属性
每个基站都会广播自身的配置属性,以便手机调整信号、通报基站支持的功能。这些属性是独特的,但同一城市、同一运营商下基站的大部分属性都相同。SeaGlass项目在收集两个城市不同运营商广播信号时,会统计相关属性分布。
黄貂鱼必须广播自己是某运营商网络的基站,除非窃听者将它配置为完全仿照模式(所有属性和该网络基站一致),否则它是可识别的。
继续看图,如图显示了西雅图塔科马国际机场附近某个基站ID的观测数据,在两个月内它被观测到2千多次,属性信息非常稳定,和该网络下其它基站一致。但有一次信号异常,属性信息远超出西雅图网络内所有基站的预期范围,即图中红点,出现四种异常的BCCH属性(MSTXPWR, RXACCMIN, CRH, T3212)。
时间变化
与正常基站不同,黄貂鱼通常被设计为便携、短时间使用、对感兴趣目标的长期监听。某些情况下,当有临时需求时会需要移动真实基站去支援,比如体育赛事,不过这种情况不多见。因此,任何短时间使用传输的基站都是可疑的,应该需要调查。
在统计数据中,我们找到一些临时基站,但进一步调查显示,它们大概率只是日常维护中关闭的基站。
结果验证
研究团队正尝试通过一些二手信息源来验证结果,比如公开请求记录。SeaGlass检测到了许多可疑的信号,由于没有独立验证,现在还不能肯定说这些可疑信号就是黄貂鱼造成的。
技术细节
关于SeaGlass传感器的详细信息,传感器、数据采集系统、检测算法和结果,大家可以在研究团队发布的论文中看到。
相关代码放在Github上。
【参考】https://seaglass.cs.washington.edu/
SeaGlass:手工搭建伪基站监控系统的更多相关文章
- 使用monit搭建一个监控系统
上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情.当然了主要是监控异常,因为我们的产品属于服务器类型,很多进程都daemon,要不停的运行.我们搭建监控目的不过是出现问题能够及时的知 ...
- 搭建前端监控系统(四)Js截图上报篇
===================================================================== 前端监控系统: DEMO地址 GIT代码仓库地址 ==== ...
- 搭建前端监控系统(三)NodeJs服务器部署篇
===================================================================== 监控系统预览地址: DEMO地址 GIT代码仓库地址 ...
- 搭建前端监控系统(二)JS错误监控篇
===================================================================== 前端性能监控系统: DEMO地址 GIT代码仓库地址 ...
- Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql
Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql
- 从零开始搭建前端监控系统(三)——实现控制iframe前进后退
前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: https://github.com/bombayjs/bombayjs (web sdk) https://gith ...
- 搭建前端监控系统(六)JS截屏和录屏篇
怎样定位前端线上问题,一直以来,都是很头疼的问题,因为它发生于用户的一系列操作之后.错误的原因可能源于机型,网络环境,接口请求,复杂的操作行为等等,在我们想要去解决的时候很难复现出来,自然也就无法解决 ...
- 搭建前端监控系统(五)Nodejs怎么搭建消息队列
怎样定位前端线上问题,一直以来,都是很头疼的问题,因为它发生于用户的一系列操作之后.错误的原因可能源于机型,网络环境,接口请求,复杂的操作行为等等,在我们想要去解决的时候很难复现出来,自然也就无法解决 ...
- 搭建zabbix监控系统详解
搭建zabbix监控系统详解 文:warren 博文大纲:一.前言 二.zabbix监控架构三.搭建Zabbix监控服务器四.搭建过程中遇到有些服务无法正常启动的解决办法 一.前言 : 要想实时的 ...
随机推荐
- Codeforces Gym 2015 ACM Arabella Collegiate Programming Contest(二月十日训练赛)
A(By talker): 题意分析:以a(int) op b(int)形式给出两个整数和操作符, 求两个整数是否存在操作符所给定的关系 ,有则输出true,无则输出false: 思路:由于无时间复杂 ...
- cocos2dx 接入bugly 报错 Fail to get class by NSClassFromString(BuglyAgent)
ios 端安装文档接入库后,报错 -> static void BuglyJSAgent::reportJSError(JSContext *, const char *, JSErrorRep ...
- 配置maven报错 the java_home environment variable is not defined correctly ......
the java_home environment variable is not defined correctly This environment variable is needed to r ...
- 框模型中设置内容区域元素占地尺寸box-sizing属性
盒子模型有两种 一种是 内容盒子模型(content-box)一种是边框盒子模型(border-box). content-box:设置的尺寸,只设置内容区域, 左外边距+左边框+左内边距+内容区域宽 ...
- python计算圆面积
#coding=gbk #coding=utf-8 #-*- coding: UTF-8 -*- #调用math包处理相关的运算 import math #圆半径 r = 2 #计算圆面积π*r*r与 ...
- JavaScript 高级技巧 Memoization
memoization 来源于拉丁语 memorandum ("to be remembered"),不要与 memorization 混淆了. 首先来看一下维基百科的描述: In ...
- str内部方法释义
1. __add__:字符串拼接 [示例]:>>> str1=‘good’>>> str1.__add__(‘morning’)>>> ‘good ...
- 为什么在属性中设置private set
引言: 属性的引入来自C#的封装机制,也就是说对象的内部数据不应该由对象实例来直接访问,我们可以使用传统的Get和Set方法,来封装字段,C#为我们提供了语法糖,也就是属性.属性包括get和set,分 ...
- unittest多线程生成报告(BeautifulReport)
前言 selenium多线程跑用例,这个前面一篇已经解决了,如何生成一个测试报告这个是难点,刚好在github上有个大神分享了BeautifulReport,完美的结合起来,就能生成报告了. 环境必备 ...
- Python+selenium登录测试
我们以登录新浪微博为案例来讲解,首先进入登录页面,输入用户名和密码,点击登录按钮,并且获得用户信息以验证是否登录成功. Web地址:https://login.sina.com.cn/signup/s ...