« SE5 IdO sécurité des objets 2024/2025 b6 » : différence entre les versions
Ligne 121 : | Ligne 121 : | ||
Sur Wireshark, je peux maintenant capturer les paquets échangés lorsque j'envoie des commande de type allumer puis éteindre avec l'application mobile Nedis Smart Life :[[Fichier:Capture d’écran du 2025-01-04 14-14-32.png|gauche|vignette|434x434px|paquets TCP capturés sur wireshark]] | |||
<br clear="all"> | <br clear="all"> | ||
on peut voir ici que j'arrive à capturer les paquets TCP échangés | |||
on peut voir ici que j'arrive à capturer les paquets TCP échangés | |||
J'ai identifié les paquets avec la charge utile/la commande, | J'ai identifié les paquets avec la charge utile/la commande, | ||
Ligne 141 : | Ligne 134 : | ||
J'ai essayé de décoder les paquets que je reçois, mais il faut pouvoir prédire l'ISN | |||
'''Allumer l'interrupteur :''' | '''Allumer l'interrupteur :''' |
Version du 8 janvier 2025 à 13:38
Le but de ce module est de tester la sécurité d'objets connectés en exploitant les différentes failles possibles, qu'elles soient logicielles ou matérielles.
Partie 1 : Infrastructure WiFi
Création d'un serveur d'authentification sur capbreton
Afin de mettre en place une infrastructure WiFi, il faut un serveur d'authentification pour les éventuels utilisateurs qui tenteront de se connecter au point d'accès WiFi.
Après m'être connecté au serveur capbreton par ssh, j'ai configuré une nouvelle machine virtuelle xen appelée SE5-ling qui servira de serveur.
J'utilise la commande suivante pour me connecter à la VM :
xen console SE5-ling
Configuration réseau
Cette machine virtuelle possède deux interfaces, une première dans dans le commutateur virtuel bridgeStudents et une autre dans le VLAN 406.
Dans le fichier /etc/network/interfaces, je configure la première interface eth0 avec l'adresse 172.26.145.106 (binôme 6) pour qu'elle soit dans le sous réseau 172.26.145.0/24.
Du côté du point d'accès Cisco, j'ai configuré et déployé le SSID VM_binome_6 dans le VLAN 406 avec comme protocole de sécurité WPA2-EAP.
Du côté du serveur, avec FreeRadius, j'ai pu me connecter en tant qu'utilisateur depuis mon téléphone.
Partie 2 : Sécurité d'objets connectés
Attaque sur le Catalent TempTale
Le Catalent TempTale est un objet connecté utilisé dans la livraison de médicaments. Il suit l'évolution de la température dans les colis pendant le trajet. Cet outil permet de garantir que les produits n'ont pas été exposés à des températures inappropriées et demeurent sûrs pour la consommation. Elle possède un système de fichiers et contient un rapport des mesures enregistrées pendant la livraison.
Je vais essayer de voir ses failles au niveau logiciel puis au niveau matériel.
Partie 1 : attaque logicielle
En le branchant simplement par voie USB, la commande suivante permet de monter l'objet sur un ordianteur :
sudo mount /dev/sdb /tmp
Dans /tmp, j'ai accès au rapport de température en PDF, je peux supprimer des fichier et en créer, il s'agit d'une faille possible. Cependant, je ne peux pas modifier le contenu original car il est protégé.
Partie 2: extraction du firmware
Dans cette seconde partie, je vais tenter d'extraire le firmware directement en utilisant un Raspberry Pi 4. Cette méthode consiste à se servir de la communication SPI pour lire et copier le firmware. Un guide peut-être trouvé au lien suivant : https://hacklido.com/blog/379-firmware-extraction-from-spi-flash
J'ai d'abord ouvert l'appareil pour pouvoir ensuite dé souder la mémoire flash, je l'ai repérée sur la carte :
D'après la référence sur le composant, il s'agit d'une mémoire flash W25X40CL construite par Winbond, dont la datasheet peut-être obtenue ici : https://www.winbond.com/resource-files/w25x40cl_f%2020140325.pdf
J'ai pu récupéré la configuration des pins afin de connaître le branchement pour l'extraction du firmware.
J'ai ensuite connecté au port SPI de la raspberry
J'ai pu faire l'extraction du firmware à l'aide de cette commande :
flashrom -p linux_spi:dev=/dev/spidev0.0 -r backup.bin
téléverser dans la mémoire flash mes propres données :
sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -w modified_backup
Modifier le contenu de la flash a fonctionné car lorsque je refait une extraction de firmware sur la flash, je retrouve bien mon PDF modifié.
Attaque sur un interrupteur connecté
Je vais maintenant tenter d'attaquer un objet connecté de mon choix. J'ai choisi l'interrupteur mural Wi-Fi intelligent, il permet de commander à distance un interrupteur (connecté à une lampe par exemple) depuis un téléphone à partir du moment qu'on est connecté au Wifi sur les deux appareils.
Dans un premier temps, j'ai réalisé un boîtier pour faire fonctionner l'interrupteur en le branchant à une simple prise.
Cet objet connecté est commandé par l'application Nedis Smart Life et depuis cette dernière je peux allumer et éteindre l'interrupteur.
Pour tester la sécurité, je vais tenter de repérer les paquets envoyés sur le réseau à l'aide de Wireshark. Si cela fonctionne, je vais essayer de forger mon propre paquet qui permet d'allumer/éteindre l'interrupteur sans passer par l'application.
Tout de suite, l'un des premiers problèmes rencontrés a été que je ne puisse pas voir les paquets échangés entre mon téléphone et l'objet. J'ai tenté d'utiliser les modes Promiscuous et Monitor sur wireshark mais cela n'a toujours pas suffit.
Partie 1: Identification des cibles avec nmap
Après avoir mis mon ordinateur au réseau sur lequel se trouve le téléphone et l'interrupteur, j'ai voulu utiliser Ettercap afin de faire une attaque de type Man In The Middle, le ARP poisoning. Cependant, il faut d'abord connaître l'adresse IP des deux cibles.
Afin d'identifier l'interrupteur sur le réseau, j'ai utilisé l'utilitaire nmap. Celui-ci va scanner tous les appareils sur le sous-réseau et obtenir des informations sur le système d'exploitation avec l'option -O.
La commande suivante a permis de scanner le sous-réseau :
sudo nmap -O 192.168.1.0/24
En analysant les différents appareils relevés et en éliminant les adresses que je connaissais, j'ai pu identifier l'objet connecté ainsi que son adresse IP 192.168.1.140 :
Nmap scan report for wlan0.home (192.168.1.40) Host is up (0.21s latency). Not shown: 999 closed tcp ports (reset) PORT STATE SERVICE 6668/tcp open irc MAC Address: D8:1F:12:98:93:58 (Tuya Smart) No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
Un autre indice est le fait que Tuya smart est une entreprise spécialisée dans les appareils connectés IoT.
J'ai également pu retrouver l'adresse IP de mon téléphone (192.168.1.33) à l'aide de nmap, j'ai pu vérifier cette information en regardant dans mes paramètres réseau.
Partie 2 : Attaque MITM avec Ettercap
Avec l'adresse IP des deux cibles, je peux maintenant utiliser Ettercap.
Pour ouvrir l'interface d'Ettercap, il faut faire :
sudo ettercap -G
Les étapes pour utiliser Ettercap sont :
- Sur Ettercap faire scanner les hôtes avec le bouton avec l'icône de loupe.
- Sélectionner les cibles d'intérêt (192.168.1.133 et 192.168.1.140) et faire "add to target 1" puis "add to target 2"
- lancer l'attaque ARP poisonning (MITM) sur les deux cibles
Avec cette attaque, j'ai maintenant le trafic réseau des deux cibles (téléphone et interrupteur ) qui passe sur mon ordinateur.
Partie 3 : Sniffer les paquets sur Wireshark
Sur Wireshark, je peux maintenant capturer les paquets échangés lorsque j'envoie des commande de type allumer puis éteindre avec l'application mobile Nedis Smart Life :
on peut voir ici que j'arrive à capturer les paquets TCP échangés
J'ai identifié les paquets avec la charge utile/la commande,
Les données sont chiffrées *
J'ai réussi à capturer les paquets TCP que je ne pouvais pas voir en mode monitor.
Je remarque que dans les paquets avec le flag PUSH, le payload reste constant lorsqu'il s'agit d'allumer ou d'éteindre, j'en est déduit que les commandes envoyées sont les suivantes :
J'ai essayé de décoder les paquets que je reçois, mais il faut pouvoir prédire l'ISN
Allumer l'interrupteur :
00 00 55 aa 00 00 05 63 00 00
00 0d 00 00 00 37 33 2e 33 00 00 00 00 00 00 00
20 00 00 a0 59 4c 9c 38 f8 59 8d ee 14 f8 22 b6
c8 5e e2 7a 1a 51 f4 4a 4f aa d1 89 86 ee bf 20
d3 b2 5d 59 10 94 70 34 00 00 00 aa 55
Éteindre l'interrupteur :
00 00 55 aa 00 00 00 00 00 00
00 09 00 00 00 08 65 93 0c 22 00 00 aa 55