
Approccio da neofita all'hacking del firmware
Questo documento è la mia esperienza personale in qualità di principiante nel reversing e nello sfruttamento di firmware.

A scopo dimostrativo, analizzeremo e riprodurremo CVE-2023-27216.
Per sfruttare qualsiasi firmware, sono necessari i seguenti passaggi:
gdbserver per il debug.Di solito un file binario del firmware contiene un bootloader (uBoot), un file del kernel, l'header del kernel per il bootloader (uImage), un file system compresso (generalmente in formato SquashFS), una tabella CRC/MD5 (per verificare l'integrità dei file) e altri file vari.
Per prima cosa, individua un metodo per analizzare il firmware; dopo qualche ricerca, ecco alcune risorse:

Estrai il firmware usando binwalk: binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin

Ho ottenuto la cartella squashfs-root estratta e alcuni file strani.

Bonus: Se non vedi la cartella squashfs-root, puoi usare unsquashfs su qualsiasi file .squashfs che trovi. Sono come file zip 😅.
Controlla l'architettura e l'endianness del firmware. Puoi farlo esaminando alcuni binari estratti dal firmware. Controlla l'architettura e il firmware: file <binary>

Qui possiamo quasi confermare che il firmware gira su un'architettura MIPS 32-bit MSB. Il motivo del "quasi" è che alcuni firmware potrebbero girare su un'architettura diversa ma MIPS Compatible, come Lexra.
Controllando la cartella squashfs-root ho trovato alcuni file interessanti:
usr/etc/init.d/rcS => Questo è lo script che viene eseguito all'avvio del firmwareusr/etc/passwd => Questo è il file che contiene le informazioni degli utentiuserfs/romfile.cfg => Ci sono delle credenziali admin:adminControllando il file rcS ho trovato del codice interessante:
echo "admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh" > /usr/etc/passwd
passwdBoa è un server web antico, usato principalmente in dispositivi embedded come i router negli anni 2000. Tuttavia, lo sviluppo di boa server si è fermato nel 2005! Anche se Boa server è morto quasi 20 anni fa, vive ancora oggi grazie al nostro produttore.

Consiglio di usare un OS basato su Debian per il processo di emulazione, come Ubuntu o Kali. C'è anche un altro OS incentrato sull'hacking di firmware chiamato AttifyOS. In questo documento ho usato Kali Linux. Per iniziare il processo di emulazione, ci sono 2 strumenti:

Vediamo come usare FAT per emulare completamente un firmware. Per prima cosa, cloniamo la repo da GitHub sulla tua macchina Kali. Poi seguiamo la procedura di setup. Devi anche modificare il file fat.config, altrimenti non funzionerà.
git clone https://github.com/attify/firmware-analysis-toolkit.git
cd firmware-analysis-toolkit
./setup.sh
vi fat.config # Modify to your sudo password.
Poi copiamo il binario del firmware (quello scaricato dal produttore) nella cartella di FAT sulla nostra macchina Kali e lo eseguiamo.
./fat.py DSL-3782_A1_EU_1.01_07282016.bin
Nota: Durante il processo di setup di FAT si potrebbero incontrare errori. Potrebbe dire che manca libmagic.

Basta semplicemente eseguire
pip unistall python-magic
pip install python-magic
Questo dovrebbe risolvere il problema; poi eseguiamo di nuovo il comando di build. Ora dovrebbe funzionare a meraviglia.

Premi Enter per eseguire. Il processo di emulazione dovrebbe funzionare correttamente: puoi visitare http://192.168.1.1 (sulla macchina Kali) per verificare se funziona o no.

Puoi anche accedere alla console se hai le credenziali. Ecco admin:admin.

Se decidi di spegnere il firmware emulato, premi semplicemente Ctrl+A X. Quando devi eseguirlo di nuovo, non rilanciare fat.py perché il firmware è già stato convertito in un'immagine. Devi solo eseguire lo script che è già stato generato.
cd firmadyne/scratch/<Image-ID>
./run.sh

Compila gdbserver per il debug. Ci sono molti modi per compilare gdbserver. Puoi anche scaricare un server compilato staticamente. C'è una repo che contiene alcune versioni statiche. Tuttavia, preferisco compilare gdbserver da solo perché quelle nella repo GitHub sono piuttosto vecchie e potrebbero avere problemi di compatibilità.