刪除特權後的 ptrace suid 二進位文件

刪除特權後的 ptrace suid 二進位文件

我知道我們可能無法對 suid 二進位執行 ptrace。但是,我想知道為什麼在二進位檔案將其特權降低到 uid 而不是 euid 之後我們不能執行 ptrace 。

例如,在二進位檔案中,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 也是危險的。具有提升權限的應用程式可能正在操縱機密資料。因此,您無法追蹤已獲得特權的進程,即使它已放棄特權。該進程必須呼叫execve以刪除所有已獲得特權的痕跡。

答案2

這似乎是一個不錯的猜測,因為有可能切換後退,這是已知會導致安全問題的區域。

延伸閱讀:

相關內容