Resuscitare Un Proxmark3 Usando Un Flipper Zero

Proxmark3 and Flipper thumbnail
AI generated

Il Proxmark3 è uno dei gadget più utili per l’analisi dei protocolli di comunicazioni elettromagnetici a breve distanza (come RFID, NFC ecc.). La versione più economica e conveniente, il Proxmark3 Easy, è usata da milioni di hacker in tutto il mondo. Il vero potenziale di questo strumento è oggi espresso attraverso il nuovo Iceman firmware che permette di studiare protocolli e tecnologie in continuo aggiornamento.

Lavorare con strumenti così potenti non è sempre una passeggiata: sono apparecchiature delicate e che possono subire dei danni quando non si fanno le cose nel modo corretto. Un esempio molto comune è quello del bricking, in cui il nostro gadget diventa letteralmente un mattone che non dà più segni di vita. Spesso questa cosa succede per via di una corruzione del firmware o del bootloader (il software che si occupa dell’accensione del dispositivo) dovuto ad un arresto anomalo del dispositivo durante un aggiornamento, per esempio.

Rimediare a questo errore non è impossibile e in questo articolo vedremo come un altro famosissimo gadget, il Flipper Zero, ci possa rendere questa operazione di ripristino molto facile.

Sommario

Tutorial

Preparazione e requisiti

Come hardware avremo bisogno di:

  • Un Flipper Zero
  • Un Computer con Linux (ancora meglio se Kali Linux o simili)
  • Un Proxmark3 brickato
  • Alcuni jumper
  • Qualcosa per attaccarli (plastilina, Patafix, gomma pane ecc.)

Per quanto riguarda il software, dobbiamo preparare i nostri strumenti. Il Flipper deve avere con se l’app DAP Link, scaricabile dal suo store via qFlipper o già presente in molti custom firmware popolari (come Momentum).
Sul nostro computer dovremmo installare OpenOCD (trovabile tramite il nostro gestore di pacchetti o compilandolo a mano dal loro repo). Questo software è lo standard per interagire con protocolli di piattaforme embedded tramite linea di comando.
Inoltre dovremmo clonare la repo ufficiale di Iceman firmware e compilarla eseguendo i comandi:

git clone https://github.com/RfidResearchGroup/proxmark3.git
cd proxmark3
make clean && make -j

L’operazione richiederà alcuni minuti e il tempo d’esecuzione dipende molto dalla configurazione del vostro PC. Inoltre, in base al sistema operativo che gira sulla vostra macchina, potrebbe essere necessario qualche passaggio aggiuntivo per far funzionare correttamente la compilazione. Per maggiori informazioni rivolgetevi alla repo ufficiale di Iceman o, se proprio dovete, fate qualche chiacchiera con un LLM.

Connessioni

Connection_diagram
Collegamento pin (le frecce indicano i pin da inserire sul Proxmark3)

Per iniziare dobbiamo aprire l’app DAP Link sul nostro Flipper, dovrebbe trovarsi nella sezione GPIO nel menu delle app. A questo punto possiamo collegare il Flipper al Proxmark seguendo il diagramma seguente:

Le freccie indicano i pin del Proxmark da collegare alla scheda. ATTENZIONE: collegare PRIMA la GND e POI i 3.3V. La posizione dei pin per la comunicazione JTAG sul Proxmark possono variare in base al modello, nel caso del Proxmark3 Easy sono sul lato destro in basso. Per mantenere una connessione abbastanza sicura senza effettuare saldature o necessitare di apparecchiature aggiuntive, ho usato dei jumper maschio/maschio che poi ho piegato nei fori dei pin del Proxmark; per tenerli al loro posto potete usare un Patafix, gommapane o simili da applicare sopra i pin. A questo punto collegate tramite il cavo USB-C il Flipper Zero al vostro computer. Se il collegamento è corretto il led del Flipper dovrebbe essere verde e all’esecuzione di questo comando sul vostro PC:

ls /dev | grep ACM

il risultato dovrebbe essere qualcosa di simile a

