Esiste un nome comune per un difetto software che porta a un trasferimento imprevisto di segreti sul filo?

5

Supponiamo che in un programma C ++ io usi un'area di memoria per archiviare temporaneamente una chiave di crittografia e non sovrascrivere quella regione in seguito. Quindi il mio programma vuole inviare un pacchetto di dati attraverso la rete.

A causa di un errore nel codice esso legge non solo il pacchetto di dati preparato ma anche una regione di memoria adiacente e quest'ultimo è uguale alla regione precedentemente utilizzata per la chiave. Quindi, anche se il programma non ha mai pianificato di farlo, trasferisce il segreto sul filo.

Esiste un nome comune per questo tipo di difetti del software?

    
posta sharptooth 10.08.2011 - 12:32
fonte

3 risposte

5

Il tipo che hai descritto è in effetti un sovraccarico del buffer , come descrive @Thomas Pornin.

Esiste un'altra classe di vulnerabilità correlata, che rientra in uso di dati non inizializzati . Ciò può verificarsi se il codice viene letto da una posizione di memoria che non riesce a inizializzare e quindi invia il valore letto sulla rete. Se sei sfortunato e quella posizione di memoria in precedenza conteneva una chiave crittografica o un altro segreto, un tale bug può rivelare segreti. Ecco alcuni esempi di questo tipo di vulnerabilità in vari pacchetti software: in OpenSSH , in Kerberos e nei driver del kernel Linux . Vedi anche CWE-665: Inizializzazione impropria per una visualizzazione più ampia.

Tutti questi elementi rientrano nella categoria generale di divulgazione delle informazioni .

    
risposta data 11.08.2011 - 00:16
fonte
6

Questo bug è un overflow del buffer - il tipo di "lettura". Un overflow del buffer è dove un codice utilizza un buffer (una sequenza di elementi in memoria) e accede a elementi oltre i limiti del buffer (in genere, si chiama "overflow" quando l'accesso è passato all'ultimo elemento e "underflow" quando è prima del primo elemento).

Tradizionalmente, i buffer overflow che portano ai più grandi buchi di sicurezza sono quelli in cui i dati sono scritti oltre il buffer, poiché consentono a un utente malintenzionato di modificare il comportamento del software attaccato, fino a un compreso il lancio di una shell. Tuttavia, gli accessi read oltre il buffer possono essere un importante problema di sicurezza, come dimostra il tuo esempio: può portare alla perdita di dati riservati (una chiave di crittografia è solo un archetipo di dati riservati).

Non ho riscontrato alcun termine specifico per la situazione in cui il buffer trabocca di dati riservati che risultano essere una chiave di crittografia. La maggior parte delle presentazioni pedagogiche di tale numero utilizzano "numero di carta di credito" come esempio lampante del motivo per cui la perdita di dati è negativa.

    
risposta data 10.08.2011 - 13:57
fonte
5

Quello che stai descrivendo è stato definito "perdita di dati", con il classico esempio di EtherLeak trovato da @stake nel 2003. Tale perdita si è verificata a livello di sistema operativo, ma presumo che un programma C ++ che non è riuscito a cancellare i buffer che stava utilizzando nelle comunicazioni di rete rientrerebbero nella stessa categoria.

    
risposta data 10.08.2011 - 15:09
fonte

Leggi altre domande sui tag