全部产品
云市场
云游戏

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

更新时间:2018-02-22 11:17:45

漏洞编号

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)。

    1. # lsinitrd /boot/initramfs-2.6.32-642.6.2.el6.x86_64.img |grep -i -E 'xen-blkfront|virtio_blk'
    2. -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
    3. -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安装驱动,然后重新执行步骤3,并重启。

    • centos 5:
    1. #mkinitrd -f --allow-missing \
    2. --with=xen-vbd --preload=xen-vbd \
    3. --with=xen-platform-pci --preload=xen-platform-pci \
    4. --with=virtio_blk --preload=virtio_blk \
    5. --with=virtio_pci --preload=virtio_pci \
    6. --with=virtio_console --preload=virtio_console \
    7. --with=hvc_console --preload=hvc_console \
    8. $target_initrd $vmlinuz

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

    • centos 6/7 :
    1. #mkinitrd -f --allow-missing \
    2. --with=xen-blkfront --preload=xen-blkfront \
    3. --with=virtio_blk --preload=virtio_blk \
    4. --with=virtio_pci --preload=virtio_pci \
    5. --with=virtio_console --preload=virtio_console \
    6. $target_initrd $vmlinuz

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

    1. #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. 执行步骤3后,查看是否有驱动,然后重启系统。

    1. # lsinitrd /boot/initramfs-2.6.32-642.6.2.el6.x86_64.img |grep -i -E 'xen-blkfront|virtio_blk'
    2. -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
    3. -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',也可以使用云盾安骑士验证。

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

  1. # uname -a
  2. 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

或者

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

Ubuntu 系列操作系统

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

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

  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',也可以使用云盾安骑士验证。

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

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

或者

  1. # zcat /usr/share/doc/linux-image-3.13.0-101-generic/changelog.Debian.gz | grep -i 'CVE-2016-5195'
  2. * CVE-2016-5195

Debian 系列操作系统

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

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

  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',也可以使用云盾安骑士验证。

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

  1. # uname -a
  2. 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

或者

  1. # zcat /usr/share/doc/linux-image-3.16.0-4-amd64/changelog.Debian.gz |grep -i 'CVE-2016-5195'
  2. (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

  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'

    1. Arguments: --logfile --force --force-drivers 'xen-vbd xen-vnif xen-platform-pci.ko virtio virtio_console virtio_net virtio_blk virtio_pci'
    2. -rw-r--r-- 1 root root 55335 Sep 23 15:55 lib/modules/3.12.62-60.62-default/updates/blkfront/xen-vbd.ko
    3. -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
    4. 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 安装驱动,然后重新执行步骤3并重启。

    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',也可以使用云盾安骑士验证。

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

  1. # uname -a
  2. 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

或者

  1. # rpm -q --changelog kernel-default | grep 'CVE-2016-5195'
  2. - patches.fixes/mm-remove-gup_flags-FOLL_WRITE-games-from-__get_user_pages.patch: (bnc1004418, CVE-2016-5195).

Open SUSE 系列操作系统

  1. 更新列表:zypper refresh

  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'

    样例:

    1. # lsinitrd /boot/initrd-3.12.62-55-default | grep -i -E 'xen-vbd|virtio_blk'
    2. lib/modules/3.12.62-55-default/kernel/drivers/block/virtio_blk.ko
    3. 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',也可以使用云盾安骑士验证。

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

  1. # uname -a
  2. 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

或者

  1. # rpm -q --changelog kernel-default | grep 'CVE-2016-5195'
  2. - patches.fixes/mm-remove-gup_flags-FOLL_WRITE-games-from-__get_user_pages.patch: (bnc1004418, CVE-2016-5195).

CoreOS 系列操作系统

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

重要提示

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

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

情报来源: