深談Unix操作系統(tǒng)SUID/SGID
今天我們來(lái)講解Unix操作系統(tǒng)中SUID/SGID,為什么要單獨(dú)把他們從文件權(quán)限中分出來(lái)講呢?因?yàn)椋@是Unix操作系統(tǒng)網(wǎng)絡(luò)入侵者非常愛用的入侵入口。SUID表示"設(shè)置用戶ID",SGID表示"設(shè)置組ID"。
當(dāng)用戶執(zhí)行一個(gè)SUID文件時(shí),用戶ID在程序運(yùn)行過(guò)程中被置為文件擁有者的用戶ID。如果文件屬于root,那用戶就成為超級(jí)用戶。同樣,當(dāng)一個(gè)用戶執(zhí)行SGID文件時(shí),用戶的組被置為文件的組。
例如,PS命令以SUID root運(yùn)行,他從系統(tǒng)內(nèi)存中讀取,這是一般用戶不能做的。Unix操作系統(tǒng)SUID程序代表了重要的安全漏洞,特別是SUID設(shè)為root的程序。
Unix操作系統(tǒng)實(shí)際上有兩種類型的用戶ID。"real user ID"是在登錄過(guò)程中建立的用戶ID。 "effective user ID"是在登錄后的會(huì)話過(guò)程中通過(guò)SUID和SGID位來(lái)修改。
當(dāng)一個(gè)用戶運(yùn)行一條命令時(shí),進(jìn)程繼承了用戶登錄Shell的權(quán)限,這時(shí)"real user ID"和"effective user ID"是相同的。當(dāng)SUID位被設(shè)置時(shí),進(jìn)程繼承了命令擁有者的權(quán)限。
例如普通用戶運(yùn)行passwd命令時(shí),他能夠修改/etc/passwd文件,盡管文件是屬于root的。這成為可能是因?yàn)閜asswd命令以root的SUID權(quán)限運(yùn)行。那么如何識(shí)別SUID程序呢?
我們檢查文件的權(quán)限模式,在它的第四位如果不是"x",而是"s",就是一個(gè)SUID程序。例如,ls -l /bin/su命令顯示: -rwsr-xr-x 1 root root 14888 Aug 15 1999 /bin/su* 表明su是一個(gè)SUID程序。
Unix操作系統(tǒng)安全的一種典型攻擊就是創(chuàng)建一個(gè)SUID是root的shell拷貝,然后把他隱藏。通過(guò)調(diào)用后門,攻擊者就獲得了root的權(quán)利。例如,某個(gè)系統(tǒng)管理員忘了關(guān)閉某個(gè)root的Shell,一個(gè)壞人經(jīng)過(guò)運(yùn)行如下命令:
cp /bin/bash /home/badman/.bash; chmod 4777 /home/badman/.bash
badman現(xiàn)在就有了一個(gè)bash的SUID root拷貝任其處理。他就有完整的root權(quán)限了。因此,Unix操作系統(tǒng)管理員應(yīng)該定期察看系統(tǒng)中有哪些SUID和SGID文件。用下面的命令可以實(shí)現(xiàn):find / -type f \( -perm -4000 -o -perm -2000 \) -ls
當(dāng)然,攻擊者可以通過(guò)修改find命令來(lái)逃避檢測(cè),所以要運(yùn)行專門的檢測(cè)軟件(如Tripwire)來(lái)進(jìn)行檢查。 好了,關(guān)于Unix操作系統(tǒng)中SUID/SGID的知識(shí),我們就介紹到這里了。
【編輯推薦】