Durante la conferenza BlueHat IL 2023, David Weston, Vice President, Enterprise and OS Security di Microsoft, è salito sul palco per discutere l’evoluzione della sicurezza di Windows, fornire informazioni sugli ultimi progressi e sulla strada ancora da percorrere.
Durante la sua presentazione, Weston ha discusso i passi in avanti che sono stati finora compiuti e ha parlato dell’introduzione di codice Rust come parte integrante delle future versioni del kernel di Windows 11. Si tratta di una novità epocale perché Rust è un linguaggio di programmazione compilato che è stato sviluppato da Mozilla Research con il supporto della comunità open source.
Microsoft si è avvicinata a Rust per diversi motivi: il principale ha a che fare con le implicazioni sulla sicurezza che porta con sé l’adozione di questo linguaggio.
Cos’è Rust e perché Microsoft lo ha scelto per il kernel di Windows 11
La sicurezza della memoria e la protezione aggiuntiva offerta da Rust hanno indotto i tecnici di Microsoft a puntare proprio sul linguaggio di programmazione partorito da Mozilla anche per il kernel di Windows 11.
Rust è progettato per essere un linguaggio di programmazione ad alto livello che combina prestazioni elevate con sicurezza e affidabilità. È nato con il preciso intento di eliminare le vulnerabilità di sicurezza più comuni come le violazioni di memoria e gli accessi non autorizzati alle risorse del sistema. Per come è stato concepito, inoltre, Rust impedisce errori di programmazione che portano a race condition e null pointer.
Una race condition si verifica quando due o più thread di un programma tentano di accedere contemporaneamente alla stessa risorsa condivisa, come una variabile o un file. Se le operazioni non sono coordinate correttamente, possono verificarsi errori imprevedibili, poiché l’ordine in cui le operazioni vengono eseguite non è deterministico. I null pointer, invece, si hanno quando un programma cerca di accedere a un puntatore che non ha un valore valido o non ha un indirizzo di memoria associato. In questo caso si verifica un errore di runtime poiché il programma cerca di accedere a una zona di memoria che non dovrebbe esistere. Questa circostanza può causare comportamenti imprevedibili, crash del programma o addirittura la compromissione della sicurezza del sistema, se l’errore viene sfruttato “ad arte” da un utente malintenzionato.
Rust, inoltre, assicura prestazioni elevate grazie alla sua architettura di compilazione AOT (Ahead-of-Time) e alla gestione efficiente della memoria; fornisce supporto per la programmazione concorrente e parallela, consentendo ai programmatori di sfruttare le moderne architetture dei processori multi-core. Infine, chi programma in Rust può contare su una sintassi intuitiva e flessibile, oltre a una vasta gamma di librerie e strumenti.
Microsoft ha mostrato interesse per Rust già diversi anni fa con il preciso intento di rilevare ed eliminare bug di sicurezza in memoria prima che il codice finisse nelle mani degli utenti.
L’adozione “convinta” di Rust in Windows da parte dell’azienda di Redmond è iniziata nel 2020 con DWriteCore, implementazione del pacchetto Windows App SDK per l’analisi, la gestione e il rendering del testo: DWriteCore ora consiste di circa 152.000 righe di codice Rust e circa 96.000 righe di codice C++. Al di là delle migliorie in termini di sicurezza, le prestazioni nel rendering dei testi sono aumentate fino al 15%.
Anche Win32 GDI ovvero il set di API grafiche utilizzato da Windows per la renderizzazione della grafica 2D sta migrando su Rust: circa 36.000 righe di codice sono state riscritte in questo linguaggio.
A settembre 2022, lo stesso CTO di Microsoft Azure, Mark Russinovich, ha dichiarato che i nuovi progetti software dovrebbero utilizzare Rust anziché C/C++: un endorsement di questo calibro non poteva passare inosservato.
Adesso il linguaggio è stato quindi utilizzato in un componente di base e critico come il kernel del sistema operativo con l’obiettivo di convertire alcuni tipi di dati C++ interni nei loro equivalenti Rust. Nel medio-lungo termine la scelta di Microsoft, diciamo noi, dovrebbe permettere di ridurre significativamente il numero di vulnerabilità che in ogni patch day mensile vengono corrette e risolte nel kernel di Windows.
Weston ha aggiunto che a questo punto il kernel di Windows 11 trarrà presto vantaggio dal codice Rust e ciò avverrà già nel giro di qualche settimana.
Una mossa simile l’hanno fatta anche gli sviluppatori del browser da cui viene fatto derivare Google Chrome: Rust è supportato in Chromium proprio per migliorare la sicurezza durante la navigazione sul Web.