Come utilizzare il reverse engineering dinamico per dispositivi embedded

Blog

CasaCasa / Blog / Come utilizzare il reverse engineering dinamico per dispositivi embedded

May 21, 2024

Come utilizzare il reverse engineering dinamico per dispositivi embedded

La proliferazione dell’IoT è stata accompagnata da una proliferazione di vulnerabilità della sicurezza. Se non vengono controllati, gli aggressori malintenzionati possono sfruttare questi punti deboli per infiltrarsi nei sistemi delle organizzazioni. Regolare

La proliferazione dell’IoT è stata accompagnata da una proliferazione di vulnerabilità della sicurezza. Se non vengono controllati, gli aggressori malintenzionati possono sfruttare questi punti deboli per infiltrarsi nei sistemi delle organizzazioni.

I test di penetrazione regolari, riconosciuti da tempo come una best practice di sicurezza, aiutano i team di sicurezza a identificare e mitigare le vulnerabilità e i punti deboli nei dispositivi integrati. Molte organizzazioni, tuttavia, limitano i test con penna all'analisi di reti e infrastrutture: i dispositivi IoT vengono spesso trascurati.

Per tenere aggiornati i team di sicurezza sui pen testing dei dispositivi incorporati, Jean-Georges Valle, vicepresidente senior di Kroll, una società di consulenza sui rischi informatici e sui servizi finanziari, ha scritto Practical Hardware Pentesting: impara le tecniche di attacco e difesa per i sistemi embedded nell'IoT e altri dispositivi .

Nel seguente estratto dal Capitolo 10, Valle descrive in dettaglio come i pen tester possono utilizzare il reverse engineering dinamico per vedere come si comporta il codice durante l'esecuzione su dispositivi embedded. Valle fornisce un esempio di reverse engineering dinamico per mostrare ai pen tester le sfide che possono sorgere osservando il comportamento del codice.

Leggi un'intervista con Valle sui test di penetrazione incorporati, comprese le fasi di test comuni da lui utilizzate, le difficoltà dei test con penna incorporata e la sua opinione su quanto bene le organizzazioni oggi proteggono i dispositivi incorporati.

Nota dell'editore: il seguente estratto proviene da una versione ad accesso anticipato di Practical Hardware Pentesting, seconda edizione ed è soggetto a modifiche.

Ho preparato una variante dell'esempio precedente che ci porrà alcune sfide. Ti mostrerò come superare queste sfide sia staticamente che dinamicamente in modo che tu possa confrontare la quantità di sforzo necessario in entrambi i casi.

La regola pratica quando si confrontano approcci dinamici e statici è che il 99% delle volte, gli approcci dinamici sono semplicemente più semplici e dovrebbero avere la priorità, se possibile (non dimenticare che potresti non essere in grado di accedere a JTAG/SWD o altri protocolli di debug su chip).

In questa sezione impareremo anche come rompere dove vogliamo, ispezionare la memoria con GDB e tutte queste belle cose!

Il programma di destinazione si trova qui nella cartella clonata, nella cartella ch12.

Innanzitutto, iniziamo caricandolo in Ghidra e ispezionandolo superficialmente. Presta attenzione a impostare l'architettura e l'indirizzo di base corretti nella finestra di caricamento di Ghidra (fai riferimento al capitolo precedente se non ricordi come farlo o il valore dell'indirizzo di base).

A prima vista, la funzione principale sembra molto simile alla funzione principale del capitolo precedente. Possiamo trovare il riferimento alla funzione main cercando una stringa PASSWORD proprio come nel capitolo precedente ed analizzare la sua struttura.

Ti lascerò lavorare sulle competenze acquisite nel capitolo precedente per trovare le diverse funzioni. In questo eseguibile troverai nuovamente quanto segue:

La somiglianza della struttura è intenzionale poiché questa è la prima volta. Se dovessi ripetere esattamente gli stessi passaggi del capitolo precedente, non ti darebbe nulla di nuovo da imparare, giusto?

Ora esaminiamo diversi metodi per aggirare la convalida della password attraverso l'interazione dinamica con il sistema. Andremo dal più complesso al più semplice per mantenerti concentrato e acquisire know-how (se sei come me, se esiste un modo semplice per aggirare qualcosa, perché scegliere la strada più difficile?).

La prima cosa che faremo è provare a vedere come viene convalidata la password per capire come generare una password che superi i test.

Diamo un'occhiata al codice C equivalente della funzione di convalida restituito da Ghidra:

Humm... questo non fa nulla direttamente con i parametri. Questo sta copiando il contenuto di un array statico di byte lungo 0x47 (71) nella RAM (e NON lo chiama) e quindi lo chiama come una funzione.

Questo è strano.

O è?

Questa è una tecnica molto comune per camuffare il codice (ovviamente, una versione molto semplice). Se una versione chiara del codice operativo non è presente nel file .bin (e quindi non nel flash dell'MCU), uno strumento di reverse engineering come Ghidra non può rilevare che si tratta di codice! Qui abbiamo due possibili approcci: