DVID Writeup 02 - Firmware - Hardcoded password

Table des matières :

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 :

Boot screen

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 :

Extracted strings

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 :

Win

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 :

Firmware source code

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