Gdb può eseguire il debug dei programmi root suid?


16

Ho scritto un programma che chiama setuid(0)e execve("/bin/bash",NULL,NULL).

Poi l'ho fatto chown root:root a.out && chmod +s a.out

Quando eseguo ./a.outottengo una shell di root. Tuttavia quando lo faccio gdb a.outavvia il processo come utente normale e avvia una shell utente.

Quindi ... posso eseguire il debug di un programma root setuid?

Risposte:


22

È possibile eseguire il debug di un programma setuid o setgid solo se il debugger è in esecuzione come root. Il kernel non ti permetterà di chiamare ptraceun programma in esecuzione con privilegi extra. In tal caso, si sarebbe in grado di far eseguire qualsiasi programma, il che significherebbe effettivamente che si potrebbe ad esempio eseguire una shell di root chiamando un debugger /bin/su.

Se esegui Gdb come root, sarai in grado di eseguire il tuo programma, ma osserverai il suo comportamento solo quando eseguito da root.

Se è necessario eseguire il debug del programma quando non è avviato da root, avviare il programma al di fuori di Gdb, farlo sospendere in qualche modo prima di arrivare alla parte problematica e attachil processo all'interno di Gdb ( at 1234dove 1234 è l'ID del processo).


Sì, l'ho provato, ma il processo è avviato come root e anche gdb dovrebbe essere avviato come root per poter collegare il processo di root.
jyz

@jyzuz Sì, mentre scrivo devi avviare gdb come root. Oppure, se lo desideri, puoi utilizzare il debug remoto ed eseguire esattamente gdbservercome root e collegarti ad esso come un normale utente. Dal tuo commento sembra che non sei riuscito a farlo nel modo semplice (eseguendo gdb come root) ma non capisco cosa è andato storto, quindi non posso fare a meno.
Gilles 'SO- smetti di essere malvagio' il

7

Ecco un modo per avviare il processo in uno stato interrotto, se lo desideri. Usa uno script bash facendo:

echo $BASHPID; kill -STOP $BASHPID; exec sudo -u unpriviledged_user -g the_group_if_not_primary command

Esegui quella corsa in background.

Quindi avviare gdbe allegare al pid che è stato stampato.

Dovrai eseguire il execcomando con gdb, ma sarai in grado di eseguire il debug sin dall'inizio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.