Simple Science

Scienza all'avanguardia spiegata semplicemente

# Informatica# Architettura hardware

Avanzamenti nella Reverse Engineering dei Progetti FPGA

Un nuovo algoritmo migliora il recupero dei design FPGA dai bitstream.

― 5 leggere min


Approfondimenti sulApprofondimenti sulReverse Engineering delDesign FPGAl'analisi del design FPGA.Nuovo metodo migliora il recupero e
Indice

I Field-Programmable Gate Arrays (FPGAS) sono dispositivi usati per creare circuiti digitali. Questi circuiti possono essere programmati per svolgere vari compiti, rendendo gli FPGA popolari nell'elettronica. A volte, però, può essere necessario tornare a un design dopo che è stato creato, specialmente se i documenti originali del design mancano o se sospettiamo che ci possano essere problemi, come componenti malevoli nascosti. Questo processo di ritorno al design originale dal prodotto finito è conosciuto come reverse engineering.

Perché fare reverse engineering dei design FPGA?

Ci sono vari motivi per fare reverse engineering a un design FPGA. Un motivo comune è capire design più vecchi dove il codice sorgente originale non è disponibile. Questo può essere necessario per manutenzione o miglioramenti. Un altro motivo importante per il reverse engineering è indagare su preoccupazioni di sicurezza. Se qualcuno ha aggiunto logica dannosa, nota come hardware trojan, durante il processo di design o di produzione, è fondamentale trovare e affrontare questi problemi.

Quando si fa reverse engineering a un FPGA, il primo passo è leggere il Bitstream. Questo bitstream è il codice di programmazione usato per configurare l'FPGA. Da questo codice, possiamo estrarre un Netlist, che è una descrizione dettagliata delle connessioni tra le diverse parti del circuito. Il passo successivo è analizzare questo netlist per determinare cosa doveva fare il design originale.

Passi nel reverse engineering dei design FPGA

Nel processo di reverse engineering, prima identifichiamo componenti chiave, inclusi registri e moduli. Questi componenti aiutano a definire come funziona il circuito. Separiamo anche le unità di controllo per esaminare le loro funzioni più da vicino. Il netlist viene poi suddiviso in gruppi che possono essere confrontati con design di riferimento esistenti. Questo aiuta a determinare la funzionalità del circuito in base a come i gruppi di componenti si relazionano tra loro.

Tuttavia, ci sono delle sfide perché alcune informazioni possono andare perse durante le fasi di ottimizzazione del design. L'ottimizzazione può rendere il netlist complesso e offuscare la struttura originale. Negli FPGA, alcuni elementi possono combinare molte funzioni in unità singole, rendendo più difficile rintracciare le configurazioni originali.

Introduzione a un nuovo algoritmo di Raggruppamento

Per affrontare queste sfide, abbiamo sviluppato un nuovo algoritmo per raggruppare gli elementi di design all'interno di netlist completamente appiattiti degli FPGA. Questo algoritmo usa la posizione degli elementi sul chip fisico dell'FPGA per creare raggruppamenti logici. Riconoscendo che i componenti posti vicini lavorano spesso insieme, possiamo inferire meglio la struttura del design originale.

Il nostro metodo inizia identificando gli elementi che condividono lo stesso sito fisico sull'FPGA. Poi, raggruppiamo questi elementi in base alle loro somiglianze strutturali e alla loro prossimità reciproca. Questo processo implica calcolare le distanze tra i componenti e assicurarsi che i gruppi abbiano una struttura logica.

Misurare la somiglianza

Uno dei punti chiave del nostro algoritmo è misurare quanto siano simili diverse parti del netlist tra loro. Lo facciamo usando una tecnica chiamata distanza di editing del grafo, che ci aiuta a capire quanto siano correlate tra loro le diverse componenti in base alle loro connessioni e funzioni. Quando la distanza tra due componenti è piccola, suggerisce che probabilmente appartengono allo stesso gruppo.

Usiamo anche una misura di distanza nota come distanza di Manhattan, che calcola la distanza totale tra due punti in modo organizzato. Applicando pesi a diversi tipi di distanze, possiamo creare un raggruppamento più raffinato degli elementi.

Setup sperimentale

Per testare il nostro algoritmo, abbiamo usato uno strumento chiamato Hardware Analyzer (HAL) che ci consente di lavorare con netlist appiattiti. Abbiamo eseguito il nostro algoritmo su vari design provenienti da diverse categorie, inclusi unità aritmetiche e processori. Sintetizzando questi design in netlist completamente appiattiti, abbiamo ottenuto una rappresentazione complessiva dei circuiti originali.

Durante i nostri test, ci siamo concentrati sull'uso di tipi standard di componenti come tabelle di ricerca (LUT), registri e multiplexer. Il nostro obiettivo era vedere quanto bene il nostro algoritmo potesse identificare e raggruppare questi elementi in base al loro posizionamento fisico e funzioni correlate.

Valutazione dei risultati

Dopo aver eseguito l'algoritmo, abbiamo misurato la qualità dei raggruppamenti usando una metrica chiamata Informazione Mutua Normalizzata (NMI). Questa metrica ci aiuta a determinare quanto bene i nostri raggruppamenti inferiti corrispondano alla struttura del design originale. Un punteggio NMI più vicino a 1 indica una forte somiglianza, mentre un punteggio vicino a 0 suggerisce una corrispondenza scarsa.

I risultati sperimentali hanno mostrato che il nostro algoritmo è riuscito a raggruppare gli elementi in modo efficace. Per vari limiti applicati alle distanze spaziali ed editoriali, abbiamo osservato che il punteggio più alto di NMI è stato raggiunto impostando limiti specifici su queste distanze. Questo indica che consentire un po' di flessibilità nella distanza spaziale mentre si stringono i limiti sulla distanza di editing ha prodotto i migliori risultati.

Raggruppamento delle reti e delle loro fonti

Oltre a raggruppare gli elementi di design, abbiamo anche esaminato le connessioni tra i diversi componenti, note come reti. Esaminando queste reti, possiamo determinare se due reti provengono dalla stessa fonte e svolgono funzioni simili. Se sì, è probabile che siano parte della stessa struttura logica.

Per fare questo, abbiamo valutato il tipo e la funzione dei componenti associati a ciascuna rete e controllato la loro prossimità sul chip FPGA. Se entrambe le condizioni erano soddisfatte, le abbiamo raggruppate insieme; altrimenti, le abbiamo considerate come appartenenti a strutture separate.

Conclusione e lavori futuri

Attraverso lo sviluppo del nostro algoritmo di raggruppamento, miriamo a migliorare come possiamo comprendere e recuperare i design FPGA dopo che sono stati creati. L'algoritmo fornisce un modo per analizzare la disposizione fisica del design e inferire la sua struttura logica senza necessitare di conoscenze precedenti sul circuito.

I risultati dei nostri test indicano che il nostro approccio è efficace nel migliorare l'identificazione degli elementi di design. Andando avanti, intendiamo esplorare modi per identificare le funzioni specifiche di questi componenti raggruppati. Questo aiuterà a chiarire ulteriormente come le varie parti di un design FPGA lavorino insieme.

In sintesi, la nostra ricerca offre importanti intuizioni nel processo di reverse engineering dei design FPGA, migliorando la nostra capacità di mantenere, migliorare e garantire questi componenti vitali nell'elettronica moderna.

Articoli simili