O gdb pode depurar programas-raiz suid?

15

Eu escrevi um programa que chama setuid(0) e execve("/bin/bash",NULL,NULL) .

Então eu fiz chown root:root a.out && chmod +s a.out

Quando executo ./a.out , obtenho um shell de root. No entanto, quando faço gdb a.out , ele inicia o processo como usuário normal e inicia um shell de usuário.

Então ... posso depurar um programa raiz setuid?

    
por jyz 01.07.2011 / 01:53

2 respostas

21

Você só pode depurar um programa setuid ou setgid se o depurador estiver sendo executado como root. O kernel não permite que você chame ptrace em um programa em execução com privilégios extras. Se assim fosse, você seria capaz de fazer o programa executar qualquer coisa, o que efetivamente significaria que você poderia, por exemplo. execute um shell de root chamando um depurador em /bin/su .

Se você executar o Gdb como root, poderá executar seu programa, mas estará observando apenas seu comportamento quando executado pelo root.

Se você precisar depurar o programa quando ele não for iniciado pelo root, inicie o programa fora do Gdb, faça uma pausa antes de chegar à parte problemática e attach do processo dentro do Gdb ( at 1234 onde 1234 é o ID do processo).

    
por 01.07.2011 / 02:02
6

Aqui está uma maneira de iniciar o processo em um estado parado, se você quiser. Use um script bash fazendo:

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

Faça isso ser executado em segundo plano.

Em seguida, inicie gdb e anexe ao pid que foi impresso.

Você terá que percorrer o comando exec com gdb , mas poderá depurar desde o início.

    
por 13.02.2013 / 20:41