V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
interdev
V2EX  ›  Linux

最简单修复致命 bash 漏洞(shellshock)的方法

  •  
  •   interdev · 2014-09-27 13:45:42 +08:00 · 5561 次点击
    这是一个创建于 3718 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为只影响bash,不影响dash,tsh,csh,ksh

    所以需要临时紧急修复,用以下两行命令即可,在Ubuntu下实测有效,

    mv /bin/bash /bin/bash.stop
    ln -s /bin/dash /bin/bash

    等正式稳定的补丁出来后,Ubuntu再用以下命令还原bash

    apt-get update
    apt-get install --only-upgrade bash
    16 条回复    2014-09-29 14:01:55 +08:00
    Tink
        1
    Tink  
       2014-09-27 14:09:33 +08:00 via iPhone
    这方法治标不治本
    msg7086
        2
    msg7086  
       2014-09-27 14:13:29 +08:00
    dash没法运行需要bash的程序。我之前试过ln -sf dash bash,结果连apt都挂了。

    老老实实 chmod o-x bash 更方便。


    @Tink 有时候是没办法,比如这次,补丁迟迟不出,而且就算stable出了,等unstable版跟进还要时间,这时候直接禁用bash才是治本的方法。倒不如说现在的半吊子补丁才是治标不治本。
    SoloCompany
        3
    SoloCompany  
       2014-09-27 14:41:09 +08:00
    @msg7086 新的补丁昨天就出来了吧,是你自己没留意吧
    ctexlive
        4
    ctexlive  
       2014-09-27 15:51:36 +08:00
    补丁迟迟没出吗? debian等都出了
    canky
        5
    canky  
       2014-09-27 17:01:36 +08:00 via Android
    debian怎么修啊?我是小白来的
    uuair
        6
    uuair  
       2014-09-27 17:23:54 +08:00
    升级bash就可以了吧?我在centos跟mac上,升级了bash,然后那个测试代码就失效了。
    ivenvd
        7
    ivenvd  
       2014-09-27 17:43:51 +08:00
    这个,典型的误人子弟啊。照着这么操作,大部分服务器都会瘫痪掉吧……
    msg7086
        8
    msg7086  
       2014-09-27 18:19:11 +08:00
    @SoloCompany testing分支上的最新版测了

    env -i X='() { (a)=>\' bash -c 'echo curl -Is google.com'; head echo

    照样会执行。
    msg7086
        9
    msg7086  
       2014-09-27 18:21:27 +08:00
    @ivenvd 是的。
    至少应该:
    1. 把主shell换成zsh,用sed替换掉/etc/passwd里所有的bash
    2. 把sh链接到dash
    3. 到这步了才能禁用bash

    而且为了apt脚本能跑,bash还是要留着的,折衷的办法就是chmod o-x,至少root还能用。
    librehat
        10
    librehat  
       2014-09-27 19:30:11 +08:00 via Android
    Fedora已经推送更新了。

    楼主这个办法太。。。。什么都做不了
    interdev
        11
    interdev  
    OP
       2014-09-27 21:19:33 +08:00
    @ivenvd Ubuntu 下无影响,重启之后服务器正常,其他系统未测试。

    dash 可以代替bash大多数功能,临时用用是可以的。
    ivenvd
        12
    ivenvd  
       2014-09-29 01:59:36 +08:00
    @interdev 脚本语法是不兼容的。Bash 不是简单作为交互式 Shell 存在的,大量脚本使用了 #!/bin/bash,你用 dash 去运行不天下大乱才怪。
    huangzxx
        13
    huangzxx  
       2014-09-29 09:29:16 +08:00
    这个帖子也太。。。。。误导了吧
    interdev
        14
    interdev  
    OP
       2014-09-29 11:41:27 +08:00
    @ivenvd Ubuntu缺省的/bin/sh就是dash ,其他系统我没有测试,说了只是正式完整补丁没出来时临时用用,补丁稳定了还是要回到bash的,目前我自己好几台ubuntu vps都是这样设防的。

    dash 能兼容 bash 大多数脚本。
    kaneg
        15
    kaneg  
       2014-09-29 13:53:19 +08:00
    看到这个漏洞好几天了,但有个问题一直不明白:
    尽管这个漏洞很严重,但如果别人不知道我的ssh账号,apache也没有启用过CGI(ubuntu默认是不启用的吧),那有被攻击的可能吗?
    interdev
        16
    interdev  
    OP
       2014-09-29 14:01:55 +08:00
    @kaneg 一般无影响,但bash做为linux root用户缺省shell,会有很多暂时未发现或未公开的利用方式,最好还是升到最新补丁较好。



    分析:
    ======
    GNU Bash 4.3及之前版本在处理某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行shell命令。某些服务和应用允许未经身份验证的远程攻击者提供环境变量以利用此漏洞。此漏洞源于在调用bash shell之前可以用构造的值创建环境变量。这些变量可以包含代码,在shell被调用后会被立即执行。

    此漏洞可能会影响到使用ForceCommand功能的OpenSSH sshd、使用mod_cgi或mod_cgid的Apache服务器、DHCP客户端、其他使用bash作为解释器的应用等。

    目前认为使用mod_php/mod_python/mod_perl的Apache httpd不受此问题影响。

    http://www.nsfocus.net/index.php?act=alert&do=view&aid=150
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2786 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:33 · PVG 19:33 · LAX 03:33 · JFK 06:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.