360 for Linux 與 setuid
前言
今日,國內著名安全類軟件 360 正式進軍 Linux 平臺,目前已提供 Debian/Ubuntu/Deepin 以及中標麒麟的預編譯二進制。而包括我在內的吃螃蟹者都不同程度地注意到了 360 for Linux 的二進制在正常狀況下被設置了 setuid 位。即 4755 權限。如 http://www.v2ex.com/t/158380#reply27 以及 http://tieba.baidu.com/p/3499343332
圖: 360 for Linux 的權限位
如圖所示,這是我在 VirtualBox OSE 中安裝的 Lubuntu 14.10 中的 360 for Linux 安裝后的權限位, ls 已經將其標紅并且顯示權限位為 -rwsr-xr-x (4755) 。下面就 setuid 以及其作用展開一些推論。
什么是 setuid 以及相關的安全隱患
setuid 以及 setgid 是 UNIX 環境下的特殊權限位。當作用于可執行文件時,該權限位將導致無論以何用戶啟動,該可執行文件將擁有其所有者的權限。如 /usr/bin/sudo 的擁有者為 root 且權限為 4755, 那么即使一個非 root 用戶執行了 sudo, 其依然會擁有 root 的權限,如讀取 /etc/shadow 文件 (-r————, root:root) 的權限。對于用戶而言,其最直接的意義在于合法的無密碼提權。這使得一般使用該特性的程序都被小心設計以免不測。因為如果設計不當,攻擊者可能可以在不需要任何密碼的情況下輕松奪取對目標系統的最高權限。基于同樣的原因,包括 Linux 在內的部分操作系統會忽略設置在腳本文件上的 setuid/setgid 位。對于普通用戶而言,一個被 setuid/setgid 了的惡意可執行文件將能夠在不盜取密碼的情況下破壞整個系統(尤其是當類似 TOMOYO Linux 的強制訪問控制系統沒有正確設置時)。因而一般情況下開發者以及系統管理員都會謹慎處理這一特殊權限。如在 Debian 中,可以通過對 man 程序設置 setuid 位來加快 man-db 索引但是由于可能帶來的安全隱患該選項必須在安裝過程中由用戶啟用。
360 for Linux 對 setuid 應用的利弊分析
setuid 位最直接的用處是允許 360 for Linux 在不被用戶注意的情況下以 root 權限允許。一方面,這將免除用戶每次開機都要輸入密碼的麻煩;另一方面,由于用戶無法察覺,該程序可能在有意無意之中對系統造成無法修復的破壞或者成為其他惡意軟件入侵系統的跳板(比如 Windows 上的 Sony BMG CD 反拷貝程序由于設計不良就成為了其他惡意軟件的跳板)。同時,如果該程序留有(可能存在)的后門,用戶也無法從 UNIX 權限系統得到應有的保護。
圖:部分使用了 setuid 的程序。這些程序并非全部都需要該權限位,部分程序可以改用 PolicyKit 來實現提權。
PolicyKit 與無密碼提權一些想法
圖: GNOME PackageKit 使用 PolicyKit 進行有密碼提權以刪除軟件包
圖: Windows UAC 對需要 Administrator 權限的 Acronis True Image 進行提權前提示用戶輸入憑據
我們必須承認,無密碼提權在一定程度上方便了用戶,但與此同時這種行為也埋下了安全隱患。比如在 AOSC OS2 時代, AnthonOS 默認 sudo 可以進行無密碼提權但是這一設定以及因為潛在的安全風險被禁止了。
在很多時候,密碼是給用戶知情權與選擇權。用戶知道一個程序要提權并且用戶也有選擇去拒絕他所不信任的提權請求。同時,如果用戶如果對某個先前的決定反悔或發現其為誤操作,此時也可以阻止該行為的繼續以避免損失。
360 這種行為則涉嫌向用戶隱瞞自身的提權行為。這也許只是為了方便用戶,也有可能有其他企圖。
而如果只是為了避免在 Windows Vista 時代的尷尬,也就是每次開機都出現授權彈窗,也不一定需要使用 setuid 這一有嚴重安全隱患的方法。 PolicyKit 提供了一套將程序分離為以特權權限運行和以非特權權限運行的兩部分并且進行互相溝通的機制。比如 GNOME PackageKit 本身以非特權運行,其通過 PolicyKit 發起需要特權的請求并由 PolicyKit 決定是否需要用戶參與提權。而在 Windows 平臺上,Avira 旗下的安全產品的主界面并不需要以特權啟動,而僅在更改設定或關閉/開啟監控時通過 UAC 進行提權,避免了開機時彈出交互式授權對話框的尷尬。
結語
綜上所述, 360 for Linux 使用 setuid 可能有其原因。但是鑒于 setuid 本身巨大的隱患,建議用戶現階段慎重使用該軟件。我本人也呼吁現在與或即將與奇虎有合作的廠商對 360 for Linux 本身進行全面的安全審計以防被居心叵測者利用或者可能存在后門。與此同時,我本人也建議 360 for Linux 使用標準的 PolicyKit 架構,實現特權部分與非特權部分的分離,并且給用戶適當的提示以滿足其知情權和選擇權。
原文: http://blog.tombu.biz/post/106768706750/360-for-linux-setuid 作者: Judgement_Engineer