全球导航卫星系统(GNSS)已经成为现代社会中不可或缺的基础设施,从智能手机导航到航空航海,从精准农业到金融交易时间同步,其应用几乎渗透到所有关键领域。然而,GNSS信号固有的脆弱性——信号强度极低且完全开放——使其极易受到欺骗攻击。这种攻击通过伪造卫星信号,诱导接收机计算出错误的位置、速度或时间信息,可能导致灾难性后果。
我在参与某无人机导航系统开发时,曾亲眼目睹过一次简单的GNSS欺骗如何让价值数百万的设备"凭空消失"。这促使我深入研究欺骗检测技术,并开发了这套完整的仿真系统。它不仅能够模拟真实场景中的欺骗攻击,更重要的是实现了基于多传感器融合的可靠检测方案。
系统采用"攻击-防御"双视角设计:
这种双向设计使得我们既能研究攻击特征,又能验证防御有效性,形成闭环验证体系。所有模块均采用Matlab面向对象编程实现,确保各组件可灵活替换和扩展。
matlab复制classdef Spoofer < handle
properties
attack_type; % 'ramp', 'step', 'intelligent'
start_time;
ramp_rate; % m/s for ramp attack
offset; % m for step attack
target_traj; % for intelligent spoofing
end
methods
function [pos_offset] = get_offset(obj, t)
if t < obj.start_time
pos_offset = [0;0;0];
else
switch obj.attack_type
case 'ramp'
pos_offset = (t-obj.start_time)*obj.ramp_rate*[1;1;1];
case 'step'
pos_offset = obj.offset*[1;1;1];
case 'intelligent'
pos_offset = obj.target_traj(t) - true_position(t);
end
end
end
end
end
状态向量设计为15维:
code复制x = [位置(3) 速度(3) 姿态(3) 加速度计零偏(3) 陀螺零偏(3)]
观测模型同时处理GNSS伪距和多普勒观测值,以及IMU提供的增量运动信息。关键创新在于设计了自适应观测噪声矩阵:
matlab复制function R = get_obs_noise(innovation, R_nominal)
% 基于新息检测异常观测
if norm(innovation) > 3*sqrt(diag(R_nominal))
R = 10*R_nominal; % 降低异常观测权重
else
R = R_nominal;
end
end
系统并行运行五类检测器,构成防御矩阵:
信号质量检测
物理一致性检测
matlab复制function [flag] = check_physics(gnss_vel, imu_acc, prev_vel, dt)
predicted_vel = prev_vel + imu_acc*dt;
discrepancy = norm(gnss_vel - predicted_vel);
flag = discrepancy > 0.3*max(norm(gnss_vel), norm(predicted_vel));
end
统计特性检测
多接收机一致性
加密认证检测
检测结果通过D-S证据理论融合,动态调整EKF参数:
matlab复制function [q] = compute_trust_weight(detection_results)
% 输入各检测器置信度[0,1],输出融合权重
conflict = 1 - sum(min([detection_results; 1-detection_results]));
q = 0.5*(1 + sum(detection_results)/length(detection_results) - conflict);
end
我们构建了三类典型场景:
每种场景下设置不同攻击强度(1-10级),评估检测系统鲁棒性。
| 指标 | 无欺骗场景 | 弱欺骗(3级) | 强欺骗(8级) |
|---|---|---|---|
| 定位误差(RMS/m) | 1.2 | 1.5 | 2.1 |
| 检测延迟(s) | - | 3.2 | 1.5 |
| 误报率(%) | 0.5 | 1.2 | 0.8 |
| 漏检率(%) | - | 5.0 | 0.3 |
案例:智能跟随攻击
攻击者试图让目标轨迹平行偏移100米。系统通过以下特征识别:
检测器在攻击开始后4.3秒触发警报,最终定位偏差控制在3米内。
IMU噪声参数标定:
matlab复制[tau, sigma] = allan(imu_data, fs);
loglog(tau, sigma);
% 识别斜率转折点对应特征时间常数
EKF调参黄金法则:
矩阵运算加速:
matlab复制% 稀疏化处理
F = speye(15);
F(1:3,4:6) = dt*speye(3);
分层检测策略:
正在集成视觉里程计和LiDAR点云匹配,构建三重冗余:
实验表明,LSTM网络可有效学习欺骗信号的时空特征:
下一步将连接U-blox F9P和Xsens MTi-630进行实物验证,重点关注:
关键提示:实际部署时务必进行严格的电磁兼容测试,我们曾遇到车载电源噪声导致IMU数据异常,进而引发误报的案例。建议在系统设计中加入电源质量监测模块。
这套系统代码已模块化封装,核心函数包括:
GNSS_Spoofing_Simulator.m:主仿真循环TightlyCoupledEKF.m:融合算法实现SpoofingDetector.m:检测逻辑集合ScenarioBuilder.m:测试场景生成每个模块都有详细输入输出说明和示例调用脚本,便于二次开发。特别建议关注/utils目录下的数据可视化工具,可以直观对比真实轨迹、欺骗轨迹和估计轨迹的时空关系。