cosa significa essere setuid root?

4

Sto leggendo i sistemi operativi moderni di Tanenbaum 3e. Dice "Supponiamo che il programma che viene attaccato [con codice dannoso] sia SETUID root in UNIX (o che abbia l'amministratore in Windows). Il [codice dannoso inserito con un buffer overflow attack] ora può effettuare un paio di chiamate di sistema per convertire il il file di shell dell'attaccante sul disco in root SETUID, in modo che quando viene eseguito abbia il potere di un superutente. "

Che cosa significa essere root SETUID? Intende dire che il programma ha i permessi di root? Perché dice che il programma è setuid root?

Questa domanda in qualche modo di lingua, ma per un noob di sicurezza con solo linux / unix di base, quel passaggio nel libro è difficile da capire. Di cosa sta parlando?

    
posta bernie2436 02.05.2012 - 16:33
fonte

2 risposte

6

SETUID significa che l'eseguibile può essere eseguito con autorizzazioni diverse rispetto all'utente che l'ha eseguito.

Alcune applicazioni sono impostate in questo modo, quindi gli utenti possono eseguire con autorizzazioni ridotte, ma può essere necessaria un'applicazione specifica che devono eseguire con autorizzazioni più elevate.

SETUID 0 o root significa che quando il programma viene eseguito è come se root lo avesse eseguito - il che ti lascia aperti ai soliti rischi per la sicurezza di eseguire qualcosa a livelli di autorizzazione elevati - potrebbe potenzialmente fare qualsiasi cosa al tuo sistema - quindi generalmente il numero di applicazioni che richiedono SETUID deve essere minimizzato su una scatola Unix. La maggior parte degli audit di sicurezza delle macchine Unix include la ricerca di file SETUID e SETGID che siano scrivibili a livello mondiale in quanto presentano un rischio elevato.

    
risposta data 02.05.2012 - 16:51
fonte
0

Gli account utente su sistemi unix sono identificati da un UID (user ID).

Un processo può essere associato a più di un UID. I due principali sono il "vero UID" che identifica chi possiede il processo e l'"UID utente efficace" che identifica quali permessi dell'utente il processo attualmente funziona sotto *.

"setuid" in questo contesto si riferisce a un bit di autorizzazione file (è anche il nome di una chiamata di sistema correlata). Quando è impostato su un file eseguibile e quel file viene eseguito, l'"UID efficace" viene modificato nel proprietario del file. Ciò significa che il programma viene eseguito con le autorizzazioni del proprietario piuttosto che le autorizzazioni dell'utente che lo ha eseguito.

Quando diciamo che un file eseguibile "è setuid root", allora intendiamo che ha il setuid bit impostato ed è di proprietà dell'utente 0 (root). Quindi verrà eseguito con un UID efficace pari a 0 e in pratica può fare tutto ciò che desidera.

Il "vero UID" rimane lo stesso, quindi il programma può identificare l'utente che lo ha eseguito e può tornare a quell'utente se lo desidera.

I programmi setuid sono / erano una parte importante dei sistemi Unix che consentono di esporre la funzionalità agli utenti in cui la funzione nel suo complesso è considerata sicura per l'utente da utilizzare, ma i blocchi di base utilizzati per implementare tali funzioni non lo sono.

Tuttavia sono anche rischiosi, un piccolo errore in un programma setuid può facilmente esporre più di quanto si pensasse di essere esposto. Diverse funzionalità correlate al debug sono inoltre disabilitate per i programmi setuid per impedire che vengano utilizzate per aggirare le restrizioni.

Negli ultimi tempi, i sistemi Linux hanno sostituito alcuni usi di "setuid" con un nuovo meccanismo chiamato "capacità" che consente un'assegnazione di privilegi speciali ai programmi più dettagliata.

* Ci sono anche potenzialmente altri, ma non sono immediatamente relavent qui, vedi link per ulteriori dettagli.

    
risposta data 25.08.2018 - 01:52
fonte

Leggi altre domande sui tag