随着车辆GPS技术的广泛应用,其在导航、交通监控等方面的关键性日益凸显,与之相关的安全性问题也备受关注。GPS欺骗便是其中一种重要的威胁手段。
本文旨在使用模拟GPS欺骗设备,模拟不同的GPS攻击以评估其对车辆定位系统的影响。通过这个实验,我们希望深入了解GPS系统的脆弱性,为提升车辆GPS安全性提供实质性的参考,实验结果将有助于揭示潜在的攻击影响,从而促进更加有效的安全措施的研发和应用。
Part 01 什么是GPS欺骗?
GPS欺骗是指通过修改GPS信号,故意误导车辆的定位系统,可能对导航、交通管理和整体安全性产生潜在威胁。
GPS欺骗可分为静态GPS欺骗和动态GPS欺骗。
静态GPS欺骗是一种通过修改、模拟或屏蔽GPS信号,误导车辆在停车或缓慢行驶状态下的定位系统的攻击。
动态GPS欺骗强调了攻击者不仅仅关注车辆的静态位置,还关注在车辆行驶过程中动态地影响其定位。这种攻击方式可能导致更严重的后果,因为它直接威胁到车辆的实时安全性。
Part 02 静态GPS欺骗实验
实验环境
硬件平台:HackRF One、GPS外部时钟、700-2700MHz天线
软件环境:kali运行HackRF环境
GPS终端:使用iphone 6S、小米mix2s等各品牌手机以及某品牌车型车机系统
实验准备
1、gps-sdr-sim项目
这个项目的原理是gps-sdr-sim能根据指定的卫星信息文件、坐标信息、采样频率等参数输出二进制的信号文件,将这个二进制文件导入到USRP或者bladeRF之类的无线电射频设备上就可以实现GPS的伪造。
(1)下载GPS仿真器代码
git clone https://github.com/osqzss/gps-sdr-sim.git
(2)gcc编译:
gcc gpssim.c -lm -O3 -o gps-sdr-sim
2、获取坐标
项目页面上给了三种不同的输入坐标信息的方式:
gps-sdr-sim -e brdc0190.17n -l 29.6562801500,91.1257504400,100 -b 8
-e 指定RINEX格式GPS导航电文文件
-l 指定经纬度和海拔
-b 指定采样精度(hackrf为8,blader为16)
此刻采用的是布达拉宫的经纬坐标。
3、连接hackrf设备
GPS外部时钟如下图所示安装在HackRF板上:
输入hackrf_debug --si5351c -n 0 -r 可以判断时钟模块是否安装正确,0x01即为安装成功。
查看设备是否被识别,成功识别输入hackrf_info会打印出hackrf的信息:
生成GPS数据
使用-l参数指定之前获取的坐标29.6562801500,91.1257504400,-b参数指定二进制文件格式,执行文件后默认会生成300秒GPS仿真数据。
./gps-sdr-sim -e brdc0190.17n -l 【坐标】 -b 8
等待命令执行结束,文件夹中多了一个gpssim.bin文件,这个文件内容就是模拟生成的GPS数据。
发射GPS数据
hackrf_transfer 将生成的基带信号重新生成为GPS信号。
指定GPS数据,-f指定发射频率,指定频率为1575420000 即民用GPS L1波段频率,-s指定采样速率,指定采样速率2.6Msps,-x指定发射功率,开启天线增益,指定TX VGA(IF)为0、10、20不等(为了限制影响范围,最大为47,尽量不要使用),最后开启重复发射数据功能。
hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 47 -R
-f:中心频率,单位 Hz
-s:采样率,单位 Hz(4/8/10/12.5/16/20 MHz,默认 10 MHz)
-a:设置功放(1 表示开启,0 表示关闭)
-R:重复发送模式(默认为关闭)
实验结果
找了小米mix2s、苹果6s进行GPS欺骗实验。小米mix2s未成功 ,苹果6S欺骗成功。尝试了百度、腾讯、高德等地图,均可实现欺骗,微信可以共享虚假位置信息。
也可通过carplay上传至车机中,汽车上传至手机的位置信息已经欺骗成功了。
Part 03 动态GPS欺骗实验
实验环境
硬件设备:
HackRF
HackRF 连接数据线
外部时钟模块(TCXO 时钟模块)
天线(淘宝套餐中的 700MHz-2700MHz 吸盘天线)
软件应用:
hackrf-tools
[Google Earth Pro](https://www.google.com/earth/versions/#earth-pro)
[gps-sdr-sim](https://github.com/osqzss/gps-sdr-sim)
[SatGen Trajectory Generation]
(https://files.cnblogs.com/files/k1two2/SatGenNMEAFree.zip)
操作流程概述
用 Google Earth Pro 制作运动轨迹坐标 kml 文件
前往 NASA 官网下载 GPS 导航电文
用 gps-sdr-sim 将 GPS 导航电文和运动轨迹坐标 kml 文件生成采样文件
hackrf_transfer 发射 GPS 欺骗信号
运动轨迹坐标文件
Google Earth Pro 查看国内地图会存在火星偏移,即卫星图与显示地名、街道信息不对应,以卫星图为准。
启动 Google Earth Pro ,寻找需要模拟地点,点击添加路径:
Google Earth Pro演示图1
用鼠标点击图上勾画出路径,这里采用玄武湖作为示例:
模拟轨迹图
绘图完成并保存后,在位置可以找到保存的路径,右键将位置另存为导出kml文件:
Google Earth Pro演示图2
kml文件内容展示:
kml文件内容
NMEA文件
NMEA 是 GPS 导航设备统一的 RTCM 标准协议,包含坐标、海拔、时间轨迹。将运动轨迹坐标 kml 文件导入 SatGen ,就会自动加载 kml 路径。
SatGen软件截图
调参拟合
调整参数将速度轨迹向真实情况进行拟合,SatGen 会模拟真实运动情况,如:拐弯减速、起步&结束停留……
output 数据更新率
max longacc 最大纵向加速度
max jerk 最大加速度
max latacc 最大横向加速度
max speed 最大速度
stationary period 起步停留时间
stationary period end 结束停留时间
scenario distance 总路程长度
total time 总耗时
点击"Generate NMEA file",即可生成标准的 NMEA 轨迹文件。
NMEA文件内
绕圈轨迹制作
要制作绕圈跑的 NMEA 轨迹只需要画一圈,将 NMEA 文件内容复制粘贴即可:
$GPGGA,090453.93,2306.36704898,N,11328.49988987,E,1,05,2.87,160.00,M,-21.3213,M,,*7C
$GPGGA,090454.00,2306.36704898,N,11328.49988987,E,1,05,2.87,160.00,M,-21.3213,M,,*71
……
$GPGGA,090453.93,2306.36704898,N,11328.49988987,E,1,05,2.87,160.00,M,-21.3213,M,,*7C
$GPGGA,090454.00,2306.36704898,N,11328.49988987,E,1,05,2.87,160.00,M,-21.3213,M,,*71
……
GPS导航电文
导航电文用于计算卫星当前的位置和信号传输的时间,从而使 GPS 接收机在接收导航电文后能确定自身的位置。
各个接收机厂商普遍采用统一的 RINEX 格式,RINEX 本质上是文本文件,RINEX 文件遵循标准的[命名规则](https://cddis.nasa.gov/Data_and_Derived_Products/GNSS/RINEX_Version_3.html)
获取GPS导航电文
可以在NASA官网上获取 RINEX 格式的GPS导航电文,卫星星历是用于描述太空飞行体位置和速度的表达式——两行式轨道数据系统。
https://cddis.nasa.gov/archive/gps/data/daily/2017/019/17n/
GPS导航电文1
GPS导航电文定义
解压后可以用文本编辑器打开,导航电文文件结果如图所示:
生成采样文件
利用 [gps-sdr-sim](https://github.com/osqzss/gps-sdr-sim) 配合 GPS 导航电文和 NMEA 文件生成 HackRF 发射信号需要的采样文件。
git clone https://github.com/osqzss/gps-sdr-sim.git
修改动态模式时间上限
gps-sdr-sim 默认动态模式最大只能生成 300s ;静态模式 86400s (10Hz)。结合实际情况修改"gpssim.h"的"USER_MOTION_SIZE"实现自定义时间上限。
将"USER_MOTION_SIZE"调得比 NMEA 轨迹总耗时长 30s 以上。HackRF 开始发出信号,到手机 GPS 被欺骗需要一定时间(30s左右),所以时间上限多加 30s ,让定位稳定被欺骗,以防在模拟定位与真实定位之间跳变。
最终运行作用时长取决于较短的那个时间。假如轨迹总耗时400s ,"USER_MOTION_SIZE"定义动态模拟时间上限 300s ,最终运行 300s 。
#3000 == 300s
make USER_MOTION_SIZE=3000
编译gps-sdr-sim
gcc gpssim.c -lm -O3 -o gps-sdr-sim
用法:gps-sdr-sim [选项]
选项:
-e用于GPS星历表的RINEX导航文件(必填)
-u用户动作文件(动态模式)
-gNMEA GGA流(动态模式)
-c <位置> ECEF X,Y,Z,以米为单位(静态模式),例如3967283.15,1022538.18,4872414.48
-l <位置> Lat,Lon,Hgt(静态模式),例如30.286502,120.032669,100
-t <日期,时间>场景开始时间YYYY / MM / DD,hh:mm:ss
-T <日期,时间>将TOC和TOE覆盖到方案开始时间
-d <欺骗时间>持续时间[秒](动态模式最大值:300静态模式最大值:86400)
-o <输出> I/Q采样数据文件(默认值:gpssim.bin;使用 - 用于stdout)
-s <频率>采样频率[Hz](默认值:2600000)
-bI/Q数据格式[1/8/16](默认值:16)
-i 禁用航天器场景的电离层延迟
-v 显示有关模拟频道的详细信息
生成采样文件
./gps-sdr-sim -e <导航电文文件> -g <轨迹文件> -b 8 -o <输出二进制文件路径>
"-b 8":降低输出文件大小。hackrf 支持的是8-bit的二进制文件,其他 sdr 查询 [readme](https://github.com/osqzss/gps-sdr-sim)
发射GPS欺骗信号
连接hackrf设备
GPS外部时钟如下图所示安装在HackRF板上。
输入hackrf_debug --si5351c -n 0 -r 可以判断时钟模块是否安装正确,0x01即为安装成功。
查看设备是否被识别,成功识别输入hackrf_info会打印出hackrf的信息:
发射信号
hackrf_transfer -t gpssim.bin -f 1575420000 -s 2600000 -a 1 -x 20 -R
-t:信号采样文件(gps-sdr-sim 生成的 bin 文件)
-f:频率赫兹;美国官方的GPS L1信号频段1575420000Hz
-s:HackRF 采样速率 2.6Msps
-a:放大器使能,接收/发射射频放大器:1=使能;0=禁用
-x:增益分贝,TX VGA(中频)增益,0-47db;1dB步长
-R:重复发射模式
实验结果
地图中当前的位置信息按照模拟的动态位置信息开始移动。
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取
读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)
同时每个成长路线对应的板块都有配套的视频提供:
大厂面试题
视频配套资料&国内外网安书籍、文档
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~
读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)
特别声明:
此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。