двоичные файлы ptrace suid после сброса привилегий

двоичные файлы ptrace suid после сброса привилегий

Я понимаю, что мы, вероятно, не можем сделать ptrace для suid-бинарных файлов. Однако мне интересно, почему мы не можем сделать ptrace после того, как двоичный файл теряет свой приоритет до uid вместо euid.

Например, в двоичном файле suid двоичный файл теряет привилегии после некоторых шагов.

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

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

В моем случае, когда выводится "whoami", это имя пользователя процесса, но не его владелец. Когда программа ожидает ввода ненужных данных, я пытался подключиться к запущенному процессу с uid в качестве имени пользователя, но это не удалось, хотя двоичный файл отменил привилегию. Возможно ли, что ptrace attach использует состояние сохраненного uid, чтобы решить, что я не владелец?

решение1

Ваш пример кода не снижает привилегии! Он может свободно повышать привилегии снова, вызывая seteuid(euid). Если вы можете ptrace, то вы можете заставить его вызвать seteuid(euid)и таким образом выполнить привилегированный код.

Вы спрашиваете это, потому что думали, ptraceчто это только для чтения? Нет, это не так: straceэто всего лишь одна вещь, которую вы можете с ним сделать; ptraceпозволяет трассировщику выполнять произвольный код в трассируемом, а не просто наблюдать. Нет никакого детального контроля доступа, который предоставляет доступ ptrace «только для чтения».

Но даже ptrace только для чтения опасен. Приложение с повышенными привилегиями может манипулировать конфиденциальными данными. Поэтому вы не можете ptrace для процесса, который был привилегированным, даже если он был удален из привилегий. Процесс должен вызвать, чтобы execveудалить все следы того, что он был привилегированным.

решение2

Это кажется хорошей догадкой, учитывая возможность переключенияназад, что является известной областью, где могут возникнуть проблемы с безопасностью.

Дальнейшее чтение:

Связанный контент