Quando non puoi usare strcmp?

5

Ho letto che non si dovrebbe usare strncmp (userSuppliedPassword, origPassword, sizeOfArray) (o String.equals in Java) poiché si può usare un attacco di temporizzazione per indovinare la password. Piuttosto, si dovrebbe usare una funzione di confronto delle stringhe sicure che impiegherà la stessa quantità di tempo se il confronto fallisce o ha esito positivo.

Ma poichè userSuppliedPassword e origPassword dovrebbero essere sottoposti a hash (e salati), a meno che uno stia già facendo qualcosa di stupido, non sembra che ci sia modo di sfruttare questo attacco.

Quindi quando questa raccomandazione è vera?

    
posta time 12.01.2016 - 00:32
fonte

2 risposte

6

Come hai detto, quando si utilizza una funzione di confronto delle stringhe che non è stata progettata per resistere agli attacchi temporali, potrebbe essere sfruttata per indovinare la stringa con cui si confronta.

Il confronto tra stringhe non criptate e non alterate in effetti perde la stringa originale, sia essa una password (memorizzata in un database o codificata), un ID di sessione, un indirizzo email o un token di autenticazione a più fattori, ovvero questo attacco è non limitato al senso comune di "password".

Se le stringhe sono crittografate e la funzione di crittografia è nota all'attaccante (con le chiavi associate), allora potrebbe indovinare la stringa crittografata, quindi decrittografarla per ottenere la stringa originale.

Se le stringhe sono hash e la funzione hash è nota all'attaccante (e il sale associato, se ce n'è uno), allora l'hash sarà sempre più difficile ogni byte (a causa di l'effetto valanga ), rendendo molto difficile indovinare più dei primi byte dell'hash, ma questo potrebbe essere sufficiente per la forza bruta se la stringa originale non ha abbastanza entropia.

Questo consiglio è vero quando stai confrontando qualsiasi stringa fornita dall'utente (o lo hai cancellato o meno) con qualsiasi tipo di dati sensibili (vedi sopra, personalmente ritengo che qualsiasi informazione relativa a un utente sia sensibile).

    
risposta data 12.01.2016 - 13:42
fonte
3

Sebbene sia vero in teoria, tali attacchi temporali non sono particolarmente rilevanti in molti scenari pratici.

  • È irrilevante per la maggior parte dei tipi di scenari di attacco locali, perché in questo caso ci sono di solito vettori di attacco molto migliori.
  • È irrilevante per la maggior parte dei tipi di scenari di attacco remoto, perché la modifica delle latenze di rete causa tanta incertezza che una differenza di microsecondi nei tempi di risposta non è misurabile.

Un caso limite in cui possono essere importanti gli attacchi a tempo, è quando si attaccano i sistemi di "scatola nera" dell'hardware incorporato. Ad esempio smart card o chipset di crittografia.

    
risposta data 12.01.2016 - 14:00
fonte

Leggi altre domande sui tag