Domanda:
Che cos'è SCARE (Side-Channel Attacks Reverse-Engineering)?
perror
2013-04-23 00:24:32 UTC
view on stackexchange narkive permalink

Quando si invertono le smart card, gli attacchi al canale laterale sono noti per essere abbastanza efficaci sull'hardware. Ma cos'è e può essere utilizzato nel reverse engineering del software e come?

Una risposta:
ixje
2013-04-23 00:59:34 UTC
view on stackexchange narkive permalink

Un " attacco a canale laterale " definisce qualsiasi tecnica che consideri canali di informazione non intenzionali e / o indiretti per raggiungere il suo obiettivo. È stato definito per la prima volta nella crittografia delle smart card per descrivere gli attacchi che utilizzano la fuga di informazioni involontarie dal chip incorporato nella scheda e che possono essere utilizzati per il recupero di chiavi e dati. Ad esempio, può essere utilizzato monitorando:

  • Execution Time (Timing attack): per distinguere quali operazioni sono state eseguite e indovinare, ad esempio, quale ramo del codice è stato selezionato (e, quindi, il valore del test).

  • Consumo energetico (attacco di monitoraggio dell'alimentazione): Per distinguere con precisione quale sequenza di istruzioni è stata eseguita e poter ricomporre i valori delle variabili. Si noti che esistono diverse tecniche di analisi che utilizzano lo stesso input ma con un modo leggermente diverso di analizzarlo. Ad esempio, possiamo elencare: Single Power Analysis (SPA), Differential Power Analysis (DPA), High-order Differential Power Analysis (HO -DPA), Attacchi modello , ...

  • Radiazione elettromagnetica (attacchi elettromagnetici): strettamente correlata al consumo di energia , ma può anche fornire informazioni che non si trovano nel consumo di energia, specialmente su chip RFID o NFC.

Se sei più interessato a imparare a sfruttare queste informazioni, allora io Suggerisco di iniziare leggendo Attacchi di analisi del potere. Non lasciarti "spaventare" dal fatto che il libro parla di smart card. La maggior parte delle informazioni si applica anche 1 a 1 su dispositivi embedded "normali" (SoC).

Ho dimenticato di menzionare che esiste una piattaforma open source chiamata OpenSCA e alcuni hardware open source chiamato FOBOS (Flexible Open-source BOard for Side-channel) per il quale non riesco a trovare un collegamento adeguato da casa.

Reverse engineering da applicazione a software

Parlando ora dell'applicazione degli attacchi side-channel nel reverse engineering del software, sono più o meno gli attacchi che si baseranno sull'utilizzo di fughe di informazioni non intenzionali o indirette. Il miglior esempio recente è questo post di Jonathan Salwan che descrive come ha indovinato la password di un crackme semplicemente contando il numero di istruzioni eseguite su vari input con Pin.

Più in generale, questa tecnica è stata utilizzata da molto tempo nel reverse engineering del software senza nominarla, o avrebbe potuto migliorare molte analisi. L'idea di base è prima considerare che se un pezzo di software è troppo oscuro per capirlo rapidamente, possiamo considerarlo come una scatola nera e pensare di utilizzare una tecnica a canali laterali per indovinare i dati inclusi attraverso una prova ed errori guidati tecnica.

L'elenco dei canali secondari disponibili nel reverse engineering del software è molto più lungo di quello che abbiamo nell'hardware. Perché racchiude l'elenco precedente e aggiunge alcuni nuovi canali come (elenco non esaustivo):

  • Conteggio istruzioni : consente di identificare comportamenti diversi a seconda del input.

  • Conteggio lettura / scrittura : come sopra, con più possibilità di identificare i modelli perché include anche la lettura delle istruzioni.

  • Conteggio interruzioni aumentato : a seconda del tipo di interruzione generato, quando e come, potresti identificare comportamenti diversi ed essere in grado di determinare il buon percorso verso il tuo obiettivo.

  • Indirizzi di istruzione accessibili : consentono di ricostruire le parti del programma che sono attive in un momento preciso.

  • Indirizzi di memoria a cui si accede : consente di ricostruire pattern di dati o strutture di dati complesse archiviate o accessibili in memoria (ad es. nell'heap).

Questo elenco è lungi dall'essere esaustivo, ma fondamentalmente strumenti come Valgrind VM o altri possono essere utilizzati per eseguire tale analisi e dedurre rapidamente informazioni sul comportamento di un determinato programma, accelerando così il reverse engineering.

Offuscamento e possibili contromisure

Cercare di costruire un software che resista a tali attacchi prenderà molto in prestito anche dall'industria delle smart card. Ma non solo. Ecco alcuni trucchi a cui potrei pensare (ma lungi dall'essere completo su tutto ciò che possiamo trovare).

Rami del programma di armatura

Il conteggio delle istruzioni è estremamente efficiente per rilevare quale ramo è stato preso in un codice come questo:

  if (value) ret = foo (); else ret = bar ();  

Con foo () e bar () con conteggio delle istruzioni diverso.

Questo può essere annullato eseguendo foo () e bar () qualunque sia value e decidere successivamente qual è il valore di ret.

  tmp_foo = foo (); tmp_bar = bar (); if (value) ret = tmp_foo; else ret = tmp_bar;  

Questa tecnica rende il tuo programma molto più difficile da indovinare da un attacco di canale laterale, ma anche molto meno efficiente. Bisogna trovare un giusto compromesso.

Contrastare gli attacchi a tempo

Gli attacchi a tempo sono estremamente facili da eseguire e difficili da aggirare perché sleep () non può essere un'opzione (troppo facile da rilevare in un codice e, comunque, non si può assumere una velocità specifica per il processore). Il programmatore deve identificare il tempo di esecuzione di ogni ramo del suo programma e bilanciare ogni ramo con operazioni extra non utili che hanno la stessa potenza di calcolo di quelle degli altri rami. Il punto è rendere ogni ramo indistinguibile dagli altri solo in base al tempo di esecuzione.

Threading Madness

Un altro modo per diluire il canale laterale è eseguire massicciamente il multi-thread del programma. Immagina che ogni ramo del tuo programma venga eseguito in un thread separato e una variabile dica in quale thread si trova realmente il programma corrente (se possibile in modo criptico). Quindi l'analisi del canale laterale sarà molto più difficile da eseguire.

Conclusione e ulteriori ricerche

Gli attacchi del canale laterale sono stati ampiamente sottovalutati per il reverse engineering del software, può drasticamente accelerare il contrario di molti programmi. Ma, allo stesso tempo, esistono tecniche di offuscamento che devono essere sviluppate specificatamente per il reverse engineering del software. Quindi, non stupirti se vedi sempre più novità legate a questo campo.

Sfortunatamente, l'articolo di Wikipedia è semplicemente sbagliato e confuso. Prima di tutto, non dobbiamo confondere l'iniezione di guasti e gli attacchi side-channel, quindi DPA (Differential Power Analysis) non viene nemmeno menzionato, ma sembra essere l'attacco più utilizzato al giorno d'oggi. E, infine, dopo aver letto questo articolo di wikipedia, non vedo ancora quali sono le matematiche utilizzate per rivelare nuovi dati. Anche la citazione di alcuni tutorial potrebbe aiutare.
Ammetto di non aver letto l'intero articolo wiki perché pensavo che le informazioni che hai richiesto fossero state menzionate all'inizio. Consiglio ancora vivamente il libro DPA che ho citato. Descrive anche la matematica. Dopodiché puoi provare a trovare documenti presentati a conferenze come [CHES] (http://www.iacr.org/workshops/ches/) per attacchi più avanzati. Se desideri un'introduzione gratuita ad alcuni elementi distintivi dell'analisi del canale laterale, puoi leggere il capitolo 3.7 di questo documento [Analisi dei componenti principali e SCA] (http://www.ru.nl/publish/pages/578936/principal_component_analysis_and_sca_-_jip_hogenboom.pdf)
In effetti, non ho criticato affatto il tuo contributo (il libro sembra estremamente interessante), ma l'articolo di Wikipedia che è più un elenco dettagliato senza una definizione reale (e, inoltre, classificano l'iniezione di guasti come un attacco di canale laterale che è sbagliato).
Per chiunque cerchi il documento di analisi dei componenti principali e SCA appena menzionato (il collegamento è ora interrotto), prova qui: http://www.ru.nl/publish/pages/769526/principal_component_analysis_and_sca_-_jip_hogenboom.pdf


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...