ttyACM0

Se è così, siete pronti per comunicare con il Proxmark e a ripristinarlo!

Ripristino

Per avviare il ripristino usiamo il tool OpenOCD per aprire una connessione JTAG con il Proxmark3. La posizione di OpenOCD sul tuo pc potrebbe essere differente. Per essere sicuri della posizione, eseguire il comando:

find / -type d -name openocd 2>/dev/null

Il risultato dovrebbe essere qualcosa di simile a /usr/share/openocd. In tal caso eseguire il seguente comando:

openocd -f /usr/share/openocd/scripts/interface/cmsis-dap.cfg -c "transport select jtag" -f ~/Downloads/proxmark3/tools/jtag_openocd/board-at91sam7s.cfg

Scomponiamolo per capire il suo funzionamento:

  • -f /usr/share/openocd/scripts/interface/cmsis-dap.cfg, questa opzione permette di caricare un file di configurazione per avviare la connessione. Visto che il Flipper sta agendo da adattatore CMSIS-DAP compatibile, dobbiamo selezionare quella configurazione all’interno dei preset di OpenOCD.
  • -c "transport select jtag", questa opzione dice a OpenOCD di eseguire i comandi inseriti tra virgolette nella sua interfaccia. In questo caso, gli stiamo comunicando esplicitamente che vogliamo usare una connessione JTAG.
  • -f ~/Downloads/proxmark3/tools/jtag_openocd/board-at91sam7s.cfg, questa opzione specifica un altro file di configurazione, in questo caso per interfacciarsi con il microcontrollore presente sul Proxmark3 (l’AT91SAM7S).

Se tutto funziona correttamente, dovresti vedere un output del comando simile a questo:

Open On-Chip Debugger 0.12.0
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
jtag
Warn : Transport "jtag" was already selected
DEPRECATED! use 'adapter speed' not 'adapter_khz'
adapter speed: 1000 kHz

Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : Using CMSIS-DAPv2 interface with VID:PID=0x0483:0x5740, serial=DAP_Uticona
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: JTAG supported
Info : CMSIS-DAP: FW Version = 2.0.0
Info : CMSIS-DAP: Serial# = DAP_Uticona
Info : CMSIS-DAP: Interface Initialised (JTAG)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : cmsis-dap JTAG TLR_RESET
Info : cmsis-dap JTAG TLR_RESET
Info : JTAG tap: sam7x.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787 (<unknown>), part: 0xf0f0, ver: 0x3)
Info : Embedded ICE version 1
Info : sam7x.cpu: hardware has 2 breakpoint/watchpoint units
Info : starting gdb server for sam7x.cpu on 3333
Info : Listening on port 3333 for gdb connections

Leggendo bene l’output del comando possiamo notare 2 righe interessanti:

  1. Info : Listening on port 4444 for telnet connections che ci informa della presenza di una connessione telnet aperta sulla porta 4444.
  2. Info : Listening on port 3333 for gdb connections che ci informa della presenza della porta 3333 aperta a connesioni tramite il GNUDeBugger.

Ciò vuol dire che possiamo attaccarci a queste porte per comunicare direttamente con il Proxmark3 per funzioni di debug JTAG. In questo caso ci collegeremo tramite la porta telnet. Quindi, apriamo un altro terminale e digitiamo il seguente comando per collegarci:

telnet localhost 4444

A questo punto dovremmo avere una shell che attende nostri comandi che inizia in questo modo:

Trying 127.0.0.1 ...
Connected to localhost.
Open On-Chip Debugger
>

