Come si evita la distruzione dello stack?

7

Ho appena letto il documento di AlephOne sulla distruzione dello stack e implementato sulla mia macchina (Ubuntu 12.04), era un po 'vecchio, quindi ho dovuto prendere molto aiuto da internet ma mi è piaciuto.

Ora, voglio sapere come viene impedito nella vita reale.

Sarebbe fantastico se mi potesse suggerire alcuni documenti o risorse online che dimostrino come è stato prevenuto.

    
posta Jaydeep 08.09.2013 - 14:21
fonte

2 risposte

11

Esistono due tecniche primarie per attenuare gli overflow del buffer basati su stack.

La prima tecnica sta attaccando il problema alle radici. Gli overflow del buffer si verificano quando un programma tenta di scrivere oltre i limiti di una struttura dati. Il modo più efficace per interrompere un buffer overflow è quello di smettere di verificarsi. Usa un linguaggio di programmazione, sia esso Java, Python, Ruby, che gestirà la memoria per te. Se devi usare C, assicurati di eseguire i controlli appropriati prima di scrivere su un buffer.

La seconda tecnica comporta la mitigazione del danno che può causare un sovraccarico del buffer. Tecniche come i canarini dello stack, DEP e ASLR rientra in questa categoria. Funzionano per limitare il danno che può causare un overflow del buffer rendendo più difficile per un utente malintenzionato eseguire codice arbitrario dopo un overflow. Tali tecniche possono essere sconfitte. Per ulteriori informazioni su DEP e ASLR, vedi questa domanda.

    
risposta data 08.09.2013 - 14:46
fonte
4

Solo una piccola nota:

Dato che stavi usando Ubuntu 12.04 per i test, devi aver dato un comando al tuo sistema (supponendo che tu abbia preso molto aiuto da internet e questa era la prima volta che stavi cercando di distruggere lo stack):

echo 0 > /proc/sys/kernel/randomize_va_space

O qualche comando correlato. Questo comando disabilita fondamentalmente il ASLR (citato da Terry) sul sistema. Per impostazione predefinita, ASLR è una funzione abilitata nelle versioni del kernel 2.6 e successive.

(In realtà volevo postarlo come commento, ma non era in grado di farlo a causa di problemi di reputazione:))

    
risposta data 02.10.2013 - 05:09
fonte