Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add GNSS spoofing & jamming detection feature #231

Open
barbeau opened this issue Oct 19, 2018 · 10 comments
Open

Add GNSS spoofing & jamming detection feature #231

barbeau opened this issue Oct 19, 2018 · 10 comments

Comments

@barbeau
Copy link
Owner

barbeau commented Oct 19, 2018

Summary:

As spoofing GNSS signals becomes an increasing area of concern, I’d like to add a new features to GPSTest that includes various metrics that may give some indication that a GNSS signal is being spoofed. This will be implemented by comparing GNSS data attributes against other source of data that provide similar attributes.

Possible names for new feature/fragment in navigation drawer (other proposals welcome):

  • Health
  • Security
  • Protect
  • Integrity
  • Interference
  • Spoofing

I’m leaning towards “Health” "Integrity" because given my past experience with sensor data quality on Android, I’m expecting that there will be a reasonable number of devices that have questionable sensor data, and as a result we don’t want to definitively say that a GNSS signal is spoofed (unless we have very high confidence that this is the case).

Ceccato et al has a good description of some of the possible mitigations against spoofing that can be implemented at the application level in this 2018 ION GNSS+ paper, which also shows how existing Android and iOS devices are currently vulnerable to spoofing time and position without giving any warning to the user.

EDIT 2024 - more references to detecting spoofing, from #667

"Detecting GNSS Jamming and Spoofing on Android Devices"
DOI: https://doi.org/10.33012/navi.537
https://navi.ion.org/content/69/3/navi.537

"Improving GNSS Spoofing Awareness in
Smartphones via Statistical Processing
of Raw Measurements"
DOI: 10.1109/OJCOMS.2023.3260905
https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=10081330

Here are the various features we could implement and show in a new fragment. Most of them involve comparing the computed GNSS location or received GNSS data against other sources to see if they align within a reasonable degree.

We could compare...

Location.getTime() to:

Location.getElapsedRealtimeNanos to:

Location.getLatitude() and Location.getLongitude() to:

Location.getSpeed() and getBearing() to:

  • Accelerometer and gyroscope (already being monitored as rotation vector sensor for Map and Sky fragments)
  • Google build flavor only - Activity recognition from Google Play Services

Location.getAltitude() to:

Cc’ing @caparrag, one of the co-authors on the paper, to see if he has any more comments or wants to contribute :)

Steps to reproduce:

Look for method to determine health of GNSS signal, compared to data from other sources (e.g., device sensors)

Expected behavior:

Give me such a feature

Observed behavior:

No such feature exists

@barbeau barbeau added this to the v3.3 milestone Oct 19, 2018
@goldfndr
Copy link
Contributor

If the scope of this feature/fragment is limited/confined to spoofing then I suggest a name of "Spoof check" or "Spoofing diagnosis" or "Spoofed?" or similar. I think it'd be preferable to encourage use of the conventional terminology.

@ndoggac
Copy link

ndoggac commented Nov 2, 2018

Would recommend against using the term "health", as it may be misconstrued as GNSS broadcast satellite health (ie. almanac/ephemeris health bits).

This a fairly lofty goal. It's pretty cool, but it's going to be pretty difficult with uncertain returns. I think section 3 in the paper lays out the options nearly in order of difficulty from least to most.

3-A would be relatively easy to implement, log position every 'n' seconds and sanity check the diff from previous position.

3-B you could utilize cellular time, or ntp time via internet compared to time calculated from your GNSS solution. For position you could perform an independent position estimate using OTDOA and make sure your GNSS position is within a certain vicinity of the independent position calculation. Not sure if OTDOA is available in the Android API though, and it has errors on the order of several hundred meters.

3-C I'm uncertain how much this would buy you as there are already validity checks built into the GPS broadcast frames, which the chipset implements. However, ICDs can be found here.

You may want to consider implementing a RAIM algorithm as well, and have a fault detection (FD) flag.

@barbeau barbeau changed the title Add GNSS "Health" feature Add GNSS spoofing detection feature Dec 19, 2018
@barbeau barbeau modified the milestones: v3.4, v3.5, v3.6 Sep 20, 2019
@barbeau barbeau modified the milestones: v3.6, v3.8 Jun 23, 2020
@barbeau
Copy link
Owner Author

barbeau commented Oct 2, 2020

@barbeau barbeau modified the milestones: v3.8, v3.10 Dec 10, 2020
@barbeau
Copy link
Owner Author

barbeau commented May 18, 2021

It would be great to include Galileo OS-NMA info for spoofing detection too - https://gssc.esa.int/navipedia/index.php/Galileo_Open_Service_Navigation_Message_Authentication.

One challenge, though, is navigation message access directly from the Android APIs is not widely deployed at the moment. See column "Navigation Messages" (O) in the GPSTest Database:
https://bit.ly/gpstest-device-database

@stale
Copy link

stale bot commented Sep 15, 2021

This issue has been automatically marked as stale because it has not had recent activity. Please comment here if it is still valid so that we can reprioritize. Thank you!

@stale stale bot added the stale label Sep 15, 2021
@stale
Copy link

stale bot commented Apr 4, 2022

Closing this. Please reopen if you believe it should be addressed. Thank you for your contribution.

@stale stale bot closed this as completed Apr 4, 2022
@barbeau barbeau reopened this Apr 4, 2022
@stale stale bot removed the stale label Apr 4, 2022
@stale
Copy link

stale bot commented Oct 21, 2022

This issue has been automatically marked as stale because it has not had recent activity. Please comment here if it is still valid so that we can reprioritize. Thank you!

@stale stale bot added the stale label Oct 21, 2022
@stale stale bot removed stale labels Nov 10, 2022
@stale
Copy link

stale bot commented May 31, 2023

This issue has been automatically marked as stale because it has not had recent activity. Please comment here if it is still valid so that we can reprioritize. Thank you!

@stale stale bot added the stale label May 31, 2023
Copy link

stale bot commented Dec 19, 2023

Closing this. Please reopen if you believe it should be addressed. Thank you for your contribution.

@stale stale bot closed this as completed Dec 19, 2023
@barbeau
Copy link
Owner Author

barbeau commented Dec 19, 2023

Not stale

@barbeau barbeau reopened this Dec 19, 2023
@stale stale bot removed stale labels Dec 19, 2023
@barbeau barbeau changed the title Add GNSS spoofing detection feature Add GNSS spoofing/jamming detection feature Feb 16, 2024
@barbeau barbeau changed the title Add GNSS spoofing/jamming detection feature Add GNSS spoofing & jamming detection feature Feb 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants