阿里巴巴发布手机定位重大漏洞!!

在全球“泛滥”的智能手机也正在改变人们的生活习惯,用导航软件规划我们的出行路径,用外卖软件购买周边的美食....,而在这些高频软件的背后都有个共同的“幕后英雄”- 位置服务,这个位置服务通过一系列的技术手段来保证用户可以实时可靠的获取自己的坐标位置,而这一系列技术手段中最关键的两个就是GPS卫星定位和WIFI/基站定位,而在位置服务消费环节上,像高德或者百度这样的平台厂商会提供一层封装好的位置SDK,应用开发者直接使用这些SDK进行应用开发,由于相关内容的专业性,对于应用开发者和终端用户基本不会对这些信息进行再次安全性校验,殊不知这两种看似“高大上”的技术其实存在较大的安全漏洞,而且通过简单的工具组合就可以实现完全非接触的位置欺诈,让你的手机失灵。阿里巴巴移动安全团队针对该漏洞发布了一篇名为《 Time and Position Spoofing with Open Source Projects 》的论文详细叙述了相关的漏洞以及实现欺骗的方法。
1.GPS定位原理
【阿里巴巴发布手机定位重大漏洞!!】在介绍GPS欺诈的实现原理之前,首先简单介绍一下GPS定位的基本原理,我们在地球上的位置可以用(x, y, z)来表示,这个位置是未知的,也是我们希望获得的。如果有一个坐标(x1, y1, z1)已知的位置A(实际上就是卫星),我们就可以简单的从位置A播发一个信号,这个信号可以是光、声波、电磁波,而GPS系统选择的是电磁波作为信号,它的传播速度用c表示,然后我们试着去测量信号从卫星发出到手机接收到的时间间隔τ1,这样我们就可以得到这样的一个方程:
阿里巴巴发布手机定位重大漏洞!!
文章图片
这个时候就需要各位看官拿出压箱底的数学知识来了,很显然我们通过这样的一个等式是无法求出三个未知量的,理论上我们还需要另外两个位置已知的卫星位置来构建另外两个等式,从而通过三个等式来计算三个未知量:
阿里巴巴发布手机定位重大漏洞!!
文章图片
是不是你以为这样就OK了,我前面说了这这只是理论上的,在工程上还是有问题的,就是这个时间间隔τ,这个τ理论上是可以使用接受机的时间 t1 减去卫星信号发送时的时间 t2 就可以获得的,但是卫星上使用的是价格昂贵的原子钟进行计时,但是手机使用的计时工具显然是廉价的,所以通过这样的方法得到的时间间隔τ和真实的信号传播时间是不一致的,存在一个系统性的偏差 ?t ,这样在工程上就引入了一个新的变量,上面的定位方程就会变成:
阿里巴巴发布手机定位重大漏洞!!
文章图片
这样我们为了得到我们的最终位置就需要求取四个未知数,这样我们就需要再增加一个位置已知的卫星参与方程求解,所以这也就是卫星定位必须至少同时收到四颗卫星信号的原因。
阿里巴巴发布手机定位重大漏洞!!
文章图片
对于GPS来说,它同时发送民用L1和军用L2两种无线信号. 我们通常使用的是没有加密的L1民用 1575.42MHz 的超高频波段,那卫星是如何让手机知道它的位置坐标的呢?这就需要介绍一下广播星历数据,广播星历文件中包含卫星每天的星历信息,星历提供了每颗卫星的精确坐标,这样手机就可以通过这些已知位置(xi(t), yi(t), zi(t))通过上面的方程计算手机的位置了。
知道这些信息之后是不是我们就可以使用同样的频率去播发和定位信号一样格式的信息从而欺骗手机呢?显然是可以的,基于这个思路这就得可以到接下来GPS欺骗的方法。
2.GPS欺诈实现
伪造信号
我们可以下载到归档的广播星历数据。
ftp://cddis. gsfc.nasa.gov/gnss/data/daily/
那如何通过这些数据伪造我们需要的星历文件呢,这个时候就需要一个开源软件平台和一个硬件平台,GPS-SDR-SIM和 HackRF(淘宝价格800左右)
通过如下命令,就可以将星历
$./gps-sdr-sim -e brdc3540.14n -l 29.643598,91.101319,100 -b 8
随后 gps-sdr-sim 会自动生成带有经纬度信息的数据文件. 我们便可以通过HackRF通过 1575.42MHz 这个频率来重复发送伪造的GPS 数据
$ hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 0 -R
欺诈效果
如下使用iPhone在北京实际定位的效果
阿里巴巴发布手机定位重大漏洞!!
文章图片
微信定位的效果
阿里巴巴发布手机定位重大漏洞!!
文章图片
3.WIFI定位原理
由于在室内或者遮挡严重的区域是没办法收到卫星信号,像苹果地图, 谷歌地图, 百度地图通常会使用WIFI信号来改善定位的效果,WIFI信号定位的原理比较简单,手机无线芯片组通过WIFI信号的强弱来估算手机与周围WIFI热点的距离,这样同样通过类似GPS一样的原理借助搜索到热点的名字和信号的强度就可以估算出手机的位置了。那热点的位置又是哪儿来的呢?其实这就是来自于手机的用户,对于这些定位软件在定位的时候同时也会上传自己的位置数据,通过这些位置和信号强度自然是可以估算出热点的位置的,这样就会造成平台使用的人越多,它估算出来的热点位置越准确,那么在使用WIFI定位的时候精度也会更高。卫星用星历数据来标识卫星,那WIFI热点如何进行唯一区分呢?答案就是 SSID and BSSID. SSID (Service Set IDentification) 就是我们所有WIFI信号时候看到WIFI列表中的名字. BSSID (Basic Service Set Identification) 是热点MAC地址,和上面同样的原理,我们是不是可以通过播发伪造的热点信号从而欺骗手机使用错误的热点进行位置计算,这样就可以导致相应的位置偏差。
4.WIFI欺诈实现
我们可以使用Linux系统使用"iw"工具来收集地点A附件的热点信息,这样我们可以得到地点A的热点列表:
阿里巴巴发布手机定位重大漏洞!!
文章图片
然后我们到地点B,使用 MDK3工具进行伪造信号的发送,对于手机扫描到这些伪造的WIFI列表后,自然就会把位置定到位置A,如下:
阿里巴巴发布手机定位重大漏洞!!
文章图片
阿里巴巴发布手机定位重大漏洞!!
文章图片
根据作者的介绍,上述技术内容已经提交到了相关的厂商,但是厂商的水平良莠不齐,对于终端用户以及应用开发者,在使用位置信息时候最好进行交叉验证,同时也要保持警惕,技术可以造福百姓,同样也可以犯罪作恶,这要取决于使用的人。

    推荐阅读