권한이 삭제된 후 ptrace suid 바이너리

권한이 삭제된 후 ptrace suid 바이너리

아마도 suid 바이너리에서는 ptrace를 수행할 수 없다는 것을 알고 있습니다. 그러나 바이너리가 euid 대신 uid에 대한 권한을 떨어뜨린 후 왜 ptrace를 수행할 수 없는지 궁금합니다.

예를 들어 바이너리에서 suid 바이너리는 일부 단계 후에 권한을 삭제합니다.

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

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

내 경우에는 "whoami"가 인쇄되면 프로세스의 사용자 이름이지만 프로세스의 소유자는 아닙니다. 프로그램이 정크 입력을 기다리고 있을 때 uid를 사용자 이름으로 사용하여 실행 중인 프로세스에 연결하려고 했지만 바이너리가 권한을 삭제했음에도 불구하고 실패했습니다. ptrace 연결이 저장된 UID 상태를 사용하여 내가 소유자가 아니라고 결정하는 것이 가능합니까?

답변1

귀하의 예제 코드는 권한을 삭제하지 않습니다! 를 호출하여 자유롭게 권한을 다시 상승시킬 수 있습니다 seteuid(euid). 이를 ptrace할 수 있다면 이를 호출하여 seteuid(euid)권한 있는 코드를 실행할 수 있습니다.

ptrace읽기 전용이라고 생각해서 묻는 겁니까 ? 아니요, 그렇지 않습니다. strace단지 그것으로 할 수 있는 한 가지 일뿐입니다. ptrace추적자가 단순히 관찰하는 것이 아니라 피추적자에서 임의의 코드를 실행할 수 있도록 합니다. "읽기 전용" ptrace 액세스 권한을 부여하는 세분화된 액세스 제어는 없습니다.

그러나 읽기 전용 ptrace도 위험합니다. 높은 권한을 가진 애플리케이션이 기밀 데이터를 조작하고 있을 수 있습니다. 따라서 권한이 삭제된 경우에도 권한이 부여된 프로세스를 추적할 수 없습니다. 프로세스는 execve권한이 부여된 모든 흔적을 삭제하기 위해 호출해야 합니다.

답변2

전환 가능성이 있기 때문에 좋은 추측인 것 같습니다.뒤쪽에, 이는 보안 문제가 발생할 수 있는 것으로 알려진 영역입니다.

추가 자료:

관련 정보