Perché i valori canarino dovrebbero essere scelti in fase di esecuzione anziché in fase di compilazione?

3

Per gli attacchi di overflow del buffer, la mia recensione dell'esame dice che ci sono degli svantaggi nella scelta dei valori delle canarie in fase di compilazione rispetto a runtime. Perché sarebbe meglio scegliere il valore delle canarie in fase di runtime?

    
posta Jack 08.04.2015 - 21:04
fonte

1 risposta

1

Un valore canarino scelto in fase di compilazione è costante da esecuzione a esecuzione, su tutte le copie del programma. Ciò significa che un utente malintenzionato può capirlo analizzando il programma; una volta che lo sanno, possono impostare il loro attacco di overflow in modo che l'overflow sovrascriva il canarino con lo stesso valore che aveva in origine, rendendo l'attacco non rilevabile.

Se il valore delle canarie viene scelto in fase di esecuzione, d'altra parte, un utente malintenzionato deve indovinarlo al primo tentativo. Se si sbaglia, l'attacco verrà rilevato; idealmente, ciò indurrebbe lo sviluppatore dell'applicazione a trovare e correggere il bug che ha permesso l'overflow in primo luogo.

Un vantaggio minore è che aumenta leggermente la sicurezza contro gli attacchi di forza bruta: per esempio, un utente malintenzionato che cerca di indovinare un canarino statico a 32 bit tramite tentativi ed errori dovrà fare una media di 2 miliardi di tentativi, dove un canarino scelto dal runtime avrà una media di circa 3 miliardi di tentativi perché il canarino può cambiare ad un valore che l'attaccante ha già provato.

    
risposta data 09.04.2015 - 04:24
fonte

Leggi altre domande sui tag