Angriffe auf zivile UAVs

  • 15.05.2023

Während dieses Projekts haben wir mögliche Angriffe und Gegenmaßnahmen gegen zivile UAVs untersucht. Günstige zivile Drohnen sind längst nicht mehr nur ein Hobby für FPV-Racer und Filmemacher, sondern stellen auch eine Gefahr für die Flugsicherheit und die Privatsphäre dar. Sie werden im Einsatzgebiet zur Aufklärung gegnerischer Kräfte oder zur Bekämpfung mit tödlicher Präzision eingesetzt.

Inhalt

  1. Motivation
  2. Einschränkungen und Umfang
  3. Aufbau und Hardware
  4. Untersuchung der Angriffsfläche
  5. Abfangen und Übernehmen von Videostreams
  6. Jamming und Spoofing von Fernsteuerungen
  7. Weitere Angriffsvektoren
  8. Erkennung
  9. Fazit
  10. Referenzen

1. Motivation

Auf dem modernen Schlachtfeld ist Aufklärung alles, und zivile Drohnen haben sich dabei als äußerst wertvolle Werkzeuge erwiesen. Sie liefern Zielinformationen für Artillerie oder transportieren Sprengladungen für Sabotageakte und präzise Angriffe. Auch außerhalb von Kampfgebieten stellen sie eine erhebliche Gefahr für die Flugsicherheit und die allgemeine Privatsphäre dar. Diese Umstände machen Drohnen zu interessanten Zielen für Fernangriffe – ein Thema, das wir in diesem Beitrag näher untersuchen wollten.

2. Einschränkungen und Umfang

Aufgrund begrenzter Zeit- und Budgetressourcen haben wir unsere Forschung hauptsächlich auf relativ günstige chinesische FPV-Drohnen konzentriert. Unsere Experimente beschränkten sich ausschließlich auf Low-Power-Soft-Kill-Systeme, da Hard-Kill-Maßnahmen wie Netze, Geschosswerfer oder leistungsstarke Störsender eine hohe Wahrscheinlichkeit haben, die Drohne zu zerstören oder Kollateralschäden zu verursachen.

3. Aufbau und Hardware

Drohne

Die Hauptkriterien bei der Auswahl der Drohne waren Verfügbarkeit und Kompatibilität mit unserer bestehenden FPV-Hardware. Konkret musste sie das FrSky-D8-Protokoll unterstützen und Videosignale im 5,8-GHz-Band senden. Die finale Entscheidung fiel auf die Mobula 6 von Happymodel.

Unsere FPV-Hardware bestand aus der Fernsteuerung Radiomaster T8 Lite und einem einfachen Paar VTX-Goggles von HGLRC.

SDR (Software Defined Radio)

Um flexibel Daten auf unterschiedlichen Frequenzbändern senden und empfangen zu können, benötigten wir ein Software Defined Radio. Aufgrund seines günstigen Preises und der Unterstützung aller benötigten Frequenzen (1 MHz – 6 GHz) entschieden wir uns für den HackRF One.

Da der HackRF für einige unserer Tests nicht genügend Ausgangsleistung bot, setzten wir zusätzlich einen Leistungsverstärker ein. Zur weiteren Filterung kam außerdem ein 2,4-GHz-Bandpassfilter zum Einsatz.

Antennen

Für die Videoübertragung nutzten wir eine der 5,8-GHz-Antennen der FPV-Brille. Für das omnidirektionale Erfassen und Stören der RC-Signale verwendeten wir eine 2,4-GHz-Antenne einer ALFA-WLAN-Karte. Um ein gerichteteres und kontrollierteres Störfeld zu erhalten, setzten wir zusätzlich eine 2,4-GHz-Yagi-Antenne ein.

Software

Zur Analyse und Wiedergabe von RC-Signalen verwendeten wir hauptsächlich den Universal Radio Hacker (URH). Für das Abfangen und (De-)Modulieren der Videoübertragungen nutzten wir SDRangel. Unsere Störsender wurden mit GNU Radio und einigen eigenen Blöcken aufgebaut. Die Drohne selbst wurde mit Betaflight konfiguriert.

4. Untersuchung der Angriffsfläche

