Questo è ben lungi dall'essere un compito semplice grazie alle tecniche di protezione della memoria .
Nei vecchi tempi di MS-DOS, Windows 9x e sistemi equivalenti di home computer, la memoria era effettivamente condivisa da tutti i processi in esecuzione. In tali condizioni il tuo sentimento è giusto: qualsiasi processo utente può accedere e modificare la memoria da altri processi, anche il kernel del sistema operativo non ha alcuno scopo di proteggere completamente se stesso.
Ma questa è una vecchia storia ora. Come ereditarietà dei computer mainframe (unità ingombranti di grandi dimensioni utilizzate per attività altamente sensibili e parallele), sistemi operativi per computer domestici e le architetture dei processori hanno ricevuto tecniche di protezione della memoria reali.
Alla base di questa tecnica c'è una mappa che consente di abbinare una memoria segmento al suo processo proprietario. Grazie a questo, a un processo non è più consentito accedere a qualsiasi cosa al di fuori della propria memoria. Se un processo tenta di infrangere questa regola (il più delle volte come risultato di un bug) il sistema operativo lo uccide senza pietà (questo è temuto errore di segmentazione o "segfault" per gli intimates).
Questo significa che la minaccia che stai descrivendo non potrà mai più accadere? In sicurezza, non dire mai "mai" : ogni sistema tanto sicuro quanto può sembrare ha il suo difetto:
- Il tutto è controllato dal kernel del sistema operativo, quindi un difetto nel kernel potrebbe portare a bypassare questa sicurezza e ottenere l'accesso a tutta la memoria come ai bei tempi andati. Un esempio su Linux potrebbe essere la chiamata di sistema ptrace , progettata per consentire il tracciamento (debug) di un processo. Le vulnerabilità vengono trovate di volta in volta consentendo a un processo non privilegiato di abusare di questa funzione per ottenere tali capacità.
- Dall'altra parte della catena, potresti anche voler bypassare completamente il sistema operativo e attaccare direttamente la memoria RAM fisica. L'attacco più noto in questa categoria è il Row Hammer : è stato rilevato che su molti moduli RAM il fatto di modificare rapidamente e ripetutamente il valore archiviato in una posizione può, a causa di qualche debolezza elettronica, influenzare e eventualmente modificare un valore memorizzato in una posizione vicina.
Dove il tuo incubo può diventare realtà riguardo al tuo linguaggio di scripting "abbastanza semplice" è che c'è ad esempio un lavoro implementazione JavaScript dell'attacco Row Hammer . Quindi in modo definitivo sì, è possibile che un programma JavaScript non privilegiato immetta del codice in un processo di root. Tuttavia, questa non è una cosa semplice, e man mano che vengono scoperti nuovi modi per farlo, vengono sviluppate nuove tecniche di protezione: la storia infinita della sicurezza IT;)!