Seu código de exemplo não elimina privilégios! Ele pode elevar privilégios livremente chamando seteuid(euid)
. Se você puder rastreá-lo, então você pode chamar seteuid(euid)
e, assim, executar o código privilegiado.
Você está perguntando isso porque achou que ptrace
era somente leitura? Não, não é: strace
é apenas uma coisa que você pode fazer com isso; ptrace
permite que o rastreador execute código arbitrário na tracee, e não apenas observe. Não há controle de acesso refinado que garanta o acesso ptrace “somente leitura”.
Mas até mesmo um ptrace somente leitura é perigoso. Um aplicativo que tenha privilégios elevados pode estar manipulando dados confidenciais. Portanto, você não pode rastrear um processo que tenha sido privilegiado, mesmo que seja descartado com privilégios. O processo tem que chamar execve
para eliminar todos os vestígios de ter sido privilegiado.