UNIX系统漏洞及防范措施
7.4 UNIX(telnet ftp finger SSH等)系统漏洞及来源于BSD telnet守护程序的telnetd存在一个边界检查错误。在处理telnet协议选项的函数中没有进行有效的边界检查,当使用某些选项时,可能发生缓冲区溢出在BSS区,因此攻击受到一定限制。防范措施
1. 多个Unix系统的telnetd存在缓冲区溢出漏洞
漏洞描述:
来源于BSD telnet守护程序的telnetd存在一个边界检查错误。在处理telnet协议选项的函数中没有进行有效的边界检查,当使用某些选项时,可能发生缓冲区溢出在BSS区,因此攻击受到一定限制。由于攻击者可以控制的字符是有限的而且溢出发生但是发现者报告说至少在某些系统(FreeBSD/BSDI/NetBSD)下攻击是切实可行的。
防范措施:
关闭Telnet,换用ssh或openssh;另外,也可安装厂商的补丁,目前FreeBSD为此发布了相应的补丁。
2.多个Unix系统Taylor UUCP 参数处理错误漏洞
漏洞描述:
Taylor UUCP 软件包中的某些组件在处理命令行参数时存在一个安全漏洞,可能导致本地攻击者获取uucp用户或者组权限。问题涉及了uux,uuxqt,uucp程序。对于OpenBSD 2.8系统,攻击者可以通过覆盖
/usr//daily的crontab脚本会定期执行这个程序。
对于RedHat 7.0,攻击者可以创建任意空文件,也可以指定在控制台登录时执行的命令。
其他系统也可能受到此问题影响。
测试程序:
zen-parse ([email protected])提供了如下测试代码:
(1)创建一个配置文件( /tmp/config.uucp ),允许执行任意命令且允许将文件拷贝到任意uid/gid uucp
有写权限的目录;
(2)创建一个包含你想执行的命令的命令文件( /tmp/commands.uucp );
(3)执行下列操作:
$Content$nbsp;THISHOST=`uuname -l`$Content$nbsp;WHEREYOUWANTIT=/var/spool/uucp/${THISHOST}/X./X.${THISHOST}X1337$Content$nbsp;uux ’uucp --config=/tmp/config.uucp /tmp/commands.uucp ’${WHEREYOUWANTIT}
3. UnixWare coredumps 跟随的符号连接
受影响的系统:UnixWare 7.1
漏洞描述:
用户可以用coredump数据覆盖系统文件,存在获得root权限的可能性。UnixWare的sgid执行文件允许dump core(suid不允许)。通过“计算”将要调用的sgid执行文件的pid,可以从“./core.pid”建立一个符号连接到一个group有写权限的文件。如果能找出与“./.rhosts”或“/etc/hosts.equiv”的关联,将会有机会得到root权限。
防范措施:
安装厂家的补丁程序。
4. UnixWare rtpm安全漏洞
受影响的系统:UnixWare 7.1
漏洞描述:
Unixware 在管理口令数据库方面与 Linux/BSD/Solaris 等系统有所不同。除了常规的/etc/passwd 和/etc/shadow文件外,Unixware还在/etc/security/ia/master和/etc/security/ia/omaster中保存这些文件的拷贝。这两个二进制文件以与/etc/passwd 和/etc/shadow 不同的格式存放数据。Unixware C 函数可以访问这些数据。Unixware系统中某些认证程序,如i2odialog守护程序,就使用这些文件而不使用/etc/shadow文件。
一旦发现了存在可攻击的sgid sys程序,几乎就可以完全控制整个系统了。/usr/sbin/rtpm就是一个存在缓冲区溢出(获取sys组权限)的程序。利用它的漏洞,攻击者可以从/etc/security/ia/master文件中抓取加密口令,或在/etc/security/tcb/privs文件中插入shell。通过这些方法都不难获得root权限。
防范措施:
安装厂家的补丁程序,可以去厂家的主页下载。
5. UNIX系统的mtr存在潜在安全漏洞
漏洞描述:
由Matt Kimball和Roger Wolff开发的“mtr”程序(0.42以下版本)在除了HPUX外的UNIX系统中存在潜在的安全问题。作者原意是通过调用seteuid(getuid())函数来防止利用mtr或其链接库非法获得root特权,但由于用户uid可以通过setuid(0)函数重置为0,攻击者只需利用在mtr所调用的链接库中寻找到的缓冲区溢出漏洞,就有可能成功获得root特权。在修补版本中,seteuid()函数被改为setuid()函数,从而清除了这个潜在安全漏洞。大多数的Linux发行版本包含了mtr工具的0.28版本。该版本也存在此漏洞,请向各发行商查询。
防范措施:
升级到mtr-0.42或以上版本。另一个临时的解决方法是去掉setuid属性。TurboLinux 6.0.2以上版本中该漏洞已被修补。
6. UnixWare majordomo 安全漏洞
漏洞描述:
在UnixWare 7.1中缺省附带的majordomo包中存在一个安全漏洞,允许本地用户获得额外的权限。目前已被测试的majordomo版本是1.94.4.majordomo wrapper允许用户用“owner”的uid和“daemon”的gid来运行/usr/local/majordomo目录下的程序。wrapper的属性被设置为:
-rwsr-xr-x 1 root daemon 6464 Jan 4 1999 /usr/local/majordomo/wrapper
但在执行该程序前,wrapper会先setuid()到“owner”,同时setgid()到“daemon”。
/usr/local/majordomo/resend是一个Perl程序,它没有正确检查输入的参数,因而可能导致安全问题。其中的有问题部分的代码如下:
-snip-# If the first argument is "@filename", read the real arguments# from "filename", and shove them onto the ARGV for later processing# by &Getopts()#if ($ARGV[0] =~ /^\@/) {$fn = shift(@ARGV);$fn =~ s/^@//;open(AV, $fn) || die("open(AV, \"$fn\"): $!\nStopped");-snip-
如果我们的第一个参数以“@”开始,resend 将尝试用 open()函数打开我们提供的文件名。但是如果文件名个参数是“@|id”,resend就会end的,resend其实是以owner:daemon的身份执行的,所以就可以获得“owner”用户和“daemon”组的权限。