L'invio di grandi quantità di dati ad un programma è chiamato attacco con overflow del buffer dello stack. Solitamente, i dati contengono comandi destinati ad essere eseguiti dal programma. Questi attacchi hanno lo scopo di ottenere accesso non autorizzato al sistema, distruggerne o alterarne i dati, oppure causare la negazione del servizio agli utenti autorizzati.
Per individuare gli attacchi con overflow del buffer dello stack, fare attenzione alle seguenti variazioni:
Un programma setuid che esegue altri programmi.
Un programma ottiene inaspettatamente un ID utente pari a zero (0). L'ID utente zero è riservato al superutente o a root.
Per prevenire gli attacchi con overflow del buffer dello stack:
Abilitare il parametro sintonizzabile del kernel executable_stack.
Utilizzare il comando chatr +es.
Il parametro sintonizzabile del kernel executable_stack consente di impedire che un programma esegua del codice dal proprio stack. Questa azione impedisce ad un intruso di trasferire dati illegali ad un programma, in modo da fargli eseguire del codice arbitrario dal proprio stack del programma.
Il parametro sintonizzabile del kernel executable_stack abilita o disabilita globalmente la protezione contro gli attacchi con overflow del buffer dello stack. Un'impostazione pari a 0 (zero) fa sì che gli stack non siano eseguibili ed è consigliata per ragioni di sicurezza. Per impostazione predefinita e per compatibilità con il passato, executable_stack è impostato a 1, il che consente l'esecuzione dello stack e quindi non garantisce la protezione. Per modificare il valore di executable_stack, usare HP SMH o il comando kmtune.
Un altro modo per gestire la protezione contro l'overflow del buffer dello stack consiste nell'usare l'opzione +es del comando chatr. Ad esempio, se executable_stack è impostato a zero ma un programma deve eseguire il suo stack, per consentirlo usare il seguente comando chatr:
# chatr -es enable programma
Per ulteriori informazioni, vedere chatr(1), kmtune(1M) e executable_stack(5).