Analisi approfondita del componente più importante di qualsiasi strumento elettronico.

Tutti noi possediamo un dispositivo elettronico. Che sia il nostro smartphone, un telecomando, un assistente vocale, una console, un modem o un PC. Cosa accomuna questi oggetti che possono sembrare diversi tra loro, ma che in realtà sono più simili di quanto ci si aspetterebbe?
Il firmware.

Tale termine non ci viene subito in mente, in quanto tendiamo a non badare molto a ciò che si nasconde davvero sotto la scocca dei nostri dispositivi.
Tuttavia, esso è fondamentale per il loro funzionamento, nonché il primo elemento da dover tenere sotto controllo con aggiornamenti costanti.
Di sicuro ti starai chiedendo come mai dovresti aggiornarlo, ma come dico sempre: andiamo con ordine e affrontiamo per gradi l’argomento.

aggiornamenti firmware

Cos’è il firmware

Quando si parla di firmware non si fa riferimento a qualcosa di tangibile, poiché si tratta di un software permanente intrinseco ad ogni componente elettronico programmabile. Questo viene installato direttamente nel dispositivo dal produttore al termine del ciclo produttivo.

Il suo scopo è quello di avviare il componente in cui è installato, permettendogli di interagire con gli altri componenti hardware mediante API o protocolli di comunicazione. Di fatto rappresenta il punto di incontro tra hardware e software.

Il termine fu concepito per la prima volta nel 1967 da Ascher Opler e apparve in un articolo pubblicato sulla rivista Datamation, in cui egli teorizzava un nuovo programma che avrebbe funto da intermediario tra l’hardware e il software. Dapprincipio venne implementato tramite microcodice solo all’interno delle CPU, in modo da modificare e indirizzare specificamente le istruzioni in uso. Tuttavia, fu esteso in seguito anche a periferiche e telecomandi.

Un esempio molto comune di firmware è il BIOS di una scheda madre, che si occupa del corretto avvio del computer stesso, nonché di mettere in comunicazione tutti i componenti del sistema e di rilevare errori presenti in questi. Negli ultimi anni anche le schede di espansione, gli SSD, le pendrive USB e addirittura le automobili sono dotate di un proprio firmware, proprio per le ragioni spiegate in precedenza.

A livello hardware il firmware risiede nella memoria non volatile del dispositivo, che può essere di tipo:

  • ROM
  • EPROM
  • EEPROM
  • NAND flash

Aggiornamento del firmware

Essendo un software che porta con sé funzioni essenziali per il funzionamento dell’hardware, gli aggiornamenti del firmware apportano correzioni al suo microcodice. Questo non solo comporta un miglioramento del funzionamento del dispositivo, ma anche la correzione di bug e fix mirati alla sicurezza dello stesso.

Alcuni vantaggi legati all’aggiornamento del firmware sono:

  • Aggiunta di nuove funzioni e nuovi set di istruzioni per il dispositivo senza dover necessariamente ricorrere ad un upgrade hardware.
  • Ottimizzazione delle performance generali.
  • Correzione dei servizi e di codice non ottimizzato.
  • Incremento della sicurezza del dispositivo, con l’implementazione delle patch sul codice vulnerabile.

Generalmente l’aggiornamento di un firmware non è immediato come avviene per un sistema operativo, in quanto esiste un firmware specifico per ogni dispositivo esistente. Se viene installato un aggiornamento per un dispositivo simile a quello in nostro possesso, esso comporta un brick: il blocco totale del dispositivo. Questo perché il microcodice viene sovrascritto e il resto dell’hardware non riconosce più il modello a cui è legato.

Tuttavia, negli ultimi anni i sistemi sono diventati sempre più avanzati e user friendly, che permette agli utenti meno esperti di ricevere gli aggiornamenti firmware in maniera automatica e con una significativa riduzione dei casi di brick.
Tra i miglioramenti a cui abbiamo assistito, citiamo:

  • OTA (Over The Air): con l’avvento dell’Internet delle Cose (IoT) gli aggiornamenti OTA sono alla portata di tutti. Si tratta di aggiornamenti firmware che vengono distribuiti tramite la rete e che vengono scaricati automaticamente dal dispositivo in nostro possesso non appena questi sono disponibili. Gli smartphone usano estensivamente questa metodologia di aggiornamento.
  • Continuous Integration/Continuous Deployment (CI/CD): l’adozione di questo metodo nella pipeline di sviluppo permette una maggior rapidità di sviluppo e testing prima del deployment. Tale approccio garantisce che ciascun aggiornamento firmware sia sottoposto a uno screening meticoloso, atto a garantire la qualità e il funzionamento corretto una volta installato sul dispositivo.
  • Blockchain-Backed Authenticity: la tecnologia basata su blockchain crea dei record inalterabili, che l’utente stesso può verificare. Ciò garantisce la legittimità e la sicurezza degli aggiornamenti.