Die meisten FPV-Drohnen bieten zwei primäre Angriffsvektoren: den Videostream, der von der Drohne gesendet und von der FPV-Brille empfangen wird, sowie das RC-Signal, das von der Fernsteuerung gesendet und vom Flight Controller der Drohne interpretiert wird.

Unsere Drohne nutzt das 5,8-GHz-Band zur Videoübertragung und das 2,4-GHz-Band für die Fernsteuerung. Da in den USA nahezu alle Consumer-Funkgeräte bei der FCC registriert sein müssen, lassen sich die genauen Frequenzbereiche für Geräte wie unsere Fernsteuerung leicht ermitteln. Diese Informationen sind in der öffentlich zugänglichen FCC-Datenbank anhand der eindeutigen Geräte-ID abrufbar. Unsere Fernsteuerung nutzt beispielsweise den Bereich 2416–2466 MHz bei einer Ausgangsleistung von 43,9 mW.

Die Frequenz des Videosignals kann vor dem Flug vom Betreiber relativ frei gewählt werden. Happymodel stellt dazu eine Tabelle mit empfohlenen Kanälen bereit. Mit diesen Informationen lassen sich die Signale stören (jam), fälschen (spoofen) und abfangen.

Andere Drohnen bieten zusätzliche Angriffsflächen, etwa GPS oder Drohnen-Identifikationsprotokolle (z. B. DJI DroneID), mit denen sich Drohne und Pilot verfolgen lassen. GPS kann zudem manipuliert werden, um Geofencing zu umgehen oder die Return-to-Home-Funktion zu missbrauchen.

5. Abfangen und Übernehmen von Videostreams

Wie oben erwähnt, kann der Drohnenpilot frei einen Kanal im 5,8-GHz-Spektrum wählen, um das Videosignal zu senden. Der erste Schritt beim Abfangen oder Übernehmen des Streams ist daher das Ermitteln der verwendeten Frequenz. Dies gelingt relativ einfach mit einem Spektrumanalysator, der grob auf die Mitte des 5,8-GHz-Bands eingestellt ist. Anschließend wird die Frequenz langsam nach oben und unten verschoben, während man den Waterfall-Plot beobachtet. Selbst aus größerer Entfernung lässt sich das Videosignal problemlos erkennen.

Sobald die ungefähre Sendefrequenz bekannt ist, können wir entweder den Live-Stream empfangen oder eigene Daten senden, um dem Piloten die Sicht zu nehmen. Hat der Pilot keine direkte Sichtverbindung zur Drohne, führt dies in den meisten Fällen zu einem Absturz. Zudem kann er das Frequenzband nicht einfach ändern, da dafür eine kabelgebundene Verbindung zu einem Computer erforderlich wäre.

Wichtig ist, dass die Sendeantenne auf den Piloten und seine FPV-Brille ausgerichtet ist – nicht auf die Drohne selbst. Je geringer die Entfernung zum Piloten oder je stärker das gesendete Signal, desto höher ist die Erfolgswahrscheinlichkeit des Angriffs.

Da unsere Drohne relativ einfach aufgebaut ist, nutzt sie ein analoges Videosignal. Mit dem ATV-Demodulator in SDRangel können wir diesen Stream demodulieren und anzeigen. Dieser (De-)Modulator unterstützt zwar keine Farben, obwohl dies theoretisch möglich wäre.

Genauso wie wir das Signal demodulieren können, lassen sich auch analoge Signale aus MP4- oder PNG-Dateien modulieren und als (farbloses) Video aussenden.

Wenn wir kein eigenes Video einspeisen wollen, können wir stattdessen einfach Rauschen senden, um das Signal der Drohne zu stören.

Ein einfaches Beispiel mit GNU Radio:

Für maximale Reichweite und Effektivität kann zusätzlich ein Verstärker eingesetzt werden.

Auf diese Weise erreichten wir eine zuverlässige Übernahme bzw. Störung bis zu einer Entfernung von etwa 5 Metern. In größerer Distanz war die Störung zwar sichtbar, aber nicht stark genug, um den Flug effektiv zu beeinträchtigen. Auch die vom Piloten in Betaflight konfigurierte Sendeleistung der Drohne hatte einen deutlichen Einfluss auf den Erfolg des Jammings.

