[转] OpenSSH缓冲区管理操作远程溢出漏洞(包括AS3)

发表于:2007-07-04来源:作者:点击数: 标签:
以下是我今天看到的,AS3的SSH是3.6.1p2 我找到一个3.8的下载地址 ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-3.8p1.tar.gz (2004-2-24) [color=red:5fc9afcec8]刚刚发现一个最新的 ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable

以下是我今天看到的,AS3的SSH是3.6.1p2

我找到一个3.8的下载地址
ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-3.8p1.tar.gz
(2004-2-24)

[color=red:5fc9afcec8]刚刚发现一个最新的
ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-3.8.1p1.tar.gz[/color:5fc9afcec8]
(2004-4-19)

绿盟科技紧急通告(Alert2003-06)
Nsfocus安全小组(security@nsfocus.com)
http://www.nsfocus.com
发布日期:2003-09-17

CVE CAN ID:CAN-2003-0693

受影响的软件及系统:
====================
所有低于OpenSSH 3.7的版本均受影响:

    OpenSSH OpenSSH 3.6.1 p2
    OpenSSH OpenSSH 3.6.1 p1
    OpenSSH OpenSSH 3.5
    OpenSSH OpenSSH 3.4 p1
    OpenSSH OpenSSH 3.4
    OpenSSH OpenSSH 3.3 p1
    OpenSSH OpenSSH 3.3
    OpenSSH OpenSSH 3.2.3 p1
    OpenSSH OpenSSH 3.2.2 p1
    OpenSSH OpenSSH 3.2
    OpenSSH OpenSSH 3.1 p1
    OpenSSH OpenSSH 3.1
    OpenSSH OpenSSH 3.0.2
    OpenSSH OpenSSH 3.0.1
    OpenSSH OpenSSH 3.0

综述:
======
3.7版本之前的OpenSSH包含一个缓冲区管理错误,远程攻击者可以利用这个漏洞进行拒绝服务或者可能以OpenSSH进程权限在系统上执行任意指令。

根据目前的信息显示此漏洞将大多数情况下将只造成拒绝服务攻击,但也有消息说已经有可以执行指令的攻击代码在流传,因此我们强烈建议用户立刻检查一下您的系统是否受此漏洞影响,并按照我们提供的解决方法予以解决。

分析:
======
OpenSSH是一种开放源码的SSH协议的实现,初始版本用于OpenBSD平台,现在已经被移植到多种Unix/Linux类操作系统下。

3.7版本之前的OpenSSH包含一个缓冲区管理错误,远程攻击者可能利用这个漏洞进行拒绝服务或者可能以OpenSSH进程权限在系统上执行任意指令。

当OpenSSH接收到一个长度超过已分配缓冲区大小的数据包时会试图重新分配一块大的内存,这时记录当前缓冲区大小的变量值会相应增加,新长度值会被检查是否符合要求,如果检查失败会调用fatal()来清理并退出,在某些情况下,执行清理工作的代码可能会按新缓冲区长度的大小去释放那个实际并没有扩大的缓冲区,结果导致缓冲区外的数据被重写为NULL值。这样可能造成拒绝服务攻击或执行任意指令。

解决方法:
==========
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

  * 在边界或者主机防火墙上过滤不可信任IP对SSH服务的访问请求,通常是22/TCP端口。

  * 使用权限分隔来使影响最小化

   运行OpenSSH 3.2或更高版本的系统管理员可以通过在sshd配置文件中使用
   "UsePrivilegeSeparation"配置选项来降低这个漏洞的影响。一般来讲,可以通过
   创建privsep用户,设置受限制的(chroot)环境,然后向/etc/ssh/sshd_config中
   添加以下命令行来实现上述操作:

     UsePrivilegeSeparation yes

   这个临时解决方案不能防止攻击者利用这个漏洞,但由于权限分隔机制,攻击者会被局限在仅有受限权限的受限制的chroot环境中。这个临时解决方案不能防止漏洞导致拒绝服务。不是所有的操作系统厂商都执行了权限分隔代码,在某些操作系统中代码还可能限制OpenSSH的功能。

厂商状态:
==========
OpenSSH
目前厂商已经在3.7及以后版本的软件中修补了此漏洞,请到厂商的主页下载ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
其他系统厂商的安全补丁请在"参考链接"中查询。

附加信息:
==========
参考链接:

http://www.nsfocus.com/index.php?act=sec_bug&do=view&bug_id=5405
http://www.openssh.com/txt/buffer.adv
http://www.cert.org/advisories/CA-2003-24.html
http://www.linux-mandrake.com/en/security/2003/2003-090.php
http://www.debian.org/security/2002/dsa-382
http://www.redhat.com/support/errata/RHSA-2003-279.html
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-03:12.openssh.asc

 wallace888 回复于:2004-04-02 00:00:54
发布日期:2003-09-17  我没有看错吧?

 platinum 回复于:2004-04-02 00:02:13
是啊,很早的漏洞了,不升级不行啊,AS3的OPENSSH也是有漏洞的

 好好先生 回复于:2004-04-02 08:10:55