Se è così dobbiamo inserire i seguenti tre comandi in successione per riscrivere il bootloader danneggiato e ripristinare il dispositivo:

  1. flash banks, questo comando elenca tutte le memorie flash rilevate sul dispositivo. Se il collegamento funziona correttamente dovresti trovarti davanti a una lista di 1/2 elementi, a noi interessa solo l’indirizzo di memoria con la posizione d’inizio più piccola (per esempio .. at 0x00100000). Se gli indirizzi di memoria listati sono tutti con valore 0 (0x00000000) vuol dire che il collegamento non è stabile, in tal caso consiglio di staccare la connessione, ricontrollare i collegamenti tra Flipper, Proxmark e PC e riprovare la procedura fino a qui.
  2. halt, questo comando ferma la CPU del Proxmark3 per darci la possibilità di effettuare le operazioni via JTAG in modo sicuro.
  3. flash write_image ~/Downloads/proxmark3/recovery/proxmark3_recovery.bin 0x00100000, questo comando sovrascrive la memoria del proxmark dall’indirizzo trovato in precedenza, inserendoci il file di recovery del bootloader compilato da noi. Questa operazione potrebbe richiedere qualche secondo alla fine dei quali dovrebbe apparire una riga simile a wrote X bytes from file ~/Downloads/proxmark3/recovery/proxmark3_recovery.bin in X s ... seguita dal carattere della shell in attesa di un altro nostro comando.

Ora il bootloader è stato ripristinato e possiamo installare il firmware Iceman sul Proxmark.

Installazione Iceman

Staccate il Flipper dal vostro PC, spegnetelo e scollegate anche il Proxmark da esso. Ora potete collegare il Proxmark3 direttamente al vostro PC ed eseguire i seguenti comandi per completare l’installazione di Iceman:

  1. ./pm3-flash-bootrom, che installerà il software di boot del firmware.
  2. ./pm3-flash-fullimage, che installerà tutto il resto del software principale.

A questo punto il vostro Proxmark3 è operativo con l’ultima versione di Iceman installata. Potete accedere alle sue funzionalità con il comando ./pm3 che vi porterà nella sua CLI.

Spieghiamo il JTAG

Ora che abbiamo visto applicativamente come può esserci utile un’intefaccia JTAG, capiamo com’è fatta e come funziona. La Joint Test Action Group (JTAG) è un’intefaccia di test molto comune e che è stata pensata per fare debugging dell’hardware in modo standardizzato a livello produttivo. L’interfaccia ha normalmente 6 pin, come visto nel precedente schema, e il dispositivo può averli scoperti o con un connettore di vario genere saldato su di essi. Ovviamente, uno strumento talmente potente può essere anche una grave falla di sicurezza se non viene disattivata o protetta nei prodotti finiti. Questa porta, infatti, oltre a quello che abbiamo visto nella guida precedente, può essere usata per:

  • Ricostruire il funzionamento interno di un componente a noi sconosciuto.
  • Ricostruire un intero circuito e provare ad approssimare uno schematico.
  • Leggere e/o scrivere su memorie (come nella nostra guida), anche se crittografate.
  • Accedere a delle opzioni inserite dallo sviluppatore dell’hardware, come l’interfaccia con altri moduli di comunicazione o il dumping di informazioni in zone di memoria riservate a operazioni critiche.
  • Effettuare test automatici su tutta l’achitettura che ospita la porta.

Insomma, tutte queste operazioni sono usate nell’ambito dell’hardware hacking per performare attacchi di vario genere, concatenando queste capacità ad altre falle o per fare ricostruzione del circuito prima di attaccarlo. Se volete un’esempio di che tipo di attacchi è possibile realizzare tramite un’interfaccia JTAG, vi rimando al video di un hack di Joe “Kingpin” Grand (un hacker che ha fatto la storia), in cui ha hackerato uno smartphone Samsung tramite la sua porta JTAG per ottenere la password per sbloccarlo. Se siete interessati a saperne di più sull’hardware hacking, date un’occhiata ai link alla fine di questo articolo.

Risorse aggiuntive

Leggi spesso SpaceZero?

Iscriviti alla Newsletter per ricevere aggiornamenti sulle ultime novità del blog!

1 thought on “Resuscitare Un Proxmark3 Usando Un Flipper Zero”

Leave a reply

Your email address will not be published. Required fields are marked *

Cookies Notice

Questo sito fa uso di cookies per migliorare la tua esperienza. Se ti fa piacere continua accettando questa casella.