Attacchi a tempo nel codice gestito

4

Ho sentito che il codice in esecuzione in una lingua gestita, ad es. Java nella JVM è impossibile da proteggere dagli attacchi temporali a causa della natura JIT della maggior parte dei runtime gestiti. Concettualmente sono d'accordo con questo, ma mi piacerebbe capire qual è l'attuale conoscenza del settore intorno a questo.

    
posta Anthony Kraft 12.11.2014 - 06:14
fonte

1 risposta

6

Un'affermazione ampia come "questo è impossibile" è improbabile che sia accurata al 100%.

È vero che Java (e linguaggi simili come C # /. NET) gira con un compilatore JIT che produrrà gli opcode effettivi solo in fase di esecuzione, quindi la sequenza di opcode è più difficile da prevedere; potrebbe anche cambiare con la versione di implementazione della VM. Inoltre, il linguaggio ha un efficiente GC che promuove l'uso della memoria dinamica, e in particolare le stringhe immutabili, che offrono un molti comportamenti temporali dipendenti dai dati.

È ancora possibile scrivere codice immune agli attacchi temporali, in particolare per gli algoritmi crittografici. Devi solo evitare alcune delle buone proprietà di Java, e usarlo come se fosse una sorta di C. abbattuto. Lavora su matrici di byte o char , usa l'aritmetica piuttosto che i test ... (così non utilizzare boolean ). Ad esempio, questo codice di sincronizzazione del tempo confronta x e y e li scambia se x è maggiore di y :

int cc = (y - x) >> 31;
int tmpx = (cc & x) | (~cc & y);
int tmpy = (~cc & x) | (cc & y);
x = tmpy;
y = tmpx;

Potremmo notare che Java rende tale codice in realtà un po 'più facile da scrivere rispetto a C poiché, contrariamente a C, offre un comportamento fisso standard quando si sposta a destra un valore negativo.

    
risposta data 12.11.2014 - 13:24
fonte

Leggi altre domande sui tag