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à?