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

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Ligne 185 : Ligne 185 :


=== 4. Réinjection du programme ===
=== 4. Réinjection du programme ===
La réinjection du programme est assez simple avec le programmateur STM32. 
Nous modifions une valeur dans le code et observons un changement sur le graphique des températures dans le PDF généré par la clé. En revanche, nous ne comprenons pas encore de quelle manière cela affecte précisément le graphique.


=== 5. Vérification du résultat ===
=== 5. Vérification du résultat ===

Version du 8 janvier 2025 à 16:20

Configuration du routeur wifi pour notre VLAN 11

Le VLAN est apparent sur le réseau, mais il n'y a pas d'accès Internet.

Pourtant, il semble que nous ayons la même configuration que les binômes qui avaient un wifi fonctionnel.

Configuration de l'interface eth0 (172.26.145.101) et eth1 (172.16.11.111) sur la VM SE5-WIJSMAN-LEFRANC sur Capbreton.

Dans la VM, configuration de FreeRADIUS:

/etc/freeradius/3.0/users:

louis Cleartext-Password := "glopglop"      
MS-CHAP-Use-NTLM-Auth := Yes

/etc/freeradius/3.0/clients.conf:

client wifi_ap {
        ipaddr = 172.26.145.1
        secret = glopglop
        shortname = VM_binome_11
}

Sur le routeur CISCO:

Mise en place d'un point d'accès VM_binome_11 avec comme mot de passe "glopglop" en suivant les commandes du wiki.

ssh -l admin -o KexAlgorithms=diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 -o HostKeyAlgorithms=ssh-rsa -c aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc 172.26.145.1
  ...
       aaa new-model
       aaa authentication login eap_binome_11 group radius_binome_11
       radius-server host 172.26.145.101 auth-port 1812 acct-port 1813 key glopglop
       aaa group server radius radius_binome_11
         server 172.26.145.101 auth-port 1812 acct-port 1813
       !
       ...
       dot11 ssid VM_binome_11
         vlan 411
         authentication open eap eap_binome_11
         authentication network-eap eap_binome_11
         authentication key-management wpa
         mbssid guest-mode
       !
       ...
       interface Dot11Radio0
         encryption vlan 411 mode ciphers aes-ccm
         ...
       !
       ...
       interface Dot11Radio0.11
         encapsulation dot1Q 411
         bridge-group 11
       !
       interface GigabitEthernet0.11
         encapsulation dot1Q 411
         bridge-group 11
       !

Piratage d’objets connectés

Objectif :

Notre objectif dans un premier temps est de pirater une sonnette sans fil.

Ensuite, nous allons également tenter de cracker un capteur de température LIBERO CS.

Sonnette sans fil

Matériel utilisé :

  • PC avec GNU Radio
  • SDR HackRF One

Méthodologie :

Screenshot from 2024-10-21 14-25-36.png
  1. Analyse du signal : Nous commençons par analyser le signal envoyé lorsqu'on appuie sur le bouton de la sonnette à l'aide d'un analyseur de spectre.
  2. Analyse des trames : Nous analysons la trame envoyée à chaque appui sur le bouton. Après une série de tests, nous avons découvert que la trame envoyée est toujours la même.
  3. Reproduction du signal : Dans un deuxième temps, nous mettons en place un programme sur GNU Radio pour reproduire le signal, afin de faire croire à la sonnette que le bouton a été appuyé.

Première méthode (PARROT) :

On écoute la télécommande et on réémet le signal.

Méthode PARROT où l'on enregistre pour réémettre.

On utilise le programme GNU Radio suivant :

Méthode PARROT où l'on enregistre pour réémettre.

Cela ne fonctionne pas, nous avons donc opté pour une autre méthode.

Méthode 2 : Recréation du signal

Nous avons créé un programme GNU Radio plus complexe qui recrée le signal de la télécommande.

Le signal est le suivant :

75 trames avec le codage binaire suivant :

0001010011000111100110000

Visualisation de la trame émise par le SDR.
Programme qui recrée le signal à émettre et l'émet.

Les timings sont les suivants :

  • 0 : 0,2 ms high et 0,6 ms low
  • 1 : 0,6 ms high et 0,2 ms low

