【漏洞公告】CVE-2016-5195:“脏牛(Dirty Cow)”漏洞-Linux 内核本地提权漏洞 通告及修复

漏洞编号

CVE-2016-5195

漏洞名称

脏牛(Dirty COW)

官方定级

高危

漏洞危害

黑客通过远程入侵获取低权限用户后,利用该漏洞在全版本Linux系统服务器上实现本地提权,从而获取到服务器root权限。

漏洞利用条件

黑客通过远程入侵获取低权限用户后,才能进一步在操作系统本地利用该漏洞。

漏洞影响范围

  • Linux Kernel版本不低于2.6.22 的所有 Linux 系统

    从 2007 年发布 2.6.22 版本开始,直到2016年10月18日为止,这中间发行的所有 Linux 系统都受影响。

    我们建议您使用以下方式自查是否存在此漏洞:

    使用uname –a查看 Linux 系统的内核版本,如:

    Linux AYxxxx 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

    上述内核版本2.6.32-431.23.3.el6.x86_64受漏洞影响。

    Linux AYxxxx 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

    上述内核版本2.6.18-308.el5不受漏洞影响。

  • 阿里云安全团队在第一时间针对 ECS 提供的 Linux 操作系统镜像进行测试,详细的受影响范围见下表。

    CentOS

    5.8

    X64

    已发布

    阿里云默认配置可更新

    CentOS

    5.1

    i386/x64

    已发布

    阿里云默认配置可更新

    CentOS

    6.5

    i386/x64

    已发布

    阿里云默认配置可更新

    CentOS

    7

    X64

    已发布

    阿里云默认配置可更新

    CentOS

    7.2

    X64

    已发布

    阿里云默认配置可更新

    Ubuntu

    12.04

    i386/x64

    已发布

    阿里云默认配置可更新

    Ubuntu

    14.04

    i386/x64

    已发布

    阿里云默认配置可更新

    Debain

    6.0.9

    i386/x64

    已停止维护,建议升级系统

    Debain

    7.5.0

    i386/x64

    已发布

    阿里云默认配置可更新

    Debain

    8.0.4

    X64

    已发布

    阿里云默认配置可更新

    Aliyun Linux

    15.1

    i386/x64

    未发布

    -

    SUSE Linux Enterprise Server

    11 SP1

    X64

    已发布

    仅限购买SLES企业服务用户

    SUSE Linux Enterprise Server

    11 SP2

    X64

    已发布

    仅限购买SLES企业服务用户

    SUSE Linux Enterprise Server

    11 SP3

    X64

    已发布

    仅限购买SLES企业服务用户

    SUSE Linux Enterprise Server

    12 SP1

    X64

    已发布

    仅限购买SLES企业服务用户

    Open SUSE

    13.1

    i386/x64

    已发布

    阿里云默认配置可更新

    CoreOS

    681.2.0

    X64

    已发布

    阿里云默认配置可更新,但更新速度较慢

    FreeBSD

    10.1

    X64

    已发布

    Free BSD 系统UNIX,非Linux内核

    漏洞修复方案

    注意事项

    • 因为涉及到操作系统内核的升级,我们建议您正确关闭正在运行的服务,并做好业务数据备份工作。同时创建服务器磁盘快照,避免修复失败造成不可逆的影响。

    • 如果您的服务器安装了第三方的防护软件(例如云锁、安全狗),则有可能导致内核升级不成功,建议您先卸载这些软件,等到升级内核成功后再重新安装启用。

    CentOS 5/6/7 系列操作系统

    阿里云已经更新了CentOS 5/6/7 Aliyun mirror源,使用默认配置,就可以更新软件列表,随后一键升级内核。操作步骤如下:

    1. 检查是否有内核升级包:yum check-update |grep kernel

    2. 升级内核:yum update kernel

    3. 确认新版本的内核或 initrd/initramfs 是否有xen-vbd和virtio_blk驱动:lsinitrd /boot/initramfs-2.6.32-642.6.2.el6.x86_64.img |grep -i -E 'xen-blkfront|virtio_blk'

      查看补丁样例:

      #lsinitrd /boot/initramfs-2.6.32-642.6.2.el6.x86_64.img |grep -i -E 'xen-blkfront|virtio_blk'

      具体视版本而定,可以到cd /boot/ 目录下面查看对应的initrd文件(Centos5.1)或initramfs文件(centos6/7)。

      # lsinitrd /boot/initramfs-2.6.32-642.6.2.el6.x86_64.img |grep  -i -E 'xen-blkfront|virtio_blk'
      -rwxr--r--   1 root     root        23448 Nov  4 14:51 lib/modules/2.6.32-642.6.2.el6.x86_64/kernel/drivers/block/virtio_blk.ko
      -rwxr--r--   1 root     root        54888 Nov  4 14:51 lib/modules/2.6.32-642.6.2.el6.x86_64/kernel/drivers/block/xen-blkfront.ko
      
    4. 如果有,则重启。

    5. 如果没有,则需要给initrd/initramfs安装驱动,然后重新执行步骤c,并重启。

      • centos 5:

      #mkinitrd -f --allow-missing \
      --with=xen-vbd  --preload=xen-vbd \
      --with=xen-platform-pci --preload=xen-platform-pci \
      --with=virtio_blk --preload=virtio_blk \
      --with=virtio_pci --preload=virtio_pci \
      --with=virtio_console --preload=virtio_console \
      --with=hvc_console --preload=hvc_console \
      $target_initrd $vmlinuz
      

      具体视版本而定,可以到cd /boot/目录下面查看,替换$target_initrd $vmlinuz

      • centos 6/7 :

        #mkinitrd -f --allow-missing \
        --with=xen-blkfront --preload=xen-blkfront \
        --with=virtio_blk --preload=virtio_blk \
        --with=virtio_pci --preload=virtio_pci \
        --with=virtio_console --preload=virtio_console \
        $target_initrd $vmlinuz
        

        安装驱动样例(以Centos6.8 64bit为准):

        #mkinitrd -f --allow-missing --with=xen-blkfront --preload=xen-blkfront --with=virtio_blk --preload=virtio_blk --with=virtio_pci --preload=virtio_pci --with=virtio_console --preload=virtio_console initramfs-2.6.32-642.6.2.el6.x86_64.img 2.6.32-642.6.2.el6.x86_64
        
        

      具体视版本而定,可以到cd /boot/目录下面查看,替换$target_initrd $vmlinuz

    6. 执行步骤c后,查看是否有驱动,然后重启系统。

      # lsinitrd /boot/initramfs-2.6.32-642.6.2.el6.x86_64.img |grep -i -E 'xen-blkfront|virtio_blk'
      -rwxr--r--   1 root     root        23448 Nov  4 16:21 lib/modules/2.6.32-642.6.2.el6.x86_64/kernel/drivers/block/virtio_blk.ko
      -rwxr--r--   1 root     root        54888 Nov  4 16:21 lib/modules/2.6.32-642.6.2.el6.x86_64/kernel/drivers/block/xen-blkfront.ko
      
    7. 查看升级后的内核版本:uname -a或者rpm -q --changelog kernel | grep 'CVE-2016-5195',也可以使用云盾安骑士验证。

    注意:更新完毕后可能会安装两个内核,但不影响系统运行。

    # uname -a
    Linux iZ2ze1zpafrqftmdfh0b3cZ 2.6.32-642.6.2.el6.x86_64 #1 SMP Wed Oct 26 06:52:09 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
    

    或者

    #rpm -q --changelog kernel | grep 'CVE-2016-5195'
    - [mm] close FOLL MAP_PRIVATE race (Larry Woodman) [1385116 1385117] {CVE-2016-5195}
    

    Ubuntu 系列操作系统

    阿里云已经更新了Ubuntu mirror源,可以直接在默认配置下更新软件列表,随后一键升级内核。操作流程如下:

    1. 查看是否有更新包:dpkg -l | grep linux

      注意:更新完毕后可能会安装两个内核,但不影响系统运行。

      # uname -a
      Linux iZ2ze1zpaXXXXb3cZ 2.6.32-642.6.2.el6.x86_64 #1 SMP Wed Oct 26 
      

      或者

      # zcat /usr/share/doc/linux-image-3.13.0-101-generic/changelog.Debian.gz | grep -i 'CVE-2016-5195'
        * CVE-2016-5195
      
    2. 更新包列表:apt-get updateor apt update

    3. 升级内核:

      • Ubuntu12.04版本:apt-get install linux-generic

      • Ubuntu14.04版本:apt-get upgradeapt upgrade

    4. 重启系统。

    5. 查看升级后的内核版本:uname -a或者zcat /usr/share/doc/linux-image-3.13.0-101-generic/changelog.Debian.gz | grep -i 'CVE-2016-5195',也可以使用云盾安骑士验证。

    Debian 系列操作系统

    阿里云已经更新了Debian mirror源,可以直接在默认配置下更新软件列表,随后一键升级内核。操作流程如下:

    1. 查看是否有更新包:dpkg -l | grep linux

      注意:更新完毕后可能会安装两个内核,但不影响系统运行。

      # uname -a
      Linux iZ2ze1zpaXXXXb3cZ 2.6.32-642.6.2.el6.x86_64 #1 SMP Wed Oct 26 06:52:09 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

      或者

      # zcat /usr/share/doc/linux-image-3.16.0-4-amd64/changelog.Debian.gz |grep -i 'CVE-2016-5195'
          (CVE-2016-5195)
    2. 更新包列表:apt-get update

    3. 升级内核:apt-get upgrade

    4. 重启系统。

    5. 查看升级后的内核版本:uname -a或者zcat /usr/share/doc/linux-image-3.16.0-4-amd64/changelog.Debian.gz | grep -i 'CVE-2016-5195',也可以使用云盾安骑士验证。

    SUSE Linux Enterprise Server 系列操作系统(仅限购买SLES企业服务用户)

    1. 使用http://mirrors.aliyuncs.com/SLES/SLES12-SP1-Updates/sle-12-x86_64/源进行更新。

      您可以编辑vim /etc/zypp/repos.d/SLES12-SP1-Updates.repo关闭其他更新源,即修改http://mirrors.aliyun.com/SLES/SLES12-SP1-Updates/sle-12-x86_64/ enabled=0,然后更新列表zypper refresh

      注意:更新完毕后可能会安装两个内核,但不影响系统运行。

      # uname -a
      Linux iZwz9cl4i8oy1pmjw7g4rxZ 3.12.62-60.64.8-default #1 SMP Tue Oct 18 12:21:38 UTC 2016 (42e0a66) x86_64 x86_64 x86_64 GNU/Linux

      或者

      # rpm -q --changelog kernel-default | grep 'CVE-2016-5195'
      - patches.fixes/mm-remove-gup_flags-FOLL_WRITE-games-from-__get_user_pages
    2. 安装最新内核:zypper install kernel-default xen-kmp-default

    3. 确认下新版本的内核或 initrd / initramfs 是否有xen-vbd和virtio_blk驱动:

      lsinitrd /boot/initrd-3.12.62-60.64.8-default | grep -i -E 'xen-vbd|virtio_blk'

      查看补丁样例:

      lsinitrd /boot/initrd-3.12.62-60.64.8-default | grep -i -E 'xen-vbd|virtio_blk'

      Arguments: --logfile --force --force-drivers 'xen-vbd xen-vnif xen-platform-pci.ko virtio virtio_console virtio_net virtio_blk virtio_pci'
      -rw-r--r--   1 root     root        55335 Sep 23 15:55 lib/modules/3.12.62-60.62-default/updates/blkfront/xen-vbd.ko
      -rw-r--r--   1 root     root        31591 Oct 19 04:40 lib/modules/3.12.62-60.64.8-default/kernel/drivers/block/virtio_blk.ko
      lrwxrwxrwx   1 root     root           61 Nov  7 14:17 lib/modules/3.12.62-60.64.8-default/weak-updates/updates/blkfront/xen-vbd.ko -> ../../../../3.12.62-60.62-default/updates/blkfront/xen-vbd.ko
      
    4. 如果有,则重启。

    5. 如果没有,则需要给 initrd / initramfs 安装驱动,然后重新执行步骤c并重启。

      mkinitrd -k /boot/vmlinuz-3.12.62-60.64.8-default -i /boot/initrd-3.12.62-60.64.8-default(具体版本根据实际安装为准)

    6. 查看升级后的内核版本:uname -a或者rpm -q --changelog kernel | grep 'CVE-2016-5195',也可以使用云盾安骑士验证。

    Open SUSE 系列操作系统

    1. 更新列表:zypper refresh

      注意:更新完毕后可能会安装两个内核,但不影响系统运行。

      # uname -a
      Linux iZwz9XXXshamswbvrZ 3.12.62-55-default #1 SMP Thu Oct 20 08:47:11 UTC 2016 (b0aa9a6) x86_64 x86_64 x86_64 GNU/Linux

      或者

      # rpm -q --changelog kernel-default | grep 'CVE-2016-5195'
      - patches.fixes/mm-remove-gup_flags-FOLL_WRITE-games-from-__get_user_pages
    2. 安装最新内核:zypper install kernel-default xen-kmp-default

    3. 确认下新版本的内核或 initrd / initramfs 是否有xen-vbd和virtio_blk驱动。

      lsinitrd /boot/initrd-3.12.62-55-default | grep -i -E 'xen-vbd|virtio_blk'

      样例:

      # lsinitrd  /boot/initrd-3.12.62-55-default | grep -i -E 'xen-vbd|virtio_blk'
      lib/modules/3.12.62-55-default/kernel/drivers/block/virtio_blk.ko
      lib/modules/3.12.62-55-default/updates/blkfront/xen-vbd.ko
    4. 如果有,则重启。

    5. 如果没有,则需要给 initrd / initramfs 安装驱动,然后重新执行步骤3并重启:

      # mkinitrd -k /boot/vmlinuz-3.12.62-55-default -i /boot/initrd-3.12.62-55-default(具体版本根据实际安装为准)

    6. 查看升级后的内核版本:uname -a或者rpm -q --changelog kernel | grep 'CVE-2016-5195',也可以使用云盾安骑士验证。

    CoreOS 系列操作系统

    使用命令update_engine_client -update安装所有可用更新,包括新内核,并重启机器。

重要提示

对于阿里云官方发布的其余系列的操作系统,Linux 官方正在研发漏洞对应的系统补丁,待补丁发布后,将系统更新到最新版本即可修复漏洞。

对于自定义镜像用户可以关注操作系统原厂商更新状态,自己根据自身业务判断升级内核,修复该漏洞。

情报来源

  • http://dirtycow.ninja

  • https://github.com/dirtycow

  • https://access.redhat.com/security/cve/CVE-2016-5195

  • https://security-tracker.debian.org/tracker/CVE-2016-5195

  • http://people.canonical.com/~ubuntu-security/cve/2016/CVE-2016-5195.html

  • https://www.suse.com/security/cve/CVE-2016-5195.html