Product SiteDocumentation Site

4.15. Protezione contro i buffer overflow

Buffer overflow è il nome di un comune attacco al software[29] che approfitta di un controllo insufficiente (un errore di programmazione molto comune in C) in seguito all'esecuzione di codice immesso da un input. Questo tipo di attacco, portato contro i server che rimangono in attesa di una connessione remota e contro il software che gira localmente, che solitamente assegnar alti privilegi agli utenti (grazie ai setuid e setgid attivi) può compromettere ogni sistema.
Esistono principalmente quattro metodi per proteggersi dai buffer overflow:
  • Aggiungendo delle patch al kernel così da prevenire l'esecuzione dello stack.Potete usare: Exec-shield, OpenWall o PaX (incluso nelle patch Grsecurity ed Adamantix).
  • Fissando il codice usando strumenti per trovare frammenti del sorgente che potrebbero introdurre vulnerabilità.
  • recompile the source code to introduce proper checks that prevent overflows, using the http://www.research.ibm.com/trl/projects/security/ssp/ patch for GCC (which is used by http://www.adamantix.org)
Debian GNU/Linux, as of the 3.0 release, provides software to introduce all of these methods except for the protection on source code compilation (but this has been requested in http://bugs.debian.org/213994).
Notate che se Debian fornisse un compilatore con protezione contro stack o buffer overflow tutti i pacchetti dovrebbero essere ricompilati per poter introdurre questa funzionalità. Questo è, in effetti, quello che fa la distribuzione Adamantix (tra le altre caratteristiche). L'effetto di questa nuova funzionalità sul software è ancora da stabilire (alcuni programmi o alcune architetture di processori potrebbero non funzionare).
In any case, be aware that even these workarounds might not prevent buffer overflows since there are ways to circumvent these, as described in phrack's magazine http://packetstorm.linuxsecurity.com/mag/phrack/phrack58.tar.gz or in CORE's Advisory http://online.securityfocus.com/archive/1/269246.
Una volta implementato, se desiderate collaudare il vostro livello di protezione da buffer overflow (indipendentemente dal metodo scelto), potreste voler installare paxtest ed eseguire il test che fornisce.

4.15.1. Patch per la protezione del kernel da Kernel contro buffer overflows

Le patch relative al buffer overflow includono la patch Openwall che fornisce protezione contro gli overflow nel kernel 2.2. Per il kernel 2.4 o per quelli ancor più recenti, è necessario utilizzare l'implementazione Exec-shield o altrimenti PaX (fornita sia dalla patch grsecurity, kernel-patch-2.4-grsecurity, che dalla patch Adamantix, kernel-patch-adamantix). Per maggiori informazioni sull'uso di queste patch leggete Sezione 4.14, «Includere le patch nel kernel».

4.15.2. Collaudare i programmi contro gli overflow

L'uso di strumenti per trovare buffer overflows richiede, in ogni caso, un'esperienza da programmatori per sistemare (e ricompilare) il codice. Debian, fornisce, per esempio: bfbtester (un programma per collaudare la resistenza ai buffer overflow che utilizza binari con approccio a forza bruta mediante overflow da riga di comando o di ambiente). Altri pacchetti interessanti potrebbero essere anche rats, pscan, flawfinder e splint.


[29] Così comune, in effetti, che sono alla base del 20% delle vulnerabilità di sicurezza riportate tutti gli anni, come stabilito da http://icat.nist.gov/icat.cfm?function=statistics.