DVID Writeup 02 - Firmware - Hardcoded password
Si vous n’êtes pas encore familiarisé avec le projet Damn Vulnerable Iot Device (DVID), je vous encourage à lire la page de présentation du projet.
Objectif de ce challenge
Un message confidentiel est stocké sur le firmware mais protégé par un mot de passe.
Flash du firmware sur la carte DVID
Tout d’abord, nous allons flasher le firmware sur la carte DVID. Pour ce faire, nous utiliserons avrdude
et un programmeur AVR USB. Si vous ne connaissez pas les options de avrdude
, je vous encourage à lire la section flashing the board section de la première DVID ERITUPEUP de cette série. Nous allons flasher le firmware sur la carte à l’aide de ce beau script flash.sh :
#!/bin/bash
if [[ ! -d "./DVID/" ]]; then
git clone https://github.com/vulcainreo/DVID
fi
pushd ./DVID/trainings/firmware/hardcodedPassword/
avrdude -F -v -p atmega328p -P /dev/ttyUSB0 -c usbasp -u -U flash:w:hardcodedPassword.ino.with_bootloader.arduino_standard.hex
popd
Maintenant, nous allons connecter la carte DVID à notre ordinateur à l’aide du programmeur AVR USB et démarrer le script. Lorsque la programmation AVR est terminée, la carte électronique doit redémarrer et vous devriez voir ceci :
Résolution du challenge : dumping du firmware
Maintenant que nous avons flashé le firmware, nous pouvons lancer le challenge. La première étape d’un attaquant souhaitant analyser le firmware serait d’essayer de l’extraire. Par conséquent, apprenons à l’extraire !
Comme nous l’avons vu dans un article précédent DVID Writeup 01 - Hardware - Find the Datasheet, l’utilitaire avrdude
peut faire plusieurs choses ! Pour extraire le firmware, la commande est semblable à celle pour flasher le firmware. Nous ne changerons le mode Memory operation avec l’option -U
.
-
Nous avons utilisé
-U flash:w:findTheDatasheet.ino.arduino_standard.hex
pour installer le firmware sur la carte DVID. -
Nous utiliserons
-U flash:r:firmware.bin
pour dump le firmware de la carte DVID. (Nous aurions aussi pu le dump en format hexadécimal avec-U flash:r:firmware.hex
).
La commande devient alors :
avrdude -F -v -p atmega328p -P /dev/ttyUSB0 -c usbasp -u -U flash:r:firmware.bin
Maintenant que nous avons notre firmware extrait au format binaire, essayons quelque chose de simple. La commande strings
peut être utilisée pour extraire des chaînes ASCII du fichier binaire brut, ce qui est une première étape très utile pour inverser quelque chose.
strings -a firmware.bin
Les strings obtenus affichent des informationsn intéressantes :
Maintenant que nous avons le mot de passe, nous pouvons l’envoyer à la carte DVID en utilisant le lecteur USB UART et ce script python :
#!/usr/bin/env python3
import serial
s = serial.Serial("/dev/ttyUSB0", 9600)
s.write(b'sup3rp4ssw0rd\r\n')
Et voici ce qui est btenu sur l’écran de la carte DVID :
Et c’est gagné !
Nous aurions également pu résoudre le problème en analysant le code source du firmware.
Résolution du challenge : analyse du code source du firmware
Nous aurions également pu résoudre le problème d’une autre manière si nous considérons que nous pouvons accéder au code source du firmware. Dans ce cas, nous pouvons rechercher des variables codées en dur dans le code du fichier hardcodedPassword.ino :
On trouve facilement le mot de passe codé en dur à la ligne 18 du fichier hardcodedPassword.ino. Bien sûr, l’idée ici est de se renseigner sur les attaques réalistes, il se peut que vous n’ayez pas toujours le code source du firmware !
Références
- DVID Project on Github : https://github.com/Vulcainreo/DVID
- DVID Project site : http://dvid.eu/
- https://blog.rapid7.com/2019/04/16/extracting-firmware-from-microcontrollers-onboard-flash-memory-part-1-atmel-microcontrollers/