SUID是網(wǎng)絡(luò)入侵者非常愛用的入侵入口,SUID Root程序更是入侵者在UNIX系統(tǒng)留后門的一種主要形式。SUID程序代表了重要的安全漏洞,特別是SUID設(shè)為root的程序,隨便翻開一本計算機安全書籍都能夠找到關(guān)于注意SUID安全的章節(jié)。但到底什么是SUID?SUID的工作原理是什么?入侵者是如何利用SUID程序留下后門的?
1.SUID概述
在解釋SUID之前必須先介紹兩個概念:用戶號UID(User ID)和用戶組號GID(Group ID)。對Unix系統(tǒng)有所了解的朋友都知道,這兩個ID)是UNIX系統(tǒng)用于惟一標識用戶和同組用戶及用戶訪問權(quán)限的。當(dāng)UNIX中的一個進程執(zhí)行時被分別賦予4個編號,分別為實際UID(realuser ID)和有效的UID(effective user ID)、實際GID(real group ID)和有效的GID(effective group ID)。實際ID是在登錄過程中建立的用戶ID,有效的ID用于確定該進程對于文件的存取許可,通常有效的UID和GID與實際UID和GID是相同的,但是通過設(shè)置SUID和SGID位會改變這種情況。
在UNIX系統(tǒng)中,某些時候沒有特權(quán)的用戶必須具有某種特權(quán)才能完成某項任務(wù)。例如passwd程序,它允許用戶改變自己的口令。然而改變用戶口令需要修改/etc/passwd文件,在UNLX系統(tǒng)中,還有許多類似的情況,為了解決這個問題,UNIX采用了設(shè)置用戶ID許可SUID (Set UID)和設(shè)置用戶組ID許可SGID(Set GID),使得一些可執(zhí)行程序在執(zhí)行時行使第二個用戶或另一組用戶的權(quán)限,即在運行時,擁有另一個用戶的UID或另一組的GID(具體的權(quán)限是此可執(zhí)行程序的屬主權(quán)限),從而擁有可以訪問本不可以訪問的資源。而這個可以改變UID許可的程序就是SUID程序,可能改變GID許可的就是SGID程序。
如何識別SUID程序呢?我們可以檢查文件的權(quán)限模式,在它的第四位如果不是x,而是s,就是一個SUID程序,同時可以用:chmod u+s filename和chmod u-s filename命令來設(shè)置或取消一個可執(zhí)行程序的SUID位。SUID和SGID基本原理是一致的,本文只以SUID為例進行闡述。
上面我們說通常一個進程的有效UID與實際UID是相同的,但通過設(shè)置可執(zhí)行文件得到SUID會改變上述情況。當(dāng)運行了設(shè)置了SUID的可執(zhí)行文件時,進程有效UID值變?yōu)樵摽蓤?zhí)行文件的所有者的有效UID,而不再是執(zhí)行該程序的用戶的有效UID,因此這時此進程就有了與該文件所有者相同的存取許可,能訪問一些普通用戶不能訪問的資源,但也只能是做些系統(tǒng)規(guī)定它做的事情。以passwd為例來具體說明。
在Unix系統(tǒng)的進程數(shù)據(jù)結(jié)構(gòu)中,有這樣的兩個域:
ushortp_uid;
ushortp_suid。
p_uid中存取進程的UID值,p_suid存儲進程的有效ID值。一般的程序的p_suid和p_uid值是相同的。
在系統(tǒng)中有兩個passwd文件,一個在/etc文件夾下,存放用戶的口令等信息,是—個文本文件,任何用戶都可以讀,另一個在,usr/bin目錄下,是一個可執(zhí)行命令。先看看/etc/passwd文件:
$ls—l/etc/passwd
rw-r--p-1 root root 1939 Oct 8 06:00/etc/passwd
我們看到/etc/passwd文件是不允許普通用戶修改的,但運行passwd命令卻能修改口令。
再看看/usr/birdpasswd命令文件:
$ls-l/usr/bin/passwd
-r-s--x--x 1 root root 1463Mar 142002/usr/bin/passwd
我們可以看到文件主權(quán)限部分的x位被一個s代替了。當(dāng)一個UID為101的用戶執(zhí)行
passwd命令改變自己的口令時,該進程的p_uid賦值為101,而因為passwd是SUID root程序,所以它的p_suid有效ID值則被賦值為0。這個時候passwd就能讀寫原本只有超級用戶才能修改的/etc/passwd文件。當(dāng)然,雖然passwd命令這時可以訪問超級用戶才能訪問的文件,但也只能是修改/etc/passwd中關(guān)于用戶自身的信息這項工作而已,而不能干其他事。但如果這些SUID程序是ksh,csh等root shell,那就極度危險了。
2.封堵SUID漏洞
通過上面的闡述,我們對SUID程序及其原理已有所了解,下面講講入侵者是如何利用
SUID程序的。
利用系統(tǒng)中的SUID程序漏洞取得root權(quán)限。系統(tǒng)中像passwd這些的SUID程序很多,
它們廣泛存在于系統(tǒng)的/bin,/usr/bin,/usr/bin和/usr/sbin等目錄下,以可執(zhí)行程序的形式存在,這些文件通常為超級用戶所有。當(dāng)然,這些SUID root程序也像passwd一樣,雖然能訪問普通用戶不能訪問的資源,但只能做系統(tǒng)規(guī)定做的事。但是入侵者卻能利用這些SUID的特性及其編寫時的一些漏洞進行緩沖區(qū)溢出,輕易取得系統(tǒng)的超級用戶權(quán)限,如Solaris 2.4中的/usr/bn/fdformat是用來格式化軟盤的程序,由于需要寫外部設(shè)備,因此系統(tǒng)在安裝時將這個儲蓄的權(quán)限設(shè)置成SUID root,利用該程序的緩沖區(qū)溢出漏洞(溢出代碼可以從www.hack.ha.co找到)可以取得root權(quán)限。
另一種威脅UNIX安全的典型攻擊就是通過復(fù)制一份ksh,csh等root Shell,然后取個
充滿迷惑性的名字放入比較隱蔽的文件夾下,再將這些復(fù)本設(shè)置SUID位,通過調(diào)用這個后
門,攻擊者可以再次獲得root的權(quán)限。
所以管理員們注意了,在離開控制臺時最好鎖屏。許多攻擊是來自內(nèi)部的,一個有惡意
的人剛好路過,他只要幾秒鐘就可以留個后門。還要注意的是,當(dāng)http是以root用戶作為屬主運行時,惡意編寫的COI程序也能輕易復(fù)制一些SUID shell供入侵者使用。
到此文章該結(jié)束了。其實SUID后門雖然流行,但已經(jīng)很老了,系統(tǒng)管理員應(yīng)該定期查
看系統(tǒng)中有哪些SUID和SGID文件,也可以用下面的命令實現(xiàn):
find/-typef(-perm-4000-o-perm-2000)-print
當(dāng)然,入侵者可以通過修改 find 命令來逃避檢測,所以最好用些運行專門的UNIX檢測軟件(如Tripwire)來檢測,對一些系統(tǒng)帶來的SUID root程序,如果不用,也可以取消其s位。