È possibile che l'utente non privilegiato modifichi / inserisca nel processo di altri utenti (root)?

5

Anche se non sono uno specialista del kernel e non programma in linguaggi come C/C++ e quindi non ho una profonda conoscenza dei concetti critici di gestione dei processi a livello di sistema operativo mi sento che elabora / daemon / ascoltatori di socket io scrivo in linguaggi come PHP e JavaScript (Node) , nonostante sia abbastanza semplice, freddo essere usato dal programma dannoso, non necessariamente root privilegiato .

Quindi, vorrei sapere se l'utente non privilegiato può modificare / iniettare nel processo di altri utenti (root), e, in tal caso, quale sarebbe il vettore / punto di ingresso per questo ?

(ovvia stupidità come impostare il binario che esegue argv[1] o STDIN riga non rientrano nell'ambito di questa domanda).

Sto facendo questa domanda perché voglio estendere le mie conoscenze in merito al soggetto - danno fatto da, diciamo che alcuni web shell che sono entrati nella directory scrivibile apache / www-data e sono riusciti a iniettare in un processo di proprietà della radice sarebbe, per definizione, fatale per sicurezza.

    
posta Miloš Đakonović 26.03.2017 - 13:59
fonte

2 risposte

6

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;)!

    
risposta data 26.03.2017 - 15:24
fonte
2

Sì, ma dipende dal sistema operativo. Un modo per farlo è noto come attacco Buffer Overflow . Questi attacchi sono risultati di vulnerabilità a livello di kernel, quindi sono relativamente rari.

C'è un intero video sull'argomento di Computerphile: link

    
risposta data 27.03.2017 - 04:19
fonte

Leggi altre domande sui tag