Patch introdotte per randomizzare gli indirizzi dello stack del kernel Linux per le chiamate di sistema

Kees Cook, ex amministratore capo di sistema di kernel.org e leader dell'Ubuntu Security Team, che ora lavora presso Google per proteggere Android e ChromeOS, ha pubblicato una serie di patch per randomizzare gli offset nello stack del kernel durante l'elaborazione delle chiamate di sistema. Le patch migliorano la sicurezza del kernel modificando il posizionamento dello stack, rendendo gli attacchi allo stack molto più difficili e meno efficaci. L'implementazione iniziale supporta i processori ARM64 e x86/x86_64.

L'idea originale per la patch appartiene al progetto PaX RANDKSTACK. Nel 2019, Elena Reshetova, un'ingegnere di Intel, ha provato a creare un'implementazione di questa idea adatta per essere inclusa nel kernel principale di Linux. Successivamente l'iniziativa è stata ripresa da Kees Cook, che ha presentato un'implementazione adatta alla versione principale del kernel. Si prevede che le patch saranno incluse come parte della versione 5.13. La modalità sarà disabilitata per impostazione predefinita. Per abilitarlo vengono proposti il ​​parametro della riga di comando del kernel “randomize_kstack_offset=on/off” e l'impostazione CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Il sovraccarico derivante dall'attivazione della modalità è stimato in una perdita di prestazioni pari a circa l'1%.

L'essenza della protezione proposta è scegliere un offset casuale dello stack per ogni chiamata di sistema, il che rende difficile determinare la disposizione dello stack in memoria, anche dopo aver ricevuto i dati dell'indirizzo, poiché la successiva chiamata di sistema cambierà l'indirizzo di base dello stack. A differenza dell'implementazione PaX RANDKSTACK, nelle patch proposte per l'inclusione nel kernel, la randomizzazione viene eseguita non nella fase iniziale (cpu_current_top_of_stack), ma dopo aver impostato la struttura pt_regs, il che rende impossibile utilizzare metodi basati su ptrace per determinare l'offset randomizzato durante una chiamata di sistema di lunga durata.

Fonte: opennet.ru

Aggiungi un commento