GNU/Linux >> Linux Esercitazione >  >> Linux

Scopo dell'utilizzo di Setuid() nei programmi Suid?

Mi chiedo che un programma SUID come passwd sta usando setuid() chiamata di funzione. Perché perde i privilegi di root?

Contro quali tipi di attacco aiuta? Overflow del buffer?

Risposta accettata:

Per prima cosa parlerò del bit setuid, che passwd usa ed è distinto da setuid() chiamata di sistema (che passwd non usa). C'è forse una certa confusione nella domanda al riguardo.

Non è una protezione contro un buffer overflow, è vulnerabile a questo, o praticamente a qualsiasi cosa che consenta a un utente malintenzionato di utilizzare un processo privilegiato per qualche nefasto scopo non intenzionale. Questo perché il bit setuid è l'opposto di "eliminare i privilegi"; dona privilegi di root, ma solo al processo e non l'utente effettivo. Ciò include passwd .

Quella forma di setuid richiede il bit setuid del filesystem impostato sull'eseguibile; passwd ha questo perché ha bisogno dei privilegi per leggere e scrivere /etc/passwd . Tuttavia, speriamo che passwd non abbia vulnerabilità di sicurezza note (ad esempio, potenziale exploit di overflow) che consenta a una persona nefasta di farlo fare qualcosa di diverso dalla lettura e dalla scrittura di /etc/passwd (e oltre a farlo correttamente!), poiché funziona come root e quindi potrebbe fare qualsiasi cosa, tranne che è progettato per fare solo una cosa specifica e fargli fare qualsiasi altra cosa dovrebbe (di nuovo, si spera) sia impossibile.

Quindi l'uso di setuid in questo senso non è protezione contro nulla , ma viene spesso discusso in relazione alle vulnerabilità perché le potenziali vulnerabilità sono eseguibili WRT setuid molto importanti.

MA:il bit setuid imposta l'euid e non l'uid effettivo, quindi in realtà è parallelo a seteuid() chiamata di sistema e non setuid() .

Esiste una forma opposta di "setuid" che riguarda l'abbandono dei privilegi, che coinvolge l'effettivo setuid() chiamata di sistema e non richiede il bit setuid. Questo è quando un processo in esecuzione come root (perché root o sudo lo ha avviato) cambia il suo uid in un utente meno privilegiato. Server e demoni spesso lo fanno se hanno bisogno dei privilegi di root all'avvio (ad esempio, per aprire una porta privilegiata) ma non successivamente. In questo modo, se il server viene successivamente bloccato, non dispone dei privilegi di superutente. Non puoi chiamare setuid(0) e recuperare i privilegi di root (ma puoi farlo con set*e *uid).

Correlati:Scopo principale della CHIAVE STRANIERA?
Linux
  1. Utilizzo di UFW come lista nera IP

  2. Utilizzo di mod_cluster in Apache

  3. Git Completamento automatico?

  4. Puoi farlo? Compila i programmi C su Linux usando Make Command

  5. Scopo ioctl I2C_SLAVE

301 Reindirizzamento utilizzando NGINX

Come rimuovere i programmi installati dal sorgente utilizzando GNU Stow in Linux

Come formattare i programmi Shell usando Shfmt in Linux

Suggerimenti per l'utilizzo dello schermo

Come installare programmi Windows su Debian usando PlayOnLinux

Utilizzo di Runit su Devuan