SUID是网络入侵者非常爱用的入侵入口,SUID Root程序更是入侵者在UNIX系统留后门的一种主要形式。SUID程序代表了重要的安全漏洞,特别是SUID设为root的程序,随便翻开一本计算机安全书籍都能够找到关于注意SUID安全的章节。但到底什么是SUID?SUID的工作原理是什么?入侵者是如何利用SUID程序留下后门的?
1.SUID概述
在解释SUID之前必须先介绍两个概念:用户号UID(User ID)和用户组号GID(Group ID)。对Unix系统有所了解的朋友都知道,这两个ID)是UNIX系统用于惟一标识用户和同组用户及用户访问权限的。当UNIX中的一个进程执行时被分别赋予4个编号,分别为实际UID(realuser ID)和有效的UID(effective user ID)、实际GID(real group ID)和有效的GID(effective group ID)。实际ID是在登录过程中建立的用户ID,有效的ID用于确定该进程对于文件的存取许可,通常有效的UID和GID与实际UID和GID是相同的,但是通过设置SUID和SGID位会改变这种情况。
在UNIX系统中,某些时候没有特权的用户必须具有某种特权才能完成某项任务。例如passwd程序,它允许用户改变自己的口令。然而改变用户口令需要修改/etc/passwd文件,在UNLX系统中,还有许多类似的情况,为了解决这个问题,UNIX采用了设置用户ID许可SUID (Set UID)和设置用户组ID许可SGID(Set GID),使得一些可执行程序在执行时行使第二个用户或另一组用户的权限,即在运行时,拥有另一个用户的UID或另一组的GID(具体的权限是此可执行程序的属主权限),从而拥有可以访问本不可以访问的资源。而这个可以改变UID许可的程序就是SUID程序,可能改变GID许可的就是SGID程序。
如何识别SUID程序呢?我们可以检查文件的权限模式,在它的第四位如果不是x,而是s,就是一个SUID程序,同时可以用:chmod u+s filename和chmod u-s filename命令来设置或取消一个可执行程序的SUID位。SUID和SGID基本原理是一致的,本文只以SUID为例进行阐述。
上面我们说通常一个进程的有效UID与实际UID是相同的,但通过设置可执行文件得到SUID会改变上述情况。当运行了设置了SUID的可执行文件时,进程有效UID值变为该可执行文件的所有者的有效UID,而不再是执行该程序的用户的有效UID,因此这时此进程就有了与该文件所有者相同的存取许可,能访问一些普通用户不能访问的资源,但也只能是做些系统规定它做的事情。以passwd为例来具体说明。
在Unix系统的进程数据结构中,有这样的两个域:
ushortp_uid;
ushortp_suid。
p_uid中存取进程的UID值,p_suid存储进程的有效ID值。一般的程序的p_suid和p_uid值是相同的。
在系统中有两个passwd文件,一个在/etc文件夹下,存放用户的口令等信息,是—个文本文件,任何用户都可以读,另一个在,usr/bin目录下,是一个可执行命令。先看看/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
我们可以看到文件主权限部分的x位被一个s代替了。当一个UID为101的用户执行
passwd命令改变自己的口令时,该进程的p_uid赋值为101,而因为passwd是SUID root程序,所以它的p_suid有效ID值则被赋值为0。这个时候passwd就能读写原本只有超级用户才能修改的/etc/passwd文件。当然,虽然passwd命令这时可以访问超级用户才能访问的文件,但也只能是修改/etc/passwd中关于用户自身的信息这项工作而已,而不能干其他事。但如果这些SUID程序是ksh,csh等root shell,那就极度危险了。
2.封堵SUID漏洞
通过上面的阐述,我们对SUID程序及其原理已有所了解,下面讲讲入侵者是如何利用
SUID程序的。
利用系统中的SUID程序漏洞取得root权限。系统中像passwd这些的SUID程序很多,
它们广泛存在于系统的/bin,/usr/bin,/usr/bin和/usr/sbin等目录下,以可执行程序的形式存在,这些文件通常为超级用户所有。当然,这些SUID root程序也像passwd一样,虽然能访问普通用户不能访问的资源,但只能做系统规定做的事。但是入侵者却能利用这些SUID的特性及其编写时的一些漏洞进行缓冲区溢出,轻易取得系统的超级用户权限,如Solaris 2.4中的/usr/bn/fdformat是用来格式化软盘的程序,由于需要写外部设备,因此系统在安装时将这个储蓄的权限设置成SUID root,利用该程序的缓冲区溢出漏洞(溢出代码可以从www.hack.ha.co找到)可以取得root权限。
另一种威胁UNIX安全的典型攻击就是通过复制一份ksh,csh等root Shell,然后取个
充满迷惑性的名字放入比较隐蔽的文件夹下,再将这些复本设置SUID位,通过调用这个后
门,攻击者可以再次获得root的权限。
所以管理员们注意了,在离开控制台时最好锁屏。许多攻击是来自内部的,一个有恶意
的人刚好路过,他只要几秒钟就可以留个后门。还要注意的是,当http是以root用户作为属主运行时,恶意编写的COI程序也能轻易复制一些SUID shell供入侵者使用。
到此文章该结束了。其实SUID后门虽然流行,但已经很老了,系统管理员应该定期查
看系统中有哪些SUID和SGID文件,也可以用下面的命令实现:
find/-typef(-perm-4000-o-perm-2000)-print
当然,入侵者可以通过修改 find 命令来逃避检测,所以最好用些运行专门的UNIX检测软件(如Tripwire)来检测,对一些系统带来的SUID root程序,如果不用,也可以取消其s位。