Nous prenons le PGCD de 6 et 2, qui est 2, donc on prend 0,2 ms comme plus petit pas.

On code de manière suivante :

  • 0 = 1000
  • 1 = 1110

Par exemple, pour coder le message "101", on envoie 1110 1000 1110.

Nous utilisons un sampling_rate de 10 MHz, mais nous voulons envoyer un signal dont la fréquence maximale est de 5 kHz.

Nous utilisons donc un bloc de rééchantillonnage.

Cela fonctionne et nous parvenons à actionner la sonnette via la SDR !

Capteur de température LIBERO

Le but est de trouver un moyen de contourner le système pour lui faire retenir en mémoire des valeurs différentes de celles normales.

Nous avons démonté le boîtier afin de visualiser le PCB et les composants.

Capteur de température

Après une analyse, on peut remarquer le capteur de température, comme indiqué sur l'image suivante.

  • Une possibilité serait de modifier le comportement du capteur en ajoutant une résistance, par exemple.
  • Une autre possibilité serait de reprogrammer le microcontrôleur afin de modifier son comportement. Il s'agit d'un STM32L073CZTb.

Pour cela, il faut mapper chaque pin pour pouvoir se connecter directement sur les testpoints.

Le but est déjà de repérer les pins qui serviront à la programmation, soit :

  • NRST (Pin 7) - Pin Reset.
  • SWDIO (Pin 34, PA13) - Serial Wire Debug Data Input/Output.
  • SWCLK (Pin 35, PA14) - Serial Wire Debug Clock.
  • VSS (Pin 8 ou 33) - Pin Ground.
Ghidra found DR
  • Modification de la valeur du registre chargé dans la variable
    VDD (Pin 9 ou 36) - Power supply.

Étape de contournement :

  1. Récupération du programme en se connectant sur les pins du port SWD
  2. Analyse du programme via Ghidra
  3. Modification du programme afin de mettre en défaut le système
  4. Réinjection du programme via le port SWD
  5. Vérification de la bonne réalisation du contournement

1. Récupération du programme

Avec le logiciel STM32 programmeur, il est possible en se connectant via un ST Link de récupérer le programme avec un READ ALL qui donne un fichier .bin.

2. Analyse du programme

Avec le logiciel Ghidra, il est possible de charger le fichier .bin en configurant qu'il s'agit d'un programme ARM Cortex LE 32 bits.

Le logiciel Ghidra fait ensuite une analyse du code, permettant de récupérer une vue assembleur du programme et aussi une vue en C.

On peut aussi, via l'extension Ghidra SVD loader, charger le fichier SVD correspondant au STM32 afin d'avoir un affichage de la correspondance des valeurs des registres avec la mémoire du STM32.

Dans le programme, on peut retrouver :

Le programme (adresse : 0x02E850).

On utilise un gestionnaire pour rechercher la chaîne "pdf".

À partir de l'adresse 0x2B040, se trouve la mémoire où est stocké le fichier PDF, occupant 24 Ko. Le début du PDF commence à l'adresse 0x8300. Le dernier mot du PDF se trouve à l'adresse 0x2414B.

De l'adresse 0x237C8 jusqu'à 0x24163, se trouve le template du PDF.

De l'adresse 0x9010 jusqu'à 0x9384, se trouvent les valeurs dans la mémoire.

Cette dernière section est celle qui nous intéresse, car nous allons tenter de modifier la valeur que le programme récupère.

3. Modification du programme

En cherchant à modifier ce qui est récupéré dans le programme via l'ADC du STM32, nous cherchons le registre ADC_DR qui correspond au décalage 0x40 de l'ADC. Nous trouvons à quel endroit la mesure est faite.

En choisissant, pour l'exemple, de modifier le programme afin que ce qui sera récupéré dans ce programme ne soit plus la valeur des données de l'ADC, mais la valeur du registre des interruptions ISR, ce qui sans nul doute va générer un problème concernant l'affichage des températures dans le PDF.

4. Réinjection du programme

La réinjection du programme est assez simple avec le programmateur STM32.

Nous modifions une valeur dans le code et observons un changement sur le graphique des températures dans le PDF généré par la clé. En revanche, nous ne comprenons pas encore de quelle manière cela affecte précisément le graphique.

5. Vérification du résultat