Come possono essere sicure le utilità con setuid impostato su root se sono eseguibili?

7

Oggi ho sentito a Uni qualcosa che ha infranto il mio modello mentale sulla separazione dei diritti degli utenti. Vale a dire, ho sentito che:

I can freely debug all programs I have the permission to run, even those that have setuid set to root.

Ciò significa che posso, ad esempio, eseguire su sotto debugger. L'ho provato e ha funzionato:

gdb su

Questo è strabiliante per me. Posso presentarti il mio precedente modello mentale sulla gestione dei diritti degli utenti in modo che tu possa correggermi dove ho sbagliato e spiegarmi come stanno davvero le cose?

Fino ad oggi, credevo che:

  • Tutto ciò che viene eseguito sotto il mio account utente è, per definizione, "mio". Cioè, posso fare liberamente tutto ciò che voglio con un programma del genere, in particolare posso eseguirne il debug, il che implica che posso leggere e modificare tutti i dati che un programma memorizza nella sua memoria, o persino correggerli mentre è in esecuzione.
  • Programmi con setuid impostato su un altro utente - supponiamo che sia root, per semplicità - eseguito con diritti che superano i diritti del mio account utente, ma in cambio si suppone che facciano solo ciò che sono stati progettati per fare : qualsiasi cosa di più e si tratta di una violazione della sicurezza. Pertanto, questi programmi, sebbene possano essere eseguiti da il mio account, eseguono comunque in l'account che li possiede, quindi dal punto di vista della gestione dei diritti, vengono eseguiti come se sono stati gestiti dal loro proprietario - quindi non posso leggere la loro memoria o interrompere la loro esecuzione, in modo da non poterli piegare alla mia volontà, quindi in particolare non riesco a eseguirne il debug.

Il secondo punto è manifestamente falso. Ma, secondo il mio modello mentale (chiaramente errato), questo implica che, se io - per esempio - eseguo su sotto gdb , posso intrappolare il momento in cui su decide se la password è corretta, modifica questo frammento della memoria di su per costringerlo a credere che la risposta a questa domanda fondamentale sia positiva, quindi riprendere la sua esecuzione e voilà, ora ho i diritti di root. Bene, gli autori binari potrebbero cercare di offuscare il loro codice per renderlo difficile, ma una persona esperta e persistente può sempre superare questo e questo non si applica a su in ogni caso dal momento che è open source.

Dov'è il mio modello mentale sbagliato? Dove è in contrasto con la realtà?

    
posta gaazkam 29.10.2018 - 17:19
fonte

1 risposta

14

Normalmente, quando su gira, esegue setuid (come root). Quando lo avvii con gdb, il bit setuid non ha effetto (perché viene sottoposto a inversione di posizione), quindi anche se lo convinci di aver inserito la password corretta, non avrà il permesso di darti un nuovo UID. Il motivo è mitigare l'attacco esatto che descrivi.

    
risposta data 30.10.2018 - 01:38
fonte

Leggi altre domande sui tag