三、Set-UID 特權程式
原文: Set-UID Programs and Vulnerabilities 譯者: 飛龍
這個講義的主要目标就是來讨論特權程式,為什麼需要他們,他們如何工作,以及它們有什麼安全問題。特權程式是可以給予使用者額外權限的程式,這些權限超出了使用者已有的權限。例如,Web 伺服器是特權程式,因為他允許遠端使用者通路服務端的資源;Set-UID 程式也是個特權程式,因為他允許使用者在程式執行期間獲得 ROOT 權限。
這篇講義中,我們會專注于 Set-UID 的機制,并且在我們的案例學習中使用它。但是,我們在這裡讨論的許多安全原則也可以用在其他特權程式上。
1 Set-UID 機制如何工作
- 動機
- 你想讓其他人能夠搜尋檔案中的一些單詞,但是不想讓他們能夠讀取檔案。如何實作它呢?
- 使用者的密碼儲存在
中,普通使用者不可讀寫。但是,/etc/shadow
程式允許使用者修改它們自己的密碼。也就是,當使用者執行passwd
,它們可以突然修改passwd
,并且使用者隻能修改/etc/shadow
中的一項,但不是其他人的條目。如何實作?/etc/shadow
- Set-UID 程式
- 有效 UID 和真實 UID 的概念
- 對于非 Set-UID 程式,二者相同
- 對于 Set-UID 程式,前者是程式所有者的 UID,後者是程式使用者的 UID。
- 有效 UID 和真實 UID
- 登入時期,真實 UID 和有效 UID,以及登入過程儲存的 UID 都設為負責程序建立的使用者的登入 UID。對于真實、有效和儲存的組 ID 也一樣。它們設為負責程序建立的使用者的組 ID。
- 當程序調用
系列函數之一,來執行檔案(程式)時,程序相關的使用者群組辨別符會發生改變。如果執行的檔案是個 Set-UID 檔案,程序的有效和儲存的 UID 會設為所執行檔案的所有者。如果所執行檔案是個 Set-GID 檔案,有效 UID、儲存的 UID 以及有效 GID、儲存的 GID 不會改變。exec
- 通路控制基于有效 UID 和 GID。
- 為什麼
、passwd
和chsh
程式需要為 Set-UID 程式?su
- Windows NT/2000 中有沒有 Set-UID 程式?如果沒有,相同問題在 Windows 中如何解決?
- Windows 沒有 Set-UID 這個概念。不同的機制用于實作權限功能。開發者會将特權程式編寫為服務,使用者使用本地過程調用将指令行參數發給服務。
- 服務可以自動或手動啟動。
- 每個服務都有安全描述符,制定了哪個使用者允許啟動、停止和配置該服務。
- 服務通常在本地系統賬戶下運作。
- 如何打開 Set-UID 位:
% chmod 4755 file ---> -rwsr-xr-x
- Set-UID 在 Minix 中如何實作?
/* This is the per-process information */ EXTERN struct fproc { uid_t fp_realuid; /* real user id */ uid_t fp_effuid; /* effective user id */ gid_t fp_realgid; /* real group id */ gid_t fp_effgid; /* effective group id */ ... }
- Set-UID 機制的惡意使用:
- 攻擊者可以使用你的賬戶十秒。它能夠植入後門,以便之後再回到你的賬戶嗎?
由此,攻擊者建立了 Set-UID SHell 程式,你是這個程式的所有者。是以,當攻擊者之後再運作 Shell 時,它使用你的權限運作。% cp /bin/sh /tmp % chmod 4777 /tmp/sh
- 問題:
- 普通使用者是否可以調試 Set-Root-UID 程式?
- 普通使用者是否可以使用
來将檔案所有者修改為任何使用者?chown