TP Analyse de Firmware
Responsable : Jp Gelas

Pendant cette séance de TP nous allons étudier comment accéder au système de fichiers d'un appareil connecté à partir de son firmware. L'étude du firmware d'un appareil peut potentiellement permettre à un pirate de trouver et exploiter une faille présente dans celui-ci.
L'expression anglophone utilisée pour cette activité se nomme : Reverse engineering of device firmware
Pour cette séance nous baserons notre étude sur la caméra D-Link DCS-932L
Ojectif
Extraction du système de fichiers d'un firmware pour une étude ultérieur de potentiels failles de sécurité.
Extraction du firmware
Le firmware d'un objet connecté peut potentiellement être extrait directement de la carte mère avec le matériel adéquat (ex: sonde JTAG). Dans le cadre de ce TP nous nous contenterons de le récupérer sur le site du constucteur.
Téléchargez la dernière version du firmware : DCS-932L_REVA_FIRMWARE_1.14.04.ZIP
Première prise de contact
-
Dézippez le fichier téléchargé ci-avant. Vous obtenez deux fichiers. Un PDF que vous pouvez ignorer et un fichier dont l'extension est
.bin(un fichier binaire). -
Essayez de visualiser les premières lignes de ce fichier avec
headouless. Qu'est ce que vous obtenez à l'écran ? -
Utilisez maintenant la commande
stringsavec l'option-10(ex:strings -10 fichier.bin | head) Qu'est ce que cela permet d'obtenir ?
La commande : binwalk
Nous allons a présent utiliser l'outil binwalk conçu spécialement pour faire
du Reverse engineering. Cet outil permet de parser un binaire et séparer les différents
éléments qui le constitue (ex: binwalk fichier.bin). Chaque ligne affichée
donne l'offset (en décimal et en hexadécimal) des éléments, suivit
d'une description de ce qu'il a trouvé a cette place.
-
Quel boot loader est utilisé ?
-
L'en-tête uimage se trouve un peu plus bas. Elle décrit l'élément qui suit. Notez la taille de l'image et le type de compression utilisé.
La commande : dd
La commande dd va nous permettre dans ce contexte d'extraire très précisément
une plage d'octets d'un fichier binaire. Par exemple la commande suivante
dd if=fichier.bin skip=64 bs=1 count=8096 of=kernel.lzma
permet d'extraire du fichier .bin 8096 octets a partir du 64ème octet, et de
stocker le résultat de cette extraction dans le fichier .lzma.
Assurez vous que le fichier extrait est bien un fichier de type lzma. Comment allez vous faire ? Qu'est ce qu'un fichier LZMA ?
Pour décompresser un fichier lzma, utilisez la commande unlzma.
Quel type de fichier obtenez vous ?
On recommence...
Puisque nous n'avons aucune idée, répétez la procédure sur ce nouveau fichier (binwalk, dd et unlzma...)
Vous devriez obtenir un fichier d'un type nouveau. Quel est son type ?
La commande : cpio
Créez un répertoire que vous nommerez fs (file system). Rendez vous dedans.
Puis désarchivez le fichier. Notez bien que l'option --no-absolute-filenames
est TRÈS IMPORTANTE. Sans elle vous risquez d'écraser et détruire le
système de fichiers de votre poste de travail !!!
mkdir fs; cd fs
cpio -idm --no-absolute-filenames < ../mystery
Exploration
Si tout c'est bien passé félicitation ! Vous pouvez à présent explorer et étudier le système de fichiers désarchivé de la caméra.
- Pour quel type de processeur les binaires ont-il été compilé ?
- Où se trouve les fichiers qui constitue les pages web ?
Documentation de la caméra DCS-932L - PDF