« SE5 IdO sécurité des objets 2024/2025 b6 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
 
(68 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
Le but de ce module est de tester la sécurité d'objets connectés ainsi que d'essayer de craquer l'un d'entre eux en exploitant les failles du matériel.
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 <small>1</small> : Infrastructure WiFi =
= Partie Infrastructure WiFi =


== Création d'un serveur d'authentification sur capbreton ==
== Création d'un serveur d'authentification sur capbreton ==
Ligne 7 : Ligne 7 :
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.  
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 qui servira de serveur.  
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.  


Pour lancer cette dernière, j'utilise la commande xen console SE5-ling 
J'utilise la commande suivante pour me connecter à la VM :  
 
  xen console SE5-ling
Pour la configuration réseau, j'ai  
 
il faut que je crée une machine virtuelle
 
Pour finir je lance xen console SE5-ling pour me connecter à la VM


== Configuration réseau ==
== Configuration réseau ==


Dans le fichier /etc/network/interfaces, je configure avec l'adresse 172.26.145.106 :  
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. 


Séance 2 :
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.'''


Séance 3 :
Du côté du serveur, avec FreeRadius j'ai créé un utilisateur pour moi et j'ai pu ensuite me connecter en tant qu'utilisateur depuis mon téléphone .


L'objectif est de comprendre et d'analyser l'objet connecté Catalent TempTale, qui suit l'évolution de la température dans les colis de médicaments. 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. On va d'abord essayer de voir ses failles au niveau logiciel puis au niveau matériel.
= Partie sécurité d'objets connectés =


Logiciel :
== Attaque sur le Catalent TempTale ==


commande mount /dev/sdb /tmp
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. 


dans /tmp, on a le rapport de température en PDF, je peux supprimer des fichier et en créer, il s'agit d'une faille possible
Je vais essayer de voir ses failles au niveau logiciel puis au niveau matériel.


Matériel :
=== Partie 1 : accès logiciel par voie USB ===
En le branchant simplement par voie USB, la commande suivante permet de monter l'objet sur un ordinateur :
sudo mount /dev/sdb /tmp
Dans /tmp, j'ai accès aux fichiers contenu dans le Temptale. L'un d'eux correspond au rapport de température en PDF que j'ai pu visualiser. Je peux supprimer des fichier et en créer de nouveaux, il s'agit donc d'une faille possible pour cet objet. 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 contenu dans la mémoire du Temptale. Un guide détaillé pour réaliser cette opération peut-être trouvé au lien suivant : https://hacklido.com/blog/379-firmware-extraction-from-spi-flash


Mémoire W25X40CL
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 :
[[Fichier:Temptale ouvert.jpg|vignette|200x200px|La mémoire flash sur la carte du Temptale|gauche]]


Microcontrôleur SAM4S2B
<br clear="all">


= Partie 2 : Sécurité d'objets connectés =
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


== Attaque sur le Catalent TempTale ==
J'ai pu récupérer la configuration des pins afin de connaître le branchement pour l'extraction du firmware.


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.
J'ai effectué le branchement utilisé dans le guide d'extraction du firmware que j'ai mentionné plus haut.
J'ai ensuite connecté au port SPI de la raspberry
[[Fichier:SetupExtraction.jpg|gauche|vignette|Extraction du firmware de la flash|317x317px]]


<br clear="all">


Partie 1 : attaque logicielle
J'ai pu faire l'extraction du firmware à l'aide de cette commande :
flashrom -p linux_spi:dev=/dev/spidev0.0 -r backup.bin
Le fichier backup.bin est une image du contenu de la flash, en analysant le fichier obtenu avec la commande file, j'ai pu déterminer qu'il s'agissait d'un '''système de fichier'''.  Cela signifie que je peux le monter avec la commande mount : 
sudo mount /dev/loop0 /mnt/backup
Je retrouve les données originelles, de la partie 1 mais cette fois-ci, je peux modifier les données librement. J'ai copié les données sur une clé USB pour traiter l'information sur mon ordinateur. Ensuite, j'ai modifié le rapport PDF pour y insérer des données éronnées comme une température trop élevée : 
[[Fichier:2719514502 2719514502 0.pdf|gauche|vignette|fichier PDF modifié avec des valeurs fausses.]] 


En le branchant simplement par voie USB, la commande suivante permet de monter l'objet sur un ordianteur :
<br clear="all">Pour finir, j'ai créé une autre image modifiée avec mes données et j'ai pu les téléverser dans la mémoire flash avec la commande suivante :
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 fichier PDF modifié.'''


sudo mount /dev/sdb /tmp
Afin de vérifier que ce type d'attaque fonctionne, il faudrait souder à nouveau la flash sur la clé TempTale et regarder si le contenu du rapport de température est toujours modifié.


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é. De plus, il suffit de retirer l'interface USB pour ne plus pouvoir y accéder.
== 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. Grâce aux outils du Fabricarium, j'ai modifié une boîte en plastique pour qu'elle puisse contenir les parties électriques haute tension de l'objet. Ce boîtier permet ainsi d'utiliser et d'étudier l'objet connecté en toute sécurité. 
[[Fichier:Boitier b6.jpg|vignette|300x300px|Boîtier final|gauche]] 


Partie 2:


Matériel :


Dans cette seconde partie, je vais tenter d'extraire le firmware directement en utilisant un Raspberry Pi 4. Cette méthode utilise dont unguide peut-être trouvé au lien suivant : https://hacklido.com/blog/379-firmware-extraction-from-spi-flash
Cet objet peut être commandé à distance par l'application mobile '''Nedis Smart Life''' et je peux allumer et éteindre l'interrupteur.  


J'ai d'abord ouvert l'appareil pour pouvoir ensuite dé souder la mémoire flash,


D'après la référence sur le composant, il s'agit d'une flash W25X40CL, dont la datasheet peut-être obtenue ici : https://www.winbond.com/resource-files/w25x40cl_f%2020140325.pdf
Pour tester la sécurité, je vais tenter de '''sniffer 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.


J'ai pu récupéré la configuration des pins afin de connaître le branchement pour l'extraction du firmware.
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 pas suffit.''' 




Il s'agit de la mémoire XXX faite par XXX.
<br clear="all">
Ci-dessous les pins
Photo datasheet


téléverser dans la mémoire flash mes propres données :
=== Partie 1: Identification des cibles avec nmap  ===
sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -w modified_backup


== 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. 


Pour le faire fonctionner j'ai fait le cablage suivant :
Après avoir mis mon ordinateur sur le même réseau auquel sont connectés 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. 


Ensuite, j'ai modifier le boîtier afin que la prise soit sécurisée électriquement.
Afin d'identifier l'interrupteur connecté 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 leur système d'exploitation avec l'option -O.


Il est commandé par l'application Nedis Smart Life et depuis l'application je peux allumer et éteindre l'interrupteur.
La commande suivante a permis de scanner le sous-réseau :
sudo nmap -O 192.168.1.0/24


Dans un premier temps, je vais tenter de repérer les paquets envoyés sur le réseau à l'aide de Wireshark. Ensuite, je vais forger mon propre paquet qui permet d'allumer/éteindre l'interrupteur.
Ci-dessous, la sortie de la commmande nmap, 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  :
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 <nowiki>https://nmap.org/submit/</nowiki> ).
D'après mes recherches, '''Tuya Smart''' est une entreprise spécialisée dans les appareils connectés, c'est donc un indice pour facilement repérer ce genre d'appareils IoT.  


Malgré le mode Promiscuous et monitor, je ne suis pas arrivé à capturer les paquets envoyés par mon téléphone à l'interrupteur connecté.  
On peut voir que l'interrupteur utilise le port 6668 pour communiquer et que sont adresse sur le sous-réseau est '''192.168.1.140.''' 


J'ai également pu retrouver l'adresse IP de mon téléphone (192.168.1.33) à l'aide de nmap et vérifier cette information en regardant dans mes paramètres réseau.


Avec l'outil nmap, j'ai déterminé l'adresse IP de l'interrupteur connecté: 192.168.109.140
=== Partie 2 : Attaque MITM avec Ettercap ===


Utilisation de Ettercap : Après avoir connecté mon ordinateur, j'ai utilisé Ettercap afin de faire une attaque Man In The Middle. Pour se faire Ettercap utilise l'ARP poisoning.


ouvrir ettercap : sudo ettercap -G
Avec l'adresse IP des deux cibles, je peux maintenant utiliser Ettercap.


utiliser la commande nmap -O
Pour ouvrir l'interface d'Ettercap, il faut faire :
sudo ettercap -G


J'ai réussi à capturer les paquets TCP que je ne pouvais pas voir en mode monitor.


Je vais tenter de relancer la séquence pour voir si je suis capable de commander l'interrupteur sans passer par l'application mais en injectant mon propre paquet sur le réseau.
Les étapes pour utiliser Ettercap sont :


* 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 le bouton avec l'icône planète et sélectionner le type d'attaque.


[[Fichier:InterfaceEttercap.png|gauche|vignette|390x390px|Interface d'Ettercap avec attaque MITM sur les deux adresses cibles]]


192.168.1.0 pour scanner tous les appareils sur le sous réseaux. Cela va donner des informations sur le type d'OS, ... En faisant cela j'ai pu déterminer le type d'appareil de chaque adresse IP et identifier mes cibles (téléphone et interrupteur connecté)
<br clear="all">


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"


ancer l'attaque ARP poisonning (MITM) sur les deux cibles
Avec cette attaque mise en place, j'ai maintenant le trafic réseau des deux cibles (téléphone et interrupteur ) qui passe sur mon ordinateur.


Ouvrir wireshark : avec sudo wireshark
=== Partie 3 : Capture des paquets sur Wireshark ===


on peut voir ici que j'arrive à capturer les paquets TCP  
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]]


J'ai essayé de décoder les paquets que je reçois, il faut pouvoir prédire l'ISN


J'ai identifié les paquets avec la charge utile/la commande,
<br clear="all">


Les données sont chiffrées *


En parcourant les différents paquets échangés, J'ai tenté de repérer les paquets avec la commande allumer/éteindre. Certains possèdent le flag PSH ou PUSH qui signifie que les données doivent être transmises à l'application le plus rapidement possible. En analysant ces paquets, J'ai remarqué que le payload reste identique lorsqu'il s'agit d'allumer ou d'éteindre. 


Je remarque que dans les paquets PUSH, le payload reste constant lorsqu'il s'agit d'allumer ou d'éteindre, j'en est déduit que le message transmis est le suivant :
'''Je fait donc l'hypothèse que les commandes pour contrôler l'interrupteur sont les suivantes :'''




allumer l'interrupteur :  
'''Allumer l'interrupteur :'''


00 00 55 aa 00 00 05 63 00 00
00 00 55 aa 00 00 05 63 00 00
Ligne 143 : Ligne 161 :




éteindre l'interrupteur :
 
'''Éteindre l'interrupteur :'''


00 00 55 aa 00 00 00 00 00 00  
00 00 55 aa 00 00 00 00 00 00  


00 09 00 00 00 08 65 93 0c 22 00 00 aa 55
00 09 00 00 00 08 65 93 0c 22 00 00 aa 55
D'après mes recherches, 55 aa est le header fixé par le protocole de communication qu'utilise Tuya Smart :https://developer.tuya.com/en/docs/iot/tuya-cloud-universal-serial-port-access-protocol?id=K9hhi0xxtn9cb. 
J'ai essayé de forger mes propres paquets avec le module scapy sur python. Cela n'a pas fonctionné car il faut pouvoir prédire le sequence number (ISN) de l'ACK TCP. Après des tests successifs, je n'ai pas trouvé de suite logique qui aurait pu me permettre de déterminer les prochains sequence numbers.
Etant donné que j'ai déterminé le port utilisé ('''6668''') et l'adresse IP de l'objet, j'ai tenté d'utiliser '''netcat''' pour envoyer les séquences d'allumage ou d'extinction de l'interrupteur. sequence.txt contient les octets de la commande.
  netcat 192.168.1.140 6668 < sequence.txt
Malheureusement, cela n'a pas fonctionné, l'interrupteur ne réagit pas aux données envoyées. Mon hypothèse est que l'objet connecté utilise la technologie cloud. En effet, le téléphone peut ne pas être sur le même réseau et commander l'objet à partir du moment qu'ils sont tous les deux connectés à internet. Si c'est le cas alors il est probable que la sécurité du serveur cloud empêche la commande de l'interrupteur par simple renvoi des paquets.
Monôme 6: LING Dylan

Version actuelle datée du 9 janvier 2025 à 17:12

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 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 créé un utilisateur pour moi et j'ai pu ensuite me connecter en tant qu'utilisateur depuis mon téléphone .

Partie 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 : accès logiciel par voie USB

En le branchant simplement par voie USB, la commande suivante permet de monter l'objet sur un ordinateur :

sudo mount /dev/sdb /tmp

Dans /tmp, j'ai accès aux fichiers contenu dans le Temptale. L'un d'eux correspond au rapport de température en PDF que j'ai pu visualiser. Je peux supprimer des fichier et en créer de nouveaux, il s'agit donc d'une faille possible pour cet objet. 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 contenu dans la mémoire du Temptale. Un guide détaillé pour réaliser cette opération 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 :

La mémoire flash sur la carte du Temptale


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érer la configuration des pins afin de connaître le branchement pour l'extraction du firmware.


J'ai effectué le branchement utilisé dans le guide d'extraction du firmware que j'ai mentionné plus haut.

J'ai ensuite connecté au port SPI de la raspberry

Extraction du firmware de la flash


J'ai pu faire l'extraction du firmware à l'aide de cette commande :

flashrom -p linux_spi:dev=/dev/spidev0.0 -r backup.bin

Le fichier backup.bin est une image du contenu de la flash, en analysant le fichier obtenu avec la commande file, j'ai pu déterminer qu'il s'agissait d'un système de fichier. Cela signifie que je peux le monter avec la commande mount :

sudo mount /dev/loop0 /mnt/backup

Je retrouve les données originelles, de la partie 1 mais cette fois-ci, je peux modifier les données librement. J'ai copié les données sur une clé USB pour traiter l'information sur mon ordinateur. Ensuite, j'ai modifié le rapport PDF pour y insérer des données éronnées comme une température trop élevée :

fichier PDF modifié avec des valeurs fausses.


Pour finir, j'ai créé une autre image modifiée avec mes données et j'ai pu les téléverser dans la mémoire flash avec la commande suivante  :

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 fichier PDF modifié.

Afin de vérifier que ce type d'attaque fonctionne, il faudrait souder à nouveau la flash sur la clé TempTale et regarder si le contenu du rapport de température est toujours 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. Grâce aux outils du Fabricarium, j'ai modifié une boîte en plastique pour qu'elle puisse contenir les parties électriques haute tension de l'objet. Ce boîtier permet ainsi d'utiliser et d'étudier l'objet connecté en toute sécurité.

Boîtier final


Cet objet peut être commandé à distance par l'application mobile Nedis Smart Life et je peux allumer et éteindre l'interrupteur.


Pour tester la sécurité, je vais tenter de sniffer 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 pas suffit.



Partie 1: Identification des cibles avec nmap

Après avoir mis mon ordinateur sur le même réseau auquel sont connectés 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 connecté 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 leur 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

Ci-dessous, la sortie de la commmande nmap, 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  :

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/ ).

D'après mes recherches, Tuya Smart est une entreprise spécialisée dans les appareils connectés, c'est donc un indice pour facilement repérer ce genre d'appareils IoT.

On peut voir que l'interrupteur utilise le port 6668 pour communiquer et que sont adresse sur le sous-réseau est 192.168.1.140.

J'ai également pu retrouver l'adresse IP de mon téléphone (192.168.1.33) à l'aide de nmap et 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 :

  • 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 le bouton avec l'icône planète et sélectionner le type d'attaque.
Interface d'Ettercap avec attaque MITM sur les deux adresses cibles



Avec cette attaque mise en place, j'ai maintenant le trafic réseau des deux cibles (téléphone et interrupteur ) qui passe sur mon ordinateur.

Partie 3 : Capture des 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 :

paquets TCP capturés sur wireshark




En parcourant les différents paquets échangés, J'ai tenté de repérer les paquets avec la commande allumer/éteindre. Certains possèdent le flag PSH ou PUSH qui signifie que les données doivent être transmises à l'application le plus rapidement possible. En analysant ces paquets, J'ai remarqué que le payload reste identique lorsqu'il s'agit d'allumer ou d'éteindre.

Je fait donc l'hypothèse que les commandes pour contrôler l'interrupteur sont les suivantes :


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


D'après mes recherches, 55 aa est le header fixé par le protocole de communication qu'utilise Tuya Smart :https://developer.tuya.com/en/docs/iot/tuya-cloud-universal-serial-port-access-protocol?id=K9hhi0xxtn9cb.

J'ai essayé de forger mes propres paquets avec le module scapy sur python. Cela n'a pas fonctionné car il faut pouvoir prédire le sequence number (ISN) de l'ACK TCP. Après des tests successifs, je n'ai pas trouvé de suite logique qui aurait pu me permettre de déterminer les prochains sequence numbers.


Etant donné que j'ai déterminé le port utilisé (6668) et l'adresse IP de l'objet, j'ai tenté d'utiliser netcat pour envoyer les séquences d'allumage ou d'extinction de l'interrupteur. sequence.txt contient les octets de la commande.

 netcat 192.168.1.140 6668 < sequence.txt

Malheureusement, cela n'a pas fonctionné, l'interrupteur ne réagit pas aux données envoyées. Mon hypothèse est que l'objet connecté utilise la technologie cloud. En effet, le téléphone peut ne pas être sur le même réseau et commander l'objet à partir du moment qu'ils sont tous les deux connectés à internet. Si c'est le cas alors il est probable que la sécurité du serveur cloud empêche la commande de l'interrupteur par simple renvoi des paquets.


Monôme 6: LING Dylan