ptrace binarios suid después de perder el privilegio

ptrace binarios suid después de perder el privilegio

Entiendo que probablemente no podamos hacer ptrace en binarios suid. Sin embargo, me pregunto por qué no podemos hacer ptrace después de que el binario pierda su privilegio de uid en lugar de euid.

Por ejemplo, en el binario, el binario suid pierde el privilegio después de algunos pasos.

 seteuid (euid);
 ret_chdir = chdir (path);
 seteuid (ruid);

 system("whoami");
 printf("Enter any char");
 scanf("%c", &junk);

En mi caso, cuando se imprime "whoami", es el nombre de usuario del proceso pero no el propietario del proceso. Cuando el programa está esperando una entrada basura, estaba intentando conectarme al proceso en ejecución con el uid como nombre de usuario, pero falló a pesar de que el binario había perdido el privilegio. ¿Es posible que ptrace adjunto utilice el estado de uid guardado para decidir que yo no soy el propietario?

Respuesta1

¡Su código de ejemplo no elimina privilegios! Puede volver a elevar privilegios libremente llamando a seteuid(euid). Si puede rastrearlo, puede hacer que llame seteuid(euid)y así ejecutar código privilegiado.

¿Preguntas esto porque pensabas ptraceque era de sólo lectura? No, no lo es: stracees sólo una cosa que puedes hacer con él; ptracepermite al rastreador ejecutar código arbitrario en el rastreado, no solo observar. No existe un control de acceso detallado que otorgue acceso a ptrace de “solo lectura”.

Pero incluso una ruta de sólo lectura es peligrosa. Una aplicación que ha tenido privilegios elevados podría estar manipulando datos confidenciales. Por lo tanto, no se puede rastrear un proceso que ha sido privilegiado, incluso si se le ha quitado el privilegio. El proceso tiene que llamar execvepara eliminar todo rastro de haber sido privilegiado.

Respuesta2

Parece una buena suposición, debido a la posibilidad de cambiaratrás, que es un área conocida donde se produciría un problema de seguridad.

Otras lecturas:

información relacionada