Mentre il supporto Intel Shadow Stack esiste dai tempi delle CPU Tiger Lake come parte della Control-flow Enforcement Technology (CET) di Intel, finalmente per il kernel Linux 6.4 questa funzionalità di sicurezza è abilitata con il kernel Linux principale.
Gli ingegneri di Intel Linux lavorano da tempo al supporto dello stack shadow come parte di CET. L’altra parte di CET, Indirect Branch Tracking, è stata aggiornata in Linux 5.18.
La funzionalità shadow stack di Intel per Linux 6.4 è la protezione dell’indirizzo di ritorno per difendersi dagli attacchi di programmazione orientata al ritorno (ROP). Le ultime CPU AMD forniscono anche la funzionalità Shadow Stack compatibile con l’implementazione di Intel.
L’ingegnere Intel Linux di lunga data Dave Hansen ha inviato la richiesta pull x86/shstk lunedì per aver finalmente introdotto questa funzionalità. Ha spiegato in quel messaggio:
Si prega di estrarre x86/shstk per 6.4. Questo è il tanto atteso supporto Shadow Stack. È la funzionalità di sicurezza hardware più desiderata da molto tempo. Sia AMD che Intel hanno implementazioni (compatibili). È presente sul lato Intel sin dalle CPU di 11a generazione, ma ha avuto qualche inciampo lungo la strada ed è un po’in ritardo.
La parte più complicata di tutta questa faccenda (IMNHO) era che gli stack di ombre esistono in un’area grigia di autorizzazione. Uno stack shadow PTE dice letteralmente Write=0, ma alcune istruzioni _possono_ scrivere su di esso. Inoltre, i PTE non possono essere di sola lettura, quindi non possono essere COW. Sono stravaganti.
Le autorizzazioni PTE Write=0,Dirty=1 significano anche che il dirty bit non può essere utilizzato liberamente come prima. Queste due cose si combinano per creare una discreta quantità di abbandono della gestione PTE.
Altre cose che dovresti sapere:
1. C’è una quantità non trascurabile di core mm churn. Ha riconoscimenti da gente di mm e spero che non sia una sorpresa per Andrew. Questi aggiungono un argomento VMA a pte_mkwrite(). C’è un nuovo utente nella pila di Andrew che dovrà essere sistemato prima che venga unito all’albero mm.
2. C’è stato un insolito ringhio di problemi di compatibilità dello spazio utente con gli shadow stack. Mentre il passaggio ai nuovi valori arch_prctl() ha aiutato, possiamo ancora immaginare scenari in cui questo vecchio codice potrebbe morderci. Il piano è provare a vietare a qualsiasi app problematica di utilizzare lo stack ombra se nella pratica viene fuori qualcosa. Ovviamente dovremmo essere alla ricerca di questi.
3. Questo è in conflitto con il codice LAM che arriva in x86/mm. Discuterò la risoluzione quando invierò x86/mm.
Al momento in cui scrivo Linus Torvalds deve ancora ottenere il supporto Shadow Stack o fare commenti alla mailing list. Vedremo se tutto va bene che Linus inserisca questa funzionalità per Linux 6.4 o se ha riserve dati i commenti sopra. Si spera che questa funzionalità di sicurezza Intel/AMD per aiutare a respingere gli attacchi ROP venga finalmente unita.