6. Jamming und Spoofing von Fernsteuerungen

Während unserer Untersuchungen und Messungen stellten wir fest, dass das von unserer Drohne verwendete FrSky-Protokoll auf FHSS (Frequency-Hopping Spread Spectrum) basiert. Das bedeutet, dass – im Gegensatz zum 5,8-GHz-Videosignal, das nur eine einzige Frequenz nutzt – die RC-Übertragung auf viele kleinere Teilbänder aufgeteilt ist. Das Signal springt sehr schnell in pseudozufälliger Weise zwischen diesen Bändern hin und her, was es deutlich unempfindlicher gegenüber Störungen und Jamming macht.

Der Seed, der das Sprungmuster bestimmt, wird beim initialen Binding mit der Fernsteuerung ausgetauscht. Durch das Aufzeichnen und Analysieren der Signale konnten wir feststellen, dass die Drohnenkommunikation 49 Kanäle mit einem Abstand von 1,5 MHz nutzt, was einer Gesamtbandbreite von rund 70 MHz entspricht. Da unser SDR jedoch nur eine Bandbreite von 20 MHz senden konnte, stellte dies eine erhebliche Herausforderung dar.

Unser erster Ansatz bestand darin, verschiedene RC-Befehle wie Disarm (vollständige Deaktivierung der Flugsteuerung) oder chaotische Steuerbefehle aufzuzeichnen, die die Drohne zum Absturz bringen könnten. Durch die Analyse der Signale der Fernsteuerung ermittelten wir einige der verwendeten Kanäle und deren exakte Frequenzen und versuchten, diese Signale in einer Endlosschleife wiederzugeben. Unsere Hoffnung war, zufällig einen der Kanäle zu treffen, genau in dem Moment, in dem die Drohne dort Befehle erwartete. Dafür musste unser Signal stärker sein als das der Fernsteuerung. Nach mehreren Versuchen gelang es uns tatsächlich, die Drohne gelegentlich zum Absturz zu bringen. Für einen zuverlässigeren Angriff hätte man jedoch das komplette Frequenzspektrum analysieren, den FHSS-Seed berechnen und den jeweils nächsten Kanal vorhersagen müssen.

Da dieser Replay-Angriff zu unzuverlässig war, versuchten wir als Nächstes einen Jamming-Ansatz. Anstatt gefälschte Steuerbefehle zu senden, erzeugten wir möglichst viel Rauschen mit möglichst hoher Leistung, um das Signal der Fernsteuerung zu überdecken und die Verbindung der Drohne zu unterbrechen. Je nach konfiguriertem Failsafe würde die Drohne dann entweder landen, zu vordefinierten GPS-Koordinaten zurückkehren oder – wie in unserem Fall – einfach zu Boden fallen.

Da wir die gesamten 70 MHz nicht gleichzeitig stören konnten, mussten wir einen etwas ausgefeilteren Störsender entwickeln. Die effektivsten Jammer nutzen sogenanntes protokollbewusstes Jamming, bei dem der FHSS-Seed berechnet und gezielt die jeweils nächsten Kanäle gestört werden. Dies erfordert entweder zwei SDRs oder ein voll-duplex-fähiges SDR – beides stand uns nicht zur Verfügung. Deshalb entschieden wir uns für eine einfachere Methode: Sweep-Jamming.

Dabei wird nicht nur eine einzelne Frequenz gestört, sondern ein ganzer Frequenzbereich in einer Art Kurve kontinuierlich durchlaufen, um möglichst viel Rauschen über eine größere Bandbreite zu verteilen. Je breiter der Bereich, desto geringer die Effektivität pro Frequenz. Für unseren Angriff wählten wir 2416 MHz als Untergrenze und 2466 MHz als Obergrenze.

Um genügend Leistung zu haben, um das Signal der Fernsteuerung zu überdecken, kaskadierten wir drei Verstärker mit einer Gesamtverstärkung von 30 dBm.

Zuerst testeten wir unsere omnidirektionale 2,4-GHz-Antenne. Damit konnten wir die Drohne in einem Radius von etwa 2 Metern effektiv stören.

