Comprendere i dati delle chiamate di funzione non sicure nell'analisi del firmware

L'analisi firmware identifica chiamate di funzione potenzialmente pericolose nei file eseguibili supportati estratti dalle immagini del firmware. Questi risultati possono aiutarti a individuare modelli di implementazione che richiedono una revisione di sicurezza aggiuntiva e a dare priorità ai binari in base alla loro potenziale esposizione.

Questo articolo spiega i segnali di chiamata di funzione non sicuri che potresti vedere nei risultati dell'analisi firmware. Descrive i file supportati, i limiti di copertura e come valutare i risultati nel contesto dell'eseguibile e del dispositivo.

Note

La presenza di una chiamata di funzione non sicura non significa necessariamente che un eseguibile o un dispositivo sia vulnerabile. Il rischio reale dipende da come viene utilizzata la funzione, se input non affidabile può raggiungerla e da come l'eseguibile viene esposto e protetto.

Segnali di chiamate a funzioni non sicure nell'analisi del firmware

L'analisi delle chiamate di funzione non sicure esegue un'analisi statica degli eseguibili supportati nel formato Executable and Linkable Format (ELF). Identifica i riferimenti a funzioni che possono contribuire a problemi di sicurezza quando vengono utilizzate senza una validazione di input appropriata, controllo dei limiti, validazione della dimensione del buffer o altri controlli di codifica sicuri.

Alcune funzioni di gestione della memoria possono contribuire a sovrapfoghi di buffer o ad altre condizioni di corruzione della memoria se usate in modo errato. A seconda del percorso di codice interessato e delle mitigazioni disponibili, un attaccante potrebbe utilizzare queste condizioni per interrompere il dispositivo o eseguire codice non autorizzato.

Ogni risultato rappresenta un segnale piuttosto che una determinazione della vulnerabilità. Valuta insieme i segnali e nel contesto del ruolo dell'eseguibile nel firmware.

Schermata dei risultati dell'anteprima delle chiamate a funzioni non sicure, compresi i totali delle chiamate non sicure e di rete e i conteggi delle singole funzioni per eseguibile.

Funzioni potenzialmente pericolose

Alcune funzioni della biblioteca possono essere rischiose perché non garantiscono intrinsecamente la dimensione o l'affidabilità dei dati che elaborano. Ad esempio, funzioni come strcpy e strcat possono contribuire a condizioni di overflow del buffer se un programma copia input sovradimensionato o non affidabile in un buffer di destinazione.

Un riferimento riportato indica che l'analisi del firmware ha identificato una funzione tracciata nell'eseguibile. Non dimostra che la funzione sia usata in modo errato. La funzione può essere utilizzata con adeguate precauzioni, come verificare la lunghezza dell'input, garantire spazio sufficiente nella destinazione o limitare l'input a dati provenienti da fonti attendibili.

Quando si modifica il codice sorgente, si utilizzano funzioni di gestione delle stringhe che accettano la dimensione del buffer di destinazione e si convalidano le lunghezze di ingresso prima di copiare o concatenare i dati. Assicurarsi che il risultato sia terminato con un carattere nullo e gestire il troncamento o gli errori. Funzioni limitate come strncpy e strncat possono ridurre il rischio rispetto alle alternative non limitate, ma devono comunque essere utilizzate con calcoli corretti della dimensione del buffer.

L'insieme delle funzioni tracciate può cambiare man mano che questa caratteristica evolve. Interpretare il nome della funzione e il conteggio come punto di partenza per la revisione del codice piuttosto che come un inventario completo di tutti i rischi di sicurezza della memoria o di esecuzione dei comandi.

Informazioni sulle chiamate di rete

L'analisi firmware indica anche quando vengono identificate chiamate di funzione correlate alla rete in un eseguibile analizzato. Usa questo segnale per aiutare a stabilire le priorità degli eseguibili per una successiva analisi. Non determina se l'eseguibile accetta connessioni remote, comunica al di fuori del dispositivo o è raggiungibile nell'ambiente distribuito.

Quando si danno priorità ai risultati, considera di rivedere prima eseguibili che contengono sia chiamate di funzione non sicure sia chiamate di rete. Questi eseguibili potrebbero elaborare i dati ricevuti da una rete e giustificare un'indagine anticipata.

Percorso eseguibile e conteggio delle chiamate

I risultati sono associati al percorso eseguibile estratto dall'immagine firmware. Il conteggio delle chiamate di funzione indica quanti riferimenti a una funzione tracciata sono stati identificati per quell'eseguibile. Un conteggio più alto può indicare più luoghi da esaminare, ma da solo non indica una maggiore gravità o sfruttabilità.