Sebbene a prima vista questo discorso appare idilliaco, in realtà sotto la scocca si nascondono comunque alcune vulnerabilità, che è bene dover conoscere e discutere.

Alcuni esempi di vulnerabilità note

I professionisti IT e gli esperti di cybersecurity conoscono molto bene i rischi legati all’esecuzione di codice remoto (RCE), in quanto costituisce la principale minaccia alla sicurezza del firmware. Se un hacker riesce a scovare una vulnerabilità nel microcodice, può sfruttarla a suo vantaggio per ottenere il pieno controllo del dispositivo e creare una botnet. Come se non bastasse, questi può anche impossessarsi dei dati sensibili e spiare i vari produttori di hardware.

A questo punto la domanda sorge spontanea: quali vulnerabilità possono portare ad un RCE?

Di seguito sono elencate le più comuni.

Bypass dell’autenticazione

L’autenticazione è un elemento cruciale per la sicurezza dei sistemi, in quanto permette l’accesso ai dispositivi e alle loro funzionalità solo agli utenti autorizzati. Se questa viene bypassata, significa che l’hacker può prendere il controllo del dispositivo, causando la perdita di dati sensibili e infliggendo un danno enorme agli enti associati.

Un comune exploit è legato alle password non sicure. Molti dispositivi escono dalla fabbrica con credenziali di autenticazione di default, come “admin-password”, che l’utente non si preoccupa di sostituire. Così facendo, il malintenzionato viene letteralmente invitato a impossessarsi del dispositivo, poiché tali credenziali sono reperibili perfino tramite una comune ricerca su Google.

Un altro metodo usato in presenza di credenziali più sicure e non comuni è la ricerca di falle nel firmware. In presenza di software open source vulnerabile, non è difficile per l’hacker sfruttare un bug noto a proprio vantaggio per bypassare l’autenticazione e accedere al dispositivo.

Buffer overflow

Si tratta di una vulnerabilità nota e presente nella stragrande maggioranza del software in circolazione. Avviene comunemente per via di un input non convalidato dal programma stesso, cosa che permette ad un hacker di immettere una quantità di dati maggiore rispetto alla dimensione massima del buffer allocato.

La situazione risultante comporta la sovrascrittura di porzioni limitrofe di memoria, che a sua volta provoca comportamenti imprevisti nel software e crash improvvisi. Esempi del genere sono stati molto comuni nella scena modding delle console PS3, PSP, PS Vita, Nintendo Wii, Nintendo DS e Nintendo 3DS, in cui un buffer overflow nel loro firmware ha portato all’esecuzione di software non firmato lontano dal controllo di Sony e Nintendo.

Per prevenire questa vulnerabilità, è importante usare funzioni che limitino la quantità di dati scrivibili all’interno nel buffer.
In aggiunta, i programmi vanno compilati con protezioni apposite contro buffer overflow, come stack canaries, o address space layout randomization (ASLR).

Command injections

Questo tipo di vulnerabilità comporta l’iniezione diretta di codice malevolo nel dispositivo mediante un comando eseguito tramite shell.
L’attacco command injection avviene in differenti modi, ma i più comuni è l’esecuzione mediante interfacce web, campi di input, o interfacce di programmazione (API). Queste ultime sono le più utilizzate, poiché il firmware comunica direttamente con esse per far funzionare il dispositivo.

Le conseguenze di un attacco del genere sono piuttosto gravi, in quanto un hacker che inietta codice malevolo acquisisce il completo controllo del dispositivo direttamente dalla shell di comando. Così facendo non solo questi può sottrarre dati sensibili, ma estendere il proprio attacco ad altri dispositivi presenti nella rete.

La soluzione migliore per mitigare questa vulnerabilità è controllare e convalidare tutti gli input che costituiscono un comando di shell.
Usando un filtro whitelist si consente l’utilizzo di un determinato set di caratteri o di valori precisi che devono essere contenuti in un comando.

In conclusione

Il firmware è un componente fondamentale per il funzionamento dei nostri dispositivi.
Tuttavia, le vulnerabilità che emergono dal suo codice non aggiornato, comportano serie conseguenze non solo per i nostri dati, ma per i nostri enti di riferimento. Le minacce legate ad un suo exploit sono serie, specialmente in un’era in cui si è sempre più connessi alla rete e ogni sistema cambia rapidamente.

Condurre con regolarità verifiche e test di sicurezza è essenziale per individuare potenziali vulnerabilità e correre subito ai ripari.
Utilizzare suite di sicurezza per monitorare lo stato del proprio firmware e possibili aggiornamenti, è una possibile soluzione e forse la più appropriata. Il genere di servizio che può supportarvi nel monitoraggio degli aggiornamenti del firmware è il servizio patching management gestito.