|
FreeBSD安全通告: telnetd包含远程缓存溢出
作者:FreeBSD.ORG quany译 来源:http://www.freebsd.org 2001-08-10 19:06:02
--------------------------------------------------------------------------------
FreeBSD-SA-01:
安全通告
FreeBSD, 公司.
题目: telnetd 包含远程缓存溢出
类别: 核心
模块: telnetd
公布: 2001-07-23
修订: 2001-07-27
确认: Sebastian
影响: 所有FreeBSD4.4版本以前的FreeBSD 3.x, 4.x发行版本
更正日期以前的FreeBSD 4.3-STABLE
改正日期: 2001-07-23
是否仅限于FreeBSD: 不是
0.修订历史
2001-07-23 v1.0 最初发行
2001-07-27 v1.1 更新补丁说明, kerberosIV补丁包可用,增加对SSH 的说明
I.背景
telnetd 提供实现远程虚拟终端协议的服务。
II.问题描述
FreeBSD的telnetd服务程序被发现含有缓存溢出漏洞,因为对用于远程客户输出数据缓存范围的不正确检查, 攻击者可以促使缓存溢出并崩溃,或者以telnetd运行者身份(通常是root)运行恶意代码,
利用该弱点并不需要一个正式的系统帐号和密码 ,只要能连接到服务器的telnet端口就行。
如果安装FreeBSD时未选择"high"安全模式,telnetd都是默认运行的. 这个弱点可以被利用,并且经常被利用。
在更正日期以前的所有发行版本FreeBSD包括3.5.1-RELEASE、4.3-RELEASE都因这个原因被攻击。在即将发行的4.4-RELEASE版本中不含这个漏洞。
III.效果
远程用户可以用telnetd的运行者身份(通常是root)执行有害命令。
IV. 处理办法
1) 停止telnet服务,这个服务一般由inetd启动:
在 /etc/inetd.conf文件中如果有以下行,将其注释掉,
telnet stream tcp nowait root /usr/libexec/telnetd telnetd
telnet stream tcp6 nowait root /usr/libexec/telnetd telnetd
以root身份运行以下命令
# kill -HUP 'cat /var/run/inetd.pid'
您可以选别的远程登陆协议来替代Telnet,比如说SSH安全shell 协议(这个在FreeBSD的默认安装中都有包括)。因其增强的安全性,SSH
协议被FreeBSD 系统推荐用于远程登陆,它比telnet能提供更安全和完整的保护。
2) 使用TCP wrappers (/etc/hosts.allow)增加访问限制,在周边防火墙或服务器上安装网络级的信息包过滤器,比如ipfw(8)
or ipf,以限制只有信任的机器才能访问telnet服务。
V. 解决方案
任选其一:
1) 将您易受攻击的FreeBSD系统升级到更正日期以后的4.3-STABLE或RELENG_4_3 安全版本。
2) FreeBSD 3.5.1, 4.x 更正日期以前的版本
以系统是否装有/usr/src/crypto/telnet源码划分,有两种版本的补丁包可用,为检测您系统是否装有该源码,运行以下命令:
# ls /usr/src/crypto/telnet/telnetd
可能的结果是:
ls: /usr/src/crypto/telnet/telnetd: No such file or directory
这表示您没有crypto 源码,需要下载non-crypto-telnet补丁:详情请看下面的 2b)
这些补丁已在下面的系统获得验证:2001-07-20以前的FreeBSD 4.2-RELEASE,4.3-RELEASE and
3.5.1-STABLE (使用3.5.1-RELEASE的用户必须先安装先前FreeBSD 安全通告00:69的补丁,然后安装该补丁).
这些补丁不使用于更早期的或别的非支持版本FreeBSD.
2a) 安装了crypto-telnet源码的系统
在FreeBSD 4.x环境下,crypto-telnet客户程序有两种模式:有或没有对Kerberos IV 认证的支持,在FreeBSD 3.x
环境下,都有KerberosIV支持。
检测您的系统是否安装了kerberosIV,运行以下命令:
# ls /usr/lib/libkrb.a
可能的结果是:
/usr/lib/libkrb.a # 这表示您装了kerberosIV
ls: /usr/lib/libkrb.a: No such file or directory #这表示您没装kerberosIV
下载补丁包,然后校验PGP信息
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd-crypto.patch
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd-crypto.patch.asc
2aa) 对于安装了crypto-telnet源码,但没有安装KerberosIV的
[FreeBSD 4.x systems]
# cd /usr/src/
# patch -p < /path/to/patch
# cd /usr/src/secure/lib/libtelnet
# make depend && make all
# cd /usr/src/secure/libexec/telnetd
# make depend && make all install
[FreeBSD 3.x systems]
# cd /usr/src/
# patch -p < /path/to/patch
# cd /usr/src/lib/libtelnet
# make depend && make all
# cd /usr/src/libexec/telnetd
# make depend && make all install
2ab)对于安装了crypto-telnet源码,也安装了KerberosIV的
# cd /usr/src/
# patch -p < /path/to/patch
# cd /usr/src/kerberosIV/lib/libtelnet
# make depend && make all
# cd /usr/src/kerberosIV/libexec/telnetd
# make depend && make all install
2b)对于没安装crypto-telnet源码的
下载补丁包,然后校验PGP信息
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd.patch
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd.patch.asc
# cd /usr/src/
# patch -p < /path/to/patch
# cd /usr/src/lib/libtelnet
# make depend && make all
# cd /usr/src/libexec/telnetd
# make depend && make all install
3) 运行FreeBSD 4.3-RELEASE的系统:
如果愿意就二进制直接打补丁方式进行测试和提供情况反馈,这里还有一个实验性质的补丁包可用。该补丁包只能安装于FreeBSD 4.3-RELEASE系统,
主要面向不便或不熟练使用源码补丁的人
如果您使用这种这种补丁包,请将各种意见反馈至security-officer@FreeBSD.org以作为我们的将来参考。
在安装过程中,被替换文件会被妥善备份.在将来删除安装包时,这些旧文件会被恢复,回到初始状态。有三个版本的升级package
可供选择,这取决于您的系统是否安装了crypto或kerberosIV
判断您的系统是否装了crypto 运行以下命令:
# ls /usr/bin/openssl
可能的结果是:
/usr/bin/openssl # 这表示您装了crypto
或ls: /usr/bin/openssl: No such file or directory # 这表示您没装crypto
判断您的系统是否包含kerberosIV,运行以下命令:
# ls /usr/lib/libkrb.a
可能的结果是:
/usr/lib/libkrb.a # 这表示您装了kerberosIV
或ls: /usr/lib/libkrb.a: No such file or directory # 这表示您没装kerberosIV
3a) 如果装了crypto
# 获取ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/packages/SA-01:49/security-patch-telnetd-crypto-01.49.tgz
# 获取ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/packages/SA-01:49/security-patch-telnetd-crypto-01.49.tgz.asc
先校验PGP信息,然后运行
# pkg_add security-patch-telnetd-crypto-01.49.tgz
3b) 如果装了kerberosIV
# 获取ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/packages/SA-01:49/security-patch-telnetd-kerberosIV-01.49.tgz
#获取ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/packages/SA-01:49/security-patch-telnetd-kerberosIV-01.49.tgz.asc
先校验PGP信息,然后运行
# pkg_add security-patch-telnetd-kerberosIV-01.49.tgz
3c) 如果crypto、kerberosIV都没装
# 获取ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/packages/SA-01:49/security-patch-telnetd-01.49.tgz
# 获取ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/packages/SA-01:49/security-patch-telnetd-01.49.tgz.asc
先校验PGP信息,然后运行
# pkg_add security-patch-telnetd-01.49.tgz
|