TP Analyse de Firmware

Responsable : Jp Gelas


camera

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

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

  2. Essayez de visualiser les premières lignes de ce fichier avec head ou less. Qu'est ce que vous obtenez à l'écran ?

  3. Utilisez maintenant la commande strings avec 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.

  1. Quel boot loader est utilisé ?

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

  1. Pour quel type de processeur les binaires ont-il été compilé ?
  2. Où se trouve les fichiers qui constitue les pages web ?

Documentation de la caméra DCS-932L - PDF