偶装的是3.7的。

 platinum 回复于:2004-04-02 08:44:37
这个帖子前面“保留”是什么意思?

 不想发言 回复于:2004-04-02 09:21:28
[quote:4637424e95="platinum"]这个帖子前面“保留”是什么意思?[/quote:4637424e95]
 :roll: 可能是版主觉得它离精华还差那么一点儿距离,但是还有一定的意义吧。

 allan0909 回复于:2004-04-02 09:32:25
别人利用这个漏洞的时候机器会不会有报警信息?

 llzqq 回复于:2004-04-02 09:42:37
如果AS 3也有此漏洞,怎么在AS 3的UPDATE中此升级包呢?

 好好先生 回复于:2004-04-02 10:01:56
[quote:565e690a2c="llzqq"]如果AS 3也有此漏洞,怎么在AS 3的UPDATE中此升级包呢?[/quote:565e690a2c]
不见得非要在update中升级,偶是用tar包升级的。

 llzqq 回复于:2004-04-02 11:47:24
偶安装openssh-3.8p1.tar.gz失败,提示找不到execvp

 text2002 回复于:2004-04-02 12:48:59
[root@OUTERNET root]# rpm -q openssh
openssh-3.6.1p2-18
[root@OUTERNET root]# uname -a
Linux OUTERNET 2.4.21-4.ELsmp #1 SMP Fri Oct 3 17:52:56 EDT 2003 i686 i686 i386 GNU/Linux
[root@OUTERNET root]#


要升级了。

 platinum 回复于:2004-04-02 13:30:58
偶的已经升级完毕:)

[quote:383941fb87]
别人利用这个漏洞的时候机器会不会有报警信息?
[/quote:383941fb87]
如果能报警,还叫漏洞吗?
如果能预知有危险,为什么不防范而要告警啊?

 badseed 回复于:2004-04-02 14:08:29
直接使用
./configure
make
make install
这些命令就可以安装好,并且替换redhat 7 -9  和 redhat as 2.1-3 系统原来安装的openssh 么

 platinum 回复于:2004-04-02 14:11:53
./configure --prefix=/usr --with-pam --with-md5-passwords
make
make install
killall -9 sshd
/etc/rc.d/init.d/ssh start

 badseed 回复于:2004-04-02 14:51:45
killall -9 sshd 
我本来就是通过ssh联上去得,这样杀掉sshd,以后怎么办阿
能不能先copy,然后再 service sshd restart

 Raad 回复于:2004-04-02 14:53:48
据我所知目前还没有利用此漏洞的详细介绍,3.7pl2的就没有漏洞了吧..

 badseed 回复于:2004-04-02 15:25:08
还有个问题,就是要用什么权限去安装

 platinum 回复于:2004-04-02 15:25:53
呵呵,当然是root了,而且是在机器前面装,不是远程

 双眼皮的猪 回复于:2004-04-02 15:35:58
[quote:280b8bef13="badseed"]killall -9 sshd 
我本来就是通过ssh联上去得,这样杀掉sshd,以后怎么办阿
能不能先copy,然后再 service sshd restart[/quote:280b8bef13]

先在本机上做好测试,把history存成一个脚本文件.

一  写个脚本,用cron运行,用来假如有故障的时候恢复修改状态前的ssh
二  关闭现在的ssh,使用上面的history脚本,用cron定时运行,用来更新ssh,

注意,一脚本必须在二脚本后运行哦:)
如果二脚本测试升级成功登陆上去以后就可以删除一脚本的运行

 platinum 回复于:2004-04-02 15:41:58
[quote:28340b2dc7="badseed"]killall -9 sshd 
我本来就是通过ssh联上去得,这样杀掉sshd,以后怎么办阿
能不能先copy,然后再 service sshd restart[/quote:28340b2dc7]

可以临时打开te.net几十秒(如果你录入速度够快)

 badseed 回复于:2004-04-02 15:50:29
我用以下命令安装
./configure --prefix=/usr --with-pam --with-md5-passwords 
make 
make install 
重新启动机器后,ssh -v 和 sshd -v 都显示为OpenSSH_3.8p1
是不是这样就算升级成功了

 platinum 回复于:2004-04-02 15:51:48
恩,也可以用扫描工具扫一下看看SSH的版本

 badseed 回复于:2004-04-02 16:00:41
呵呵,用x-scan3.1 扫描过了,显示的是 SSH-2.0-OpenSSH_3.8p1

 platinum 回复于:2004-04-02 16:02:00
你的SSH怎么是2.0,我的怎么是
SSH-1.9-OpenSSH_3.8p1

 badseed 回复于:2004-04-02 16:03:16
这样安装的
./configure --prefix=/usr --with-pam --with-md5-passwords  --sysconfdir=/etc/ssh
make 
make install

 platinum 回复于:2004-04-02 16:04:48
俺回去再试试

 好好先生 回复于:2004-04-02 16:13:06
修改它的版本号。

 badseed 回复于:2004-04-02 16:19:29
