HCRM博客

CentOS 6 CVE-2016-5195内核提权漏洞修复指南

CentOS 6内核提权漏洞CVE-2016-5195修复步骤

机器跑着CentOS 6,补丁日一推再推,直到有人用脏牛拿到root,才发现这洞真不能拖。下面把踩坑过程压成一张清单,照着敲,基本一遍过。

CentOS 6 CVE-2016-5195内核提权漏洞修复指南-图1

一、先确认是不是真中招

登录普通账号,随手敲:

rpm -qa --changelog kernel | grep -i dirty

没回显就说明官方补丁没打;再跑uname -r,版本号若低于2.6.32-642.6.2,基本坐实。别信“内网没事”,我亲眼看测试机被同事脚本秒提权,内网一样翻车。

二、备份,别偷懒

1 给当前内核做完整备份:cp /boot/vmlinuz-$(uname -r) /boot/vmlinuz-$(uname -r).bak

CentOS 6 CVE-2016-5195内核提权漏洞修复指南-图2

2 把/boot/grub/grub.conf拷一份到/root,万一新内核起不来,还能回滚。

3 有自定义模块的,顺手find /lib/modules/$(uname -r) -name '*.ko' | tar czf ko.tar.gz -T -,省得重编驱动找不着北。

三、挑一条最稳的升级路线

CentOS 6官方源已停更,但Vault仓库还在。写个临时repo文件:

cat > /etc/yum.repos.d/centos-vault.repo << 'EOF'

[vault-base]

CentOS 6 CVE-2016-5195内核提权漏洞修复指南-图3

name=CentOS-6.10 - Base

baseurl=http://vault.centos.org/6.10/os/x86_64/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

enabled=1

EOF

接着yum clean all && yum --enablerepo=vault-base update kernel,系统会拉到2.6.32-754.35.1.el6,DirtyCow补丁已合入。不想换源,也可以手动下rpm,但依赖容易打架,Vault最省心。

四、编译内核的硬核玩法

机器跑老旧驱动,官方rpm一装就黑屏?只能自己编。步骤压成六行:

1 yum groupinstall "Development Tools"

2 yum install ncurses-devel hmaccalc zlib-devel binutils-devel elfutils-libelf-devel

3 去kernel.org下对应2.6.32最新tarball,解压后把旧内核config拷过来:cp /boot/config-$(uname -r) .config

4 make oldconfig一路回车,再make menuconfig把本地驱动勾全。

5 make -j$(nproc) && make modules_install

6 make install,grub会自动写条目,重启选新内核进系统。

编完记得grep -i dirty /usr/src/linux/Documentation/看补丁说明,确认commit已合并。

五、重启后三件事

1 新内核启动成功,先跑rpm -q kernel,列表里出现新条目才算数。

2 用dmesg | grep -i dirty,出现“CVE-2016-5195 mitigation”字样,补丁生效。

3 把旧内核保留一份,别急着删,跑一周业务无异常再package-cleanup --oldkernels --count=1清掉。

六、临时缓解方案

机器死活不能重启?用SystemTap堵洞:

stap -g -e 'probe kernel.function("mem_write").call { if (uid() != 0) raise(9); }'

这条脚本让非root进程一旦触发写即被kill,能挡一时,但性能掉一成,只能当救急。

七、容器场景别忽视

Docker宿主机内核被洞穿,容器里再加固也白搭。升级完宿主机,顺手把docker run --security-opt=no-new-privileges写进启动参数,再配--cap-drop=ALL,双保险。

八、常见翻车点

1 只升级kernel-tools,没动kernel,重启还是老版本。

2 手抖把grub.conf里default=1写成0,新内核没默认启动。

3 用了第三方驱动却忘了重编,结果新内核起不来,ssh直接失联。

提前在本地虚拟机走一遍流程,把坑踩完再上生产,能省半夜打车去机房。

九、验证脚本放一份

把下面内容存成check_cow.sh,root跑完心里踏实:

#!/bin/bash

gcc -o cowtest cowtest.c 2>/dev/null

if ./cow_test; then

echo "still vulnerable"

else

echo "patched"

fi

cow_test.c网上一搜就有,不到五十行,跑完输出patched就能睡安稳。

CentOS 6老归老,业务还在就得管。DirtyCow补丁打上去,root密码再被猜,也拿不到系统权限。把上面步骤做成脚本,下次换内核三分钟收工,比救火轻松得多。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/41681.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~