
L'approche d'un débutant au hacking de firmware
Ce document relate mon expérience personnelle en tant que débutant dans la rétro-ingénierie et l'exploitation de firmware.

Pour la démonstration, nous allons analyser et reproduire CVE-2023-27216.
Afin d'exploiter des firmwares, voici les étapes à suivre :
gdbserver de manière statique afin de déboguer.En général, un fichier binaire de firmware contient un chargeur de démarrage (uBoot), un fichier noyau, un en-tête de noyau pour le chargeur de démarrage (uImage), un système de fichiers compressé (généralement au format SquashFS), une table CRC/MD5 (pour vérifier l'intégrité des fichiers) et d'autres fichiers divers.
Cherchez d'abord un moyen d'analyser le firmware, faites des recherches, voici quelques ressources :

Extrayez le firmware avec binwalk : binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin

On obtient le dossier squashfs-root extrait et des fichiers étranges.

Bonus : Si vous ne voyez pas le dossier squashfs-root, utilisez unsquashfs sur les fichiers ".squashfs" que vous voyez. Ce sont comme des fichiers zip 😅.
Vérifiez l'architecture et l'endianness du firmware. Cela peut être vérifié en examinant certains binaires extraits du firmware. Vérifiez l'architecture et le firmware : file <binary>

Ici, nous pouvons presque confirmer que le firmware fonctionne sur une architecture MIPS 32 bits MSB. La raison du « presque » est que certains firmwares peuvent fonctionner sur une architecture différente MIPS Compatible telle que Lexra.
En inspectant le dossier squashfs-root, on trouve des fichiers intéressants :
usr/etc/init.d/rcS => C'est le script qui s'exécute au démarrage du firmwareusr/etc/passwd => C'est le fichier qui contient les informations utilisateuruserfs/romfile.cfg => Il y a des identifiants admin:adminEn inspectant le fichier rcS, on trouve du code intéressant :
echo "admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh" > /usr/etc/passwd
passwdBoa est un serveur web ancien, principalement utilisé dans les appareils embarqués comme les routeurs dans les années 2000. Cependant, le serveur boa a arrêté son développement en 2005 ! Même si le serveur Boa est mort il y a presque 20 ans, il vit encore aujourd'hui grâce à notre fabricant.

Je recommande d'utiliser un OS basé sur Debian pour le processus d'émulation, comme Ubuntu ou Kali. Il existe un autre OS centré sur le hacking de firmware appelé AttifyOS. Dans ce document, j'ai utilisé Kali Linux. Pour commencer le processus d'émulation, voici 2 outils :

Voyons comment utiliser FAT pour émuler complètement un firmware. Tout d'abord, nous clonons le dépôt depuis GitHub sur votre machine Kali. Ensuite, nous suivons le processus d'installation. Vous devez aussi modifier le fichier fat.config, sinon cela ne fonctionnera pas.
git clone https://github.com/attify/firmware-analysis-toolkit.git
cd firmware-analysis-toolkit
./setup.sh
vi fat.config # Modify to your sudo password.
Ensuite, nous copions le binaire du firmware (celui téléchargé depuis le fabricant) dans le dossier de FAT sur notre machine Kali et nous l'exécutons.
./fat.py DSL-3782_A1_EU_1.01_07282016.bin
Remarque : Pendant le processus d'installation de FAT, nous pouvons rencontrer des erreurs. Il peut indiquer « no libmagic ».

Il suffit de lancer
pip unistall python-magic
pip install python-magic
Cela devrait résoudre le problème, puis nous relançons la commande de build. Cela devrait maintenant fonctionner à merveille.

Appuyez sur Entrée pour lancer. Le processus d'émulation devrait bien fonctionner : vous pouvez naviguer vers http://192.168.1.1 (sur la machine Kali) pour vérifier si cela fonctionne.

Vous pouvez également vous connecter à la console si vous avez les identifiants. Voici admin:admin.

Si vous décidez d'éteindre le firmware émulé, appuyez simplement sur Ctrl+A X. Lorsque vous devez le relancer, ne relancez pas fat.py, car le firmware a déjà été transformé en image. Vous n'avez qu'à exécuter le script qui a déjà été généré.
cd firmadyne/scratch/<Image-ID>
./run.sh