[quote:5c419741a7="platinum"]你的SSH怎么是2.0,我的怎么是
SSH-1.9-OpenSSH_3.8p1[/quote:5c419741a7]
我是在 redhat 9 下升级的

 platinum 回复于:2004-04-02 16:57:34
你还记得升级前是什么吗?
AS3是1.9,升级后还是1.9
另外,好好,你说改他提示的版本号,具体怎么改?sshd_config吗?不会……

 badseed 回复于:2004-04-02 18:39:19
[quote:0c5972f8fc="platinum"]你还记得升级前是什么吗?
AS3是1.9,升级后还是1.9
另外,好好,你说改他提示的版本号,具体怎么改?sshd_config吗?不会……[/quote:0c5972f8fc]
升级之前是 SSH-2.0-OpenSSH_3.5p1

 platinum 回复于:2004-04-02 18:50:26
[quote:abf52459cf="badseed"]这样安装的
./configure --prefix=/usr --with-pam --with-md5-passwords  --sysconfdir=/etc/ssh
make 
make install[/quote:abf52459cf]

最后有几行提示
/etc/ssh/ssh_config already exists, install will not overwrite
/etc/ssh/sshd_config already exists, install will not overwrite
/etc/ssh/moduli already exists, install will not overwrite
/etc/ssh/ssh_host_key already exists, skipping.
/etc/ssh/ssh_host_dsa_key already exists, skipping.
/etc/ssh/ssh_host_rsa_key already exists, skipping.
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
[root@server openssh-3.8p1]#

要不要紧?用不用手动弄过去?

 platinum 回复于:2004-04-02 19:09:47
手动cp过去了,重启服务了,还是SSH-1.99-OpenSSH_3.8p1,为什么呀?

 好好先生 回复于:2004-04-02 19:11:50
传完了。

 badseed 回复于:2004-04-02 20:48:50
以下是我的经验(苦,就是因为升级openssh ,现在在数据中心机房还有台Redhat7.3服务器还等着我去执行3,4两步操作,幸好上面还没有部署任何服务,不幸中的万幸 :) )

在 redhat 7.3 及其以下版本上将openssh升级到3.8p1时,首先要进行以下操作

1.升级 zlib 到 zlib-1.1.4-8.7x

2.升级 zlib-devel 到 zlib-devel。
下载这两个包后,运行 rpm -Uvh zlib* ,升级包可以到rpmfind.org上面查找,下载地址是ftp://195.220.108.108/linux/redhat/updates/7.3/en/os/i386/zlib-1.1.4-8.7x.i386.rpmftp://195.220.108.108/linux/redhat/updates/7.3/en/os/i386/zlib-devel-1.1.4-8.7x.i386.rpm,如果没有,留下Email,我可以发给你

3.在/etc/passwd 里面增加一行 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

4.在/etc/shadow 里面增加一行 sshd:!!:12506:0:99999:7:::

最后升级openssh
./configure --prefix=/usr --with-pam --with-md5-passwords --sysconfdir=/etc/ssh 
make 
make install

如果没有执行1,2两步操作,在 ./configure 时将会出错
如果没有执行3,4两步操作,在 make install 时将出现
    Privilege separation user sshd does not exist 
    make: [check-config] Error 255 (ignored)
错误。
此时你的sshd已经是升级成功了,但是无法启动。当你重新启动sshd时(比如重起服务器),出现
[root@root openssh-3.8p1]# service sshd restart 
Stopping sshd:                                             [  OK  ]
Starting sshd:Privilege separation user sshd does not exist                                                           [FAILED]
错误,如果你是使用ssh远程进行操作的,这意味着你将不得不跑到服务器面前去进行3,4两步操作。
当然你也可以在升级openssh之后进行3,4两步操作,但在操作完成之前不要重起sshd服务。

 platinum 回复于:2004-04-03 06:17:39
为什么一定建立一个sshd的用户

 badseed 回复于:2004-04-03 17:34:58
[quote:b177b14af7="platinum"]为什么一定建立一个sshd的用户[/quote:b177b14af7]
openssh支持Privilege Separation,将运行中的openssh分成两部分,一部分有特权,另一部分没有特权,所有的这一切都是出于安全的考虑。而没有特权的部分是使用sshd用户运行的,所以需要加入sshd用户。在Openssh 3.8中,这是一个默认打开的选项,不须要在sshd_config中写明。而在Redhat7.3中的openssh还不支持这种功能,所以默认安装的redhat7.3是不存在这个用户。升级时需要加入sshd用户,否则启动openssh会失败。
你也可以升级后在sshd_config文件中加入
UsePrivilegeSeparation no
取消Privilege Separation功能。这样就不需要加入sshd用户了,不过出于安全的考虑并不推荐这种做法。

 nozxb 回复于:2004-04-23 17:01:57
谢谢了,我看到有几个包SERVER CLNTE什么,还是几个包
全装吗?
谢了

 nozxb 回复于:2004-04-23 17:27:32
顶下~~让更多人看到

原文转自:http://www.ltesting.net