2015年的时候,360UnicornTeam 在Defcon黑客大会以及阿里移动安全 在BlackHat大会上均带来了GPS劫持的演讲,给大家揭开了GPS Hacking的神秘面纱在这篇文章中我们将通过无线的角度来看定位,以及学习如何进行定位的劫持和伪造。
我们生活中几种常见的定位方式:基于手机基站、基于GPS系统、基于WIFI;
0×01.基站定位
1.1 手机基站 & 蜂窝网络基站:
基站即公用移动通信基站是无线电台站的一种形式,是指在一定的无线电覆盖区中,通过移动通信交换中心,与移动电话终端之间进行信息传递的无线电收发信电台。
基站定位一般应用于手机用户,手机基站定位服务又叫做移动位置服务(LBS——Location Based Service),它是通过电信移动运营商的网络(如GSM网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务,例如目前中国移动动感地带提供的动感位置查询服务等。
1.1 COO(Cell of Origin)定位:COO定位是一种单基站定位,即根据设备当前连接的蜂窝基站的位置来确定设备的位置。 1.2 AOA定位:AOA(Angle of Arrival到达角度)定位是一种两基站定位方法,基于信号的入射角度进行定位。 1.3 TOA/TDOA定位:TOA(Time of Arrival到达时间)、TDOA(Time Difference of Arrival到达时间差)都是基于电波传播时间的定位方法。也都是三基站定位方法,二者的定位都需要同时有三个位置已知的基站合作才能进行。
基站定位的大致原理为:移动电话测量不同基站的下行导频信号,得到不同基站下行导频的TOA(Time of Arrival,到达时刻)或TDOA(Time Difference of Arrival,到达时间差),根据该测量结果并结合基站的坐标,一般采用三角公式估计算法,就能够计算出移动电话的位置。实际的位置估计算法需要考虑多基站(3个或3个以上)定位的情况,因此算法要复杂很多。一般而言,移动台测量的基站数目越多,测量精度越高,定位性能改善越明显。
CGI:Cell Global Identity小区全球标识,是全球范围内无线网络小区的唯一标识,不同运营商的不同网络可以有不同的CGI编号规则。 eNodeBID:基站的编号,在LTE网内是唯一的,因此eNodeBID + 小区ID = Cell ID在LTE网内也是唯一的。 这样的Cell ID加上网络号(PLMN ID)就可以保证全球唯一,就是LTE小区的CGI。LTE的小区全球标识叫做ECGI eUTRAN Cell Blobal Identity。
GSM网络中的设备都可以以编程方式获取到当前基站的Cell ID。
其实也可以通过一些手机指令获取:
苹果手机: *3001#12345#*拨号 安卓手机: *#*#4636#*#* 我们可以查询到信号强度、小区信息:TAC、频点号、PCI、EnodeBID、小区码CGI。
通过获取ECGI数据后,通过 “基站云平台”查询 ,(需要下载EXE桌面软件)输入几个参数,可以查询到基站的经纬度及地理位置信息:
基站定位的精度只能达到基站距离的级别,一般为500米左右,密集城区为120米左右。
1.2 基站定位运用
户户通直播星: 户户通需要插入SIM来搜索手机基站以进行定位:
企业对车辆的管理: 出于GPS成本高以及地下室等无信号的原因,有些物流企业采用了手机GSM定位技术方案。这种方案的成本是GPS的1/3。但受移动基站网络资源的限制,在连续定位方面的成本较高。
0×02.WIFI定位
WIFI定位通过侦测附近周围所有WIFI的SSID、MAC地址来实现定位。
WiFi定位技术除具有良好的精度和可扩展性外,其独特优势在于WiFi芯片已经在各类用户智能终端(智能手机、平板电脑等)中得到广泛普及,并且随“无线城市”的发展,国内各大城市电信运营商、公司与家庭均已安装了大量的WiFi热点与网关,通过利用现有的这些WiFi设施,能够显著降低建设与长期运营成本,快速实现项目预定目标。这些都是开展WiFi技术为主的无缝定位技术研究和推动LBS应用的最佳基础条件与保证。
Kali下已经自带aircrack和mdk3,我们可以配合免驱无线网卡(RTL8182b)来使用这些工具。
百度公司WIFI(baidu.txt) MAC地址 SSID信道信息如下:
ec:26:ca:38:25:8a metrust 74:1e:93:63:74:b9 STB_IKPG 4c:09:b4:2e:bc:e5 VIDEOPHONE_zwRu c8:3a:35:3f:2e:e0 www.wboll.com a8:15:4d:14:a3:88 DYJL c4:14:3c:f3:5c:4d Baidu_Mobile 4c:09:b4:2e:83:f4 CU_mcSC 5a:c7:16:fa:e2:94 STB_Wa7a c4:14:3c:fb:58:3c Baidu_Friend c4:14:3c:e4:a1:dc Baidu_Friend c4:14:3c:f3:5c:4f Baidu 00:1f:a4:ed:e6:d0 CU_pngE 00:1f:a4:ed:e6:d1 VIDEOPHONE_pngE 00:1f:a4:ed:e6:d2 STB_pngE 00:1f:a4:ed:e6:d3 BACKUP ec:17:2f:25:ca:4e bjjfsd-VIP 6c:e8:73:fe:01:ee dhjc f4:ec:38:58:79:b2 ZJDZGC off ec:26:ca:b9:a5:d2 zkyc168 14:e6:e4:7e:ad:56 lichunfeng 14:75:90:0f:52:10 bjjfsd01 c4:14:3c:fb:58:ac Baidu_Friend c4:14:3c:f3:5c:4e Baidu_WiFi 42:0f:0e:20:9c:62 xz-test 32:0f:0e:20:9c:62 XZ-gaoceng 10:0f:0e:20:9c:62 XZ-office 12:0f:0e:20:9c:62 XZ-caiwu c4:14:3c:fb:58:3f Baidu c4:14:3c:e4:a1:df Baidu c4:14:3c:fb:58:3d Baidu_Mobile c4:14:3c:e4:a1:de Baidu_WiFi c4:14:3c:e4:a1:dd Baidu_Mobile c4:14:3c:fb:58:3e Baidu_WiFi c4:14:3c:fb:58:ad Baidu_Mobile c4:14:3c:f3:5c:4c Baidu_Friend c4:14:3c:fb:58:af Baidu ec:26:ca:6c:09:17 TP_820_5G 14:75:90:2a:b8:3a zjyd 72:c7:16:fc:86:07 STB_E2B9 72:c7:16:fc:86:06 VIDEOPHONE_E2B9 72:c7:16:fc:86:04 BACKUP b8:c7:16:fc:86:05 CU_E2B9 c0:a0:bb:49:c8:04 martin 00:25:86:a7:b5:82 etsee 80:89:17:b2:dc:d2 OT 14:75:90:31:34:ee hzcs b8:62:1f:51:84:54 ciscosb1 14:75:90:35:43:0b sdtp d4:ee:07:10:69:b4 wechat.wboll.com c8:3a:35:21:f2:b0 Tenda_21F2B0 8e:be:be:2a:7f:f7 Xiaomi_Hello_PZS7 8c:be:be:2a:7f:f5 YF.007 bc:d1:77:2c:96:1a Acoustic 14:75:90:2a:b8:3b zjyd 78:a1:06:54:2a:1e 007
奇虎360公司 (360.txt)WIFI MAC SSID 信息:
00:24:23:d8:7f:6b MopperMonk-EyE 64:09:80:60:5e:67 360wifi-zzl 74:25:8a:85:79:b7 360-yingshi-wifi 74:25:8a:85:79:b4 360-activity 74:25:8a:85:79:b1 360-guest 74:25:8a:85:79:b0 360-Lobby AP
mdk3的使用语法:
mdk3 mon0 b -n #自定义ESSID -f #读取ESSID列表文件 -v #自定义ESSID和BSSID对应列表文件 -d #自定义为Ad-Hoc模式 -w #自定义为wep模式 -g # 54Mbit模式 -t # WPA TKIP encryption -a # WPA AES encryption -m #读取数据库的mac地址 -c #自定义信道 -s #发包速率
伪造AP
找个没有WIFI信号的地方(防止其他有效WIFI对伪造进行干扰),开启无线网卡的monitor模式:
sudo airmon-ng check kill
sudo airmon-ng start wlan0
开始伪造WIFI热点
sudo mdk3 wlan0-mon b -v baidu.txt //伪造百度公司附近的WIFI环境
sudo mdk3 wlan0-mon b -v baidu.txt //伪造360公司附近的WIFI环境
由于办公地点有大量WIFI热点,WIFI定位伪造便不在此演示,有兴趣的童鞋可以找个没有热点信号的地方自行测试
0×03.GPS卫星定位
GPS最初是美国国防部为军方提供的一个星基定位、测速和时间系统。GPS系统使用地心坐标,提供基于1984年的世界大地坐标系(WGS-84)的航空器的位置。其导航数据,如到航路点的距离、方位和地速,是根据航空器当前位置(经度和纬度)和下一航路点的位置计算出来的。
美国国防部在1993年12月8日宣布GPS具有初始运行能力。美国联邦航空局(FAA)在1994年2月17日发布了航行通告(NOTAM),宣布GPS可用于某些民用IFR飞行。
GPS是星基无线电导航、定位和授时系统。该系统在全球范围内向具有合适装备的用户(不限数量)提供高精度的位置和速度信息以及精确的时间。
GPS提供两级服务:标准定位服务(SPS)及精密定位服务(PPS)。
SPS为所有用户提供95%概率的100米或以下的水平定位精度,和99.99%概率的300米精度。PPS比SPS更精确,但民用航空用户一般只能使用SPS。
GPS运行的概念是利用空间一组作为精确参考点的卫星进行测距和三角计算。GPS接收机利用无线电信号的传播时间测量到卫星的距离。每颗卫星发送一个特定的编码,被称作粗捕获(CA)码,它包括有关卫星位置、GPS系统时间和卫星传输数据的健康和准确性等信息。已知信号传输的速度大约300000公里/秒和确切的传播时间,则信号的传输距离能够根据到达的时间推算出来。
GPS接收机将每颗卫星的CA码与接收机中数据库内所包含的同样的编码进行匹配。通过在匹配过程中移动卫星的编码和移动与其内部时钟的比较,接收机能计算出信号从卫星到接收机的传播距离,从这种计算距离的方法得出的距离被称为伪距,因为它不是直接计算距离,而是通过时间来计算。伪距测量会包含几种误差,如,电离层、对流层延迟和多路径误差。
除了知道到卫星的距离外,接收机还需知道卫星在空间的确切位置,也就是“星历”。每个卫星发送其确切轨道位置的信息。GPS接收机利用该信息精确确定卫星的位置。
利用计算的伪距和卫星提供的位置信息,GPS接收机通过三角方法计算出它的位置。GPS接收机需要至少四颗卫星进行三维定位(经度、纬度和高度)和时间解算。GPS接收机通过利用航空器已知的经、纬度和接收机数据库内已有的数据进行比较来计算出导航数值,例如,到达一个航路点的距离和航向或者确定地速。
24颗卫星组成GPS星座的设计是为了地球上任何地方的用户在视界内都可以看到至少5颗卫星。接收机使用遮蔽角(在水平面之上能够使用卫星的最低角度)以上的最少4颗卫星的数据。
GPS接收机通过接收机自主完好性监视(RAIM)来核实GPS信号的完好性(可用性),以确定是否有卫星提供了错误的信息。除了导航所需的卫星外,在视界内必需有另外1颗卫星以使接收机执行RAIM功能;这样实施RAIM功能要求在视界内至少有5颗卫星,或者4颗卫星加上气压高度表(气压辅助)来检测完好性的异常。气压辅助是利用非卫星输入源增强GPS完好性的方法。为确保气压辅助可用,当前的高度表设定必须按照使用手册的要求输入到接收机中。
不同接收机的RAIM信息会有一些差异。一般来说有两种类型的指示。一种是指示没有足够数量的卫星提供RAIM,另一种是指示RAIM检测出超过当前飞行阶段限制的潜在误差。没有RAIM能力,飞行员就不能确定GPS定位的准确性。
一些卫星接收机能够隔离不良的卫星信号并在导航解算时剔除该信号,该过程称为“失效探测和排除(FDE)”。为隔离不良的卫星信号和继续提供有效的导航信号,FDE要求在视界内有6颗卫星或者在有气压辅助时有5颗卫星。
GPS工作频率有两个:11575.4Mhz(民用)和1227.6Mhz(军用),信号采用圆极化方式传输。
3.4 GPS系统组成 & 通信流程
GPS包含三大组成部分:空间部分、地面控制部分以及机载用户部分。
空间部分 (空中卫星群)是由24颗导航卫星组成。这些卫星距离地面约20000公里,分布在6个轨道平面上,每个平面上有4颗卫星。这样任何时候在视界内都有5颗卫星。GPS卫星发送伪随机码调制的时间信号,并经机载接收机处理后得到卫星的位置和状态数据。通过得到卫星的精确位置,并与卫星上的原子钟时间精确同步,机载接收机可以精确地测量出每颗卫星信号到达接收机的时间,从而确定航空器位置。
地面控制部分 (地面支持网)由监测站和控制站组成,用于保证卫星位置和时钟的精确性。地面控制系统由5个监测站,3个注入站和1个主控站组成。
机载用户部分 (用户设备)包括天线和机载卫星接收处理器(带有数据库),为飞行员提供航空器位置、速度和精确的时间信息。
要进行水平导航(2维定位)在视界内至少要有3颗卫星。要进行水平和垂直导航(3维定位)则在视界内至少要有4颗卫星。
地面支持网:监控卫星并根据测算结果向卫星提供时间改正参数、卫星星历等资料。 空中卫星群:卫星接收来自地面站的信息,并向用户发射以C/A码和P码调制的、带有时间信息和卫星星历等导航参数的1575.42MHz和1227.60MHz两种载波频率的信号。 用户设备:接收卫星发射的时间信号和卫星轨道信息,求得卫星位置,利用时间信号和伪码相关测量卫星到测者的伪距,并由计算机解算用户位置、速度等参数。
玩SDR有下面三款硬件平台:HackRF、BladeRF、USRP
HackRF是这三款平台中因其价格低(相对于其他两款),备受黑客所青睐。三款SDR平台的对比可看《 三款最优秀平价SDR对比 》这篇文章。三款对比表格如下:
BTW由于HackRF采用USB2.0接口,传输大文件的时候容易造成数据传输瓶颈问题(接下来生成的GPS数据将占用五到六个G的空间),并且其在发射大于400MHz的无线信号时会出现精确度误差,刚开始我用它来做下面的实验的时候手机出现了只能接收到“卫星”信号,而获取不到经纬度、时间等信息。
所以接下来的实验我们要通过BladeRF来发射GPS的无线信号,在这之前我们需要让系统识别出BladeRF硬件:
git clone https://github.com/Nuand/bladeRF.git cd bladeRF/host/ mkdir build cd build cmake -DINSTALL_UDEV_RULES=ON ../ make sudo make install ldconfig //刷新系统动态库缓存
上面的构建过程会将 bladeRF 安装到 /usr/local
下,而其中的库文件目录 /usr/local/lib{,64}
不在 ldconfig 的默认搜索路径里。所以我们可以将它们添加到 /etc/ld.so.conf
里。
sudo vim /etc/ld.so.conf
添加之后文件内容如下:
/usr/local/lib /usr/local/lib64 include ld.so.conf.d/*.conf
使用 bladeRF-cli -p
检测设备是否已经连接识别:
cd /usr/share/ mkdir Nuand cd Nuand mkdir bladeRF cd bladeRF wget http://hoopycat.com/bladerf_builds/latest/artifacts/hostedx40.rbf //下载FPGA镜像
BladeRF在购买之后,板子里边是有固件镜像(firmware)的,但是没有FPGA镜像,每次插入USB的时候都需要执行 bladeRF-cli -l /usr/share/Nuand/bladeRF/hostedx40.rbf
手动载入FPGA镜像
root@0xroot:~# bladeRF-cli -l /usr/share/Nuand/bladeRF/hostedx40.rbf Loading fpga... Done. root@0xroot:~#
此时,另外三个LED被点亮:
git clone https://github.com/osqzss/gps-sdr-sim.git cdcd gps-sdr-sim make
gps-sdr-sim项目的brdc3540.14n星历文件默认生成2014年12月20零点的时间,也就是北京时间2014您12月20日早上八点。如需生成其它年月的时间需要到NASA储存星历数据的FTP服务器下载,FTP地址为:
http://www.mmnt.net/db/0/0/cddis.gsfc.nasa.gov/pub/gps/data/daily
这里我们使用西藏的经纬度坐标生成一个包含星历、时间和GPS坐标的.bin数据,一个地区的经纬度可以在在先地图经纬度查询网站找到( http://www.gpsspg.com/maps.htm ) 西藏坐标:
谷歌地图:29.6471695826,91.1175026412 ,我们保留小数点后六位即可:29.647169,91.117502
./gps-sdr-sim -e brdc3540.14n -l 29.647169,91.117502,100 -b 16
信号伪造
bladeRF-cli -s bladerf.script
4.4 GPS伪造利用场景:
伪造无人机禁飞区域的GPS信息,如美国白宫,欺骗无人机迫使其不能飞行或伪造无人机返航点的位置使其返航,
毒贩利用漏洞入侵无人机实现非法偷渡
文章当中有一段:
其中之一的模块就是保护无人机免遭GPS欺骗。GPS欺很骗是一个很实用的网络攻击手段,主要实现方式是向GPS接收装置发送虚假GPS数据。非军用的无人机GPS信号没有加密,每个无人机上面都有一个GPS接收装置,用于接收来自轨道卫星的数据同时沿边境航行,监视非法越境者。
而毒贩们很快就明白了这一点,并利用GPS欺骗技术向无人机发送错误坐标。使得无人机接收的数据来源看起来像是真实可靠的。最后无人机接收了错误的坐标,修正航向,并离开它的正常巡视区域,去巡视它认为正确的坐标位置,其实最后巡视的就是毒贩们发送的错误坐标,无人机接收到错误的坐标后,需要反复进行修正回到其正常的巡逻区域,这一过程导致无人机燃料耗尽而不得不返回基地。毒贩趁此机会安全越过边境,之后他们才会切断他们的干扰装置。在2012年 美国德克萨斯大学安全研究人员 就演示了如何通过GPS欺骗劫持无人机。
这里由于条件限制,没有汽车录制视频,便向杨卿同学要了他们在Defcon黑客大会上的比亚迪汽车导航欺骗视频:
0×04 参考资料 & 感谢:
4.1 360UnicornTeam:杨卿&黄琳与Defcon的演讲 : GPS-Spoofing
https://media.defcon.org/DEF%20CON%2023/DEF%20CON%2023%20presentations/DEFCON-23-Lin-Huang-Qing-Yang-GPS-Spoofing.pdf
https://www.youtube.com/watch?v=jwJKMti_aw0
4.2 Improving the GPS Data Processing Algorithm for PreciseStatic Relative Positioning
http://www.sage.unsw.edu.au/about/school_pubs/pdfrep/s69.pdf
4.3 GLOBAL POSITIONING SYSTEMSTANDARD POSITIONING SERVICESIGNAL SPECIFICATION
http://www.gps.gov/technical/ps/1995-SPS-signal-specification.pdf
4.4 阿里移动安全: Wang Kang & Shuhua Chen & Aimin Pan on BlackHat
https://www.blackhat.com/docs/eu-15/materials/eu-15-Kang-Is-Your-Timespace-Safe-Time-And-Position-Spoofing-Opensourcely-wp.pdf
https://www.blackhat.com/docs/eu-15/materials/eu-15-Kang-Is-Your-Timespace-Safe-Time-And-Position-Spoofing-Opensourcely.pdf
4.5 乌云Drops:lxj616
http://drops.wooyun.org/tips/10580
4.6 乌云Drops:Kevin2600
http://drops.wooyun.org/tips/11155
4.7 百度百科:全球定位系统(GPS)
http://wenku.baidu.com/view/fde4fefbc8d376eeaeaa31d2.html?re=view
感谢:360独角兽团队: 杨卿-ir0nSmith@360UnicornTeam ,黄琳@360UnicornTeam,Mickey@360攻防实验室 ,spaceshuttle@Apple
*本文原创作者:雪碧@0xroot.cn,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)