Come prevenire attacchi di buffer overflow

April 18

Come prevenire attacchi di buffer overflow


Attacchi di buffer overflow sono una comune forma di attacco per un hacker di provocare il caos in un sistema. Ci sono attacchi di overflow heap-based, che sono rari, e gli attacchi stack-based, che azzerano erroneamente il limite di memoria per lo stack, facendolo traboccare. I dati straripamento si sposta in altri buffer, corrompere o la sovrascrittura dei dati validi lì, causando potenzialmente una cascata di buffer danneggiati, molto simile a una cascata di traboccante bicchieri di champagne. Per prevenire gli attacchi di buffer overflow, è necessario avere conoscenze specifiche di programmazione di computer, l'accesso al codice in questione e il tempo e la pazienza di spulciare pagine e pagine di codice per implementare le modifiche necessarie per proteggere i sistemi.

istruzione

1 Scrivere codice di sicurezza per prevenire gli attacchi di overflow. In C, ci sono una serie di funzioni vulnerabili che gli hacker possono sfruttare per riempire troppo i buffer. Ridurre al minimo l'uso di strcpy (), strcat (), sprintf () e vsprintf (), che non eseguono il controllo dei limiti. Se possibile, evitare l'uso di gets (), che non specifica quanti caratteri devono essere leggere e lascia quindi il codice vulnerabile. Se si utilizzano scanf (), assicurarsi di specificare una larghezza per il formato% s per evitare sforamenti.

2 Controllare per vedere se è possibile utilizzare trampolini per evitare buffer overflow. Dal buffer overflow si verifica nelle pile di memoria e non nel codice, la soluzione più semplice sembrerebbe prevenire il vostro pile di eseguire qualsiasi codice con l'inserimento di un piccolo pezzo di codice per proibire queste azioni. Questo è possibile in Linux, ma è molto difficile. Solo pochi compilatori usano le piccole parti di codice chiamato trampolini, che agiscono come una barriera tra il codice chiamante una funzione e la funzione stessa. Quindi, se il codice dannoso tenta di sovrascrivere un buffer, il trampolino può intercettare e vanificare i tentativi del hacker.

3 Implementare strumenti di compilazione per darvi avvisi quando si utilizza il codice che ti lascia vulnerabili agli attacchi. Alcuni di questi strumenti genererà il codice che vieta agli stranieri di accedere indirizzi non validi e si spegnerà codice che tenta tale esecuzione. Prodotti come StackShield e StackGuard sono di grande aiuto. StackSheild esaminerà l'indirizzo di ritorno di una funzione e terminare in caso di irregolarità. StackGuard pone una parola canarino sul indirizzo di ritorno e controlla se questa parola è stato alterato, che chiude una funzione quando si ha.

4 Installare strumenti come libsafe per verificare la sicurezza in un ambiente dinamico, in fase di esecuzione. Libsafe viene eseguito in Linux e controlla l'indirizzo di ritorno più vicino da un frame dello stack, allora sì che l'indirizzo non viene sovrascritto. Libsafe sostituirà anche le funzioni non sicure come gets (), strcpy () e scanf ().