Lo stesso eseguibile può apparire in più posizioni estratte, e eseguibili diversi possono contenere riferimenti alla stessa funzione. Usa il percorso estrattore e la versione del firmware per identificare il componente sorgente corretto o l'artefatto del fornitore.

File supportati e copertura

L'analisi delle chiamate di funzione non sicure è disponibile in anteprima e si applica agli eseguibili ELF supportati in spazio utente estratti da immagini del firmware basate su Linux.

I file dei moduli (.ko) del kernel Linux non sono inclusi perché l'anteprima è limitata all'analisi eseguibile nello spazio utente.

L'anteprima supporta le seguenti architetture di processore:

  • AMD64 o x86-64
  • ARM64 o AArch64
  • ARM32

Requisiti binari

L'eseguibile deve trattenere informazioni che permettano l'analisi firmware di identificare le funzioni utilizzate. Un binario collegato staticamente o rimosso potrebbe non produrre risultati quando i nomi delle funzioni o altre informazioni richieste non sono disponibili.

Un'immagine firmware può completare con successo altre attività di analisi senza produrre risultati di chiamate di funzione non sicure. Ogni analizzatore firmware ha i propri file, architettura e requisiti di metadati.

Uso combinato dei dati delle chiamate di funzione non sicure

Ogni segnale offre una prospettiva diversa sul rischio potenziale:

Segnale Cosa ti aiuta a capire
Percorso eseguibile Quale eseguibile estratto contiene le chiamate individuate?
Numero di chiamate a funzioni non sicure Il numero totale di chiamate di funzione non sicure identificate nell'eseguibile.
Numero di chiamate di rete Se il comportamento legato alla rete possa giustificare la priorità dell'eseguibile per una revisione più approfondita. Il conteggio non dimostra la raggiungibilità remota.
Numero di chiamate <function name> Quanti riferimenti alla funzione nominata venivano identificati nell'eseguibile. Utilizzare il conteggio specifico della funzione per concentrare ulteriori approfondimenti sui controlli di sicurezza applicabili, come la dimensionazione del buffer, la validazione degli input, la gestione delle stringhe di format, i permessi di memoria o la validazione di comando-input.

Sono forniti conteggi specifici per funzione per le seguenti funzioni:

  • strcpy
  • strcat
  • printf
  • fprintf
  • sprintf
  • system
  • mmap
  • popen

Invece di affidarsi a un solo campo, valuta insieme questi segnali per capire quali eseguibili richiedono una revisione più immediata.

Considerazioni importanti

Interpretazione dei risultati zero e vuoti

I risultati possono mostrare un conteggio zero per un eseguibile o omettere completamente un eseguibile. Un conteggio zero significa che l'eseguibile è stato analizzato, ma non sono state identificate chiamate tracciate per quel campo.

Se un eseguibile non appare nei risultati, non dare per scontato che non contenga chiamate a funzioni non sicure. L'analisi del firmware potrebbe non essere stata in grado di analizzarla perché l'eseguibile utilizza un'architettura non supportata o non contiene le informazioni necessarie per identificare i riferimenti alle funzioni.

Un elenco di risultati vuoto significa che non sono disponibili risultati relativi alle chiamate di funzione non sicure per l'immagine del firmware. Non significa che il firmware non contenga chiamate di funzioni non sicure.

Non possono apparire risultati quando:

  • Non sono stati estratti eseguibili ELF in modalità utente.
  • Gli eseguibili estratti utilizzano architetture non supportate.
  • Un binario statico o stripped non contiene informazioni sufficienti per identificarlo.
  • Il file estratto è un modulo del kernel Linux escluso.
  • L'immagine del firmware è stata analizzata prima che diventasse disponibile l'analisi delle chiamate di funzione non sicure.
  • L'estrazione o l'analisi non sono state completate con successo.

Note

Un risultato vuoto non conferma che il firmware non contenga chiamate di funzioni non sicure. Per ricevere l'analisi aggiornata di un'immagine elaborata prima che fosse disponibile l'anteprima delle Chiamate di funzione non sicure, carica nuovamente l'immagine del firmware.

Per imparare come caricare un'immagine e visualizzarne i risultati, vedi Analizza un'immagine firmware con il servizio di analisi firmware. Per valutare le relative protezioni del compilatore e del linker, consulta la scheda Binary Hardening dello stesso eseguibile.