Site icon Blog Zenika

Comment un hacker peut pirater votre drone !

1/ Introduction

Nous avons choisi de nous intéresser à la sécurité des drones disponibles pour les particuliers avec des prix allant de 100 à 200 euros.

Ces drones présentent tous des fonctionnalités équivalentes comme un flux vidéo en direct et peuvent être contrôlés depuis une application de smartphone ou une télécommande basse fréquence (2.4Ghz). Dans cet article nous avons volontairement mis de côté la télécommande radio et nous nous sommes focalisés sur l’application de smartphone.

Un article écrit par Benoit Decampenaire et Jean-Baptiste Caron

2/ Découverte technique

Nous avons commencé à analyser le fonctionnement de ceux-ci et voici ce qu’on a pu noter:

Le drone à tendance à utiliser sa batterie très rapidement ce qui nous a poussés à le raccorder à une batterie beaucoup plus puissante afin de ne pas être interrompus toutes les 10 minutes.

3/ Analyse des communications

La méthodologie d’attaque a été la même pour tous les drones:

Puisqu’il est possible de se connecter à l’AP sans authentification, il nous a été possible de rejoindre le réseau avec un ordinateur.

Nous nous sommes placés en Man in the Middle (MitM) entre le drone et le smartphone afin d’analyser le trafic réseau avec Wireshark.

L’objectif du MitM est d’intercepter les communications entre notre téléphone qui discute au travers de l’application et le drone.

Pour cela, on va utiliser la technique d’ARP spoofing où l’on va indiquer à travers des requêtes ARP au drone que nous sommes le smartphone et au smartphone que nous sommes le drone.
Nous sommes donc en mesure d’analyser toutes les communications entre l’application et le drone.

Voici un schéma pour représenter notre attaque :

Nous avons remarqué des similitudes dans le fonctionnement des différents drones.

RôleCommande
(1 octet)
Déplacement
(4 octets)
CRC
(1 octet)
Décollage0180 80 80 8001
Atterrissage0080 80 80 8000

Le CRC (Cyclic Redundancy Check) ici est un simple XOR de certains des octets du paquet. Il permet d’assurer l’intégrité (ou pas) du paquet.
Les octets de déplacement sont ici inutilisés et sont donc à leur valeur par défaut (0x100/2 = 0x80 ou parfois 0x7f).

0x80 représente la position par défaut et n’entraîne pas de modification de la vitesse des moteurs. En modifiant la valeur des différents octets on modifie la puissance de certains moteurs ce qui entraîne un mouvement du drone.

Nous avons identifié la position des octets responsables du déplacement du drone dans les paquets de contrôle.

Offset1234
Effectdéplacement gauche/droitemonter/descendreavancer/reculerrotation gauche droite

Dans les paquets de contrôle l’octet de commande à toujours la même valeur qui dépend du modelé. Le ou les bytes correspondant au mouvement sont modifiés et le CRC est calculé accordement.

Par exemple :

RôleCommande
(1 octet)
Déplacement
(4 octets)
CRC
(1 octet)
Rotation vers la droite0380 80 80 9013
Avancer en montant0380 95 87 8011

4/ Prise de contrôle

Sans être en MitM il est possible:

Nous avons décidé d’écrire un script pour contrôler le drone avec une manette de XBOX 360. Nous avons rencontré certaines difficultés avec des librairies python. En effet nous voulions être en mesure de contrôler finement les moteurs et nous avions aussi besoin de savoir si le joystick regagnait sa position neutre. (Ce script est inclus dans l’article).
Nous avons choisi pygame car les autres librairies que nous avons testées ne remplissaient pas ces conditions.

Nous sommes parvenus à prendre le contrôle du drone pendant qu’il était contrôlé depuis l’application.

Pour la partie flux vidéo nous sommes parvenus à demander le flux et à le recevoir mais nous avons eu de nombreux problèmes de qualité vidéo et de fluidité qui sont probablement dus à une compréhension imparfaite de notre part.
Notre démarche était la suivante :

Nous avons déterminé que certains paquets ne contiennent pas de données vidéo et nous les avons filtrés afin de ne pas les transmettre à VLC. Cependant la qualité des images restait un problème et nous avons trouvé un outil : pylwdrone (https://github.com/meekworth/pylwdrone). Il permet de communiquer avec les caméras lewei des drones et nous a permis d’avoir une image de meilleure qualité.

La démonstration est terminée ! Que pensez-vous de la sécurité des produits grand public comme les drônes ? Des expériences à partager ?


Découvrez nos formations Cybersécurité

Auteur/Autrice

Quitter la version mobile