I’m new on this forum and I would like to ask you guys the following…
So, basically, I have a few experience on dronekit, since I flew my 3DR drone on my field for research purposes. I’m also used to test my flights on dronekit-sitl and see the drone’s mission on Mission Planner or QGroundControl before going outside.
Now… my plan is to investigate about security issues on drones, specifically, GPS spoofing. The GPS spoofing is a technique that an attacker uses in order to deceive the GPS receiver of a victim. Once such GPS receiver is locked onto the spoofed GPS, the attacker has completely freedom and he can fly the drone in any arbitrary position.
Well, before simulating a correct GPS spoofing, I still have to complete a preliminary task, that is, to send a generic fake GPS position, even so bad that the drone can immediately understand that and throw failsafe.
The question is: how to edit and inject fake GPS position.
Currently, I’m able to preload a simple static mission that comprises of two point. The drone takes off at a certain home position logically placed at 0,0 (relative Cartesian coordinates) and the second point is at 0,100. On my Python code I have set a listener so that when the drone approaches 0,20, something has to happen.
But I’m not sure how to realize my thought.
I’m trying to edit the GPS_RAW_INT variable, with no success:
msg = vehicle.message_factory.gps_raw_int_encode(…)
I also tried to edit the GPS_INPUT variable, no way…:
msg = vehicle.message_factory.gps_input_encode(…)
On QGroundControl actually there is the possibility to watch few variables on the fly and one of them is GPS_RAW_INT. The problem is that when I’m injecting the supposedly new GPS_RAW_INT value, on the frontend I’m not able to see nothing.
Please give me hints.
I repeat, I’m not asking you “how to realize and bring back at home a perfect GPS spoofing”, but I’m simply asking “how to dynamically change the GPS information in such a way to throw a simple failsafe”?
Thanks so much for the moment…