Jammer aktiviert bei 11 Sekunden (Omni):

Anschließend testeten wir unsere Yagi-Antenne. Sobald die Drohne in den Abstrahlwinkel der Antenne flog, verlor sie sofort die Verbindung. Mit der richtigen Ausrichtung und Rotation erreichten wir eine zuverlässige Störreichweite von etwa 3 Metern.

Jammer aktiv (Yagi):

Der Erfolg des Jammings hing natürlich auch von der Entfernung der Fernsteuerung zur Drohne ab. Die oben genannten Reichweiten sind jene, bei denen die Drohne selbst dann abstürzte, wenn sich die Fernsteuerung relativ nahe befand. Obwohl das Dekodieren der Steuerbefehle technisch möglich und für Reverse Engineering interessant ist, hielten wir es für Angriffe auf die Drohne oder den Piloten selbst für wenig relevant.

7. Weitere Angriffsvektoren

Einige weitere interessante Angriffsvektoren, die jedoch für unsere Drohne nicht direkt relevant waren:

GPS

Viele Drohnen verlassen sich auf GPS für unterschiedliche Navigationsaufgaben – sei es, um das Eindringen in gesperrte Lufträume zu verhindern oder um nach einem Verbindungsabbruch zur Fernsteuerung automatisch zum Startpunkt zurückzukehren. GPS ist jedoch ein extrem schwaches Signal und daher sehr anfällig für Jamming- und Spoofing-Angriffe. Im Jahr 2011 gelang es dem Iran, das GPS-Navigationssystem einer amerikanischen RQ-170-Drohne zu manipulieren und sie zur Landung auf iranischem Gebiet zu zwingen.

DJI Drone ID (oder Äquivalent)

Um den Missbrauch von Drohnen besser verfolgen zu können, hat DJI das DroneID-Protokoll eingeführt. Dieses sendet kontinuierlich die exakte Position der Drohne und des Piloten. Mit spezieller Hardware können Strafverfolgungsbehörden diese Daten auslesen. Laut DJI sind diese Informationen verschlüsselt – Forscher der Ruhr-Universität Bochum konnten sie jedoch problemlos empfangen und dekodieren. Dies ist besonders gefährlich für Soldaten, die solche Drohnen zur Aufklärung nutzen: Ein gut ausgestatteter Gegner könnte die Position des Piloten ermitteln und gezielt angreifen. Es wäre daher ratsam, die Firmware anzupassen und die DroneID-Funktion vor dem Feldeinsatz zu deaktivieren. Nach der neuen EU-Norm EN 4709 müssen alle Drohnen, die nach Januar 2024 hergestellt werden, eine ähnliche Funktion (Direct Remote ID) implementieren.

Bild: https://github.com/RUB-SysSec/DroneSecurity

Firmware

Die Firmware, die die zahlreichen Systeme der Drohne steuert, wird entweder vom Benutzer selbst geflasht oder bereits im Werk aufgespielt. Dadurch besteht theoretisch die Möglichkeit, dass ein Hersteller oder ein Angreifer bösartige Firmware einbringt. Das würde tiefgehende Kenntnisse der internen Architektur erfordern, könnte aber sämtliche Verschlüsselung oder FHSS-Mechanismen umgehen. Während ein externer Angriff aufgrund der Komplexität eher unwahrscheinlich ist, stellen Supply-Chain-Angriffe ein reales Risiko dar – insbesondere, da viele Drohnen in China gefertigt werden. Wir haben außerdem eine statische Analyse der Betaflight-Firmware durchgeführt, konnten jedoch keine praktikabel ausnutzbaren Schwachstellen für unsere Drohne finden.

8. Erkennung

Da Jamming sehr energieintensiv ist und auch unbeteiligte Geräte stören kann, ist es nicht sinnvoll, einen Jammer dauerhaft zu betreiben. Deshalb experimentierten wir mit verschiedenen Erkennungsmethoden, die das System auf eine Drohne aufmerksam machen und den Jammer nur bei Bedarf aktivieren sollen.

RF-basiert

Die erste Idee war, die Drohne oder die Fernsteuerung anhand ihrer Funksignale zu erkennen. Dies würde eine Datenbank bekannter Funk-Fingerabdrücke erfordern und könnte mit geeigneter Hardware sogar eine Lokalisierung des Piloten ermöglichen. Unsere Versuche, ein wirklich eindeutiges Muster in den Signalen der Drohne zu finden, blieben jedoch erfolglos.

Computer-Vision-basiert

Da Funk-Fingerprinting nicht funktionierte, wählten wir einen anderen Ansatz: Eine Kamera-basierte Objekterkennung, die Drohnen visuell erkennt, etwa von einem Gebäude aus. Erkennt das System eine Drohne mit ausreichender Sicherheit, soll der Jammer aktiviert werden.

Wir verwendeten YOLOv8 als Basis und trainierten das Modell zusätzlich mit allgemeinen Drohnenbildern sowie eigenen Aufnahmen unserer Mobula 6. Dafür nahmen wir Videos der fliegenden Drohne auf und extrahierten daraus Einzelbilder.

Nach drei Trainingsläufen erkannte das Modell zuverlässig die meisten Drohnen – insbesondere die Mobula 6. Anschließend kombinierten wir das Modell mit unserem Jammer in einem Python-Tool:

(gekürzter Quellcode wie im Original)

import cv2
import supervision as sv
from ultralytics import YOLO
from jammer import top_block
from time import time

# preparing the jammer (2.426GHz)
tb = top_block()
tb.center_freq = 2426e6

# starting video capture from webcam
capture = cv2.VideoCapture(-1)
capture.set(3, 640)
capture.set(4, 480)

# loading our trained weights
model = YOLO("weights/last.pt")

box_annotator = sv.BoxAnnotator(thickness=1, text_thickness=1, text_scale=0.5)
start_ts = 0

while True:
  # read frame
  _, image = capture.read()

  # get detections from YOLOv8
  result = model(image)[0]
  detections = sv.Detections.from_yolov8(result)

  # filter detections with low confidence
  detections = detections[detections.confidence > 0.8]

  # start/stop jammer
  if len(detections) > 0:
    tb.start_jammer()
    start_ts = time()
  else:
    if time() - start_ts > 5:
      tb.stop_jammer()

  # draw box around detections
  image = box_annotator.annotate(scene=image, detections=detections)

  cv2.imshow("Detector", image)

  if cv2.waitKey(10) & 0xFF == ord("q"):
    break

capture.release()
cv2.destroyWindow("Detector")
tb.stop_jammer()

Test mit einer Kamera an der Yagi-Antenne:

9. Fazit

Aufgrund der Vielzahl an Systemen und Sensoren bieten Drohnen eine große Angriffsfläche für Cyberangriffe. In unseren Tests konnten wir den Videostream übernehmen, durch die „Augen“ der Drohne sehen und sie schließlich zum Absturz bringen. Die meisten Hersteller (mit Ausnahme von DJI) scheinen nur wenig Interesse daran zu haben, ihre Drohnen abzusichern. Während Spoofing- und Sniffing-Angriffe durch Verschlüsselung und Rolling Codes verhindert werden könnten, wird Jamming immer ein Problem bleiben. Ein Angreifer mit ausreichenden Ressourcen wird fast immer in der Lage sein, Funkverbindungen zu übersteuern.

10. Referenzen

https://www.ndss-symposium.org/ndss-paper/drone-security-and-the-mysterious-case-of-djis-droneid/
https://github.com/RUB-SysSec/DroneSecurity
https://dl.acm.org/doi/10.1145/3485272
https://kth.diva-portal.org/smash/record.jsf?pid=diva2%3A1463784&dswid=-5182
https://www.mdpi.com/1424-8220/22/4/1487
https://ieeexplore.ieee.org/document/8398711
https://ieeexplore.ieee.org/document/9217129
https://www.researchgate.net/publication/343054471_A_Drone_Detection_and_Inhibition_Tool_using_GNURadio_and_a_Raspberry_Pi
https://en.wikipedia.org/wiki/Iran%E2%80%93U.S._RQ-170_incident https://github.com/ultralytics/ultralytics https://www.kaggle.com/datasets/muki2003/yolo-drone-detection-dataset