修复Ghost漏洞不用花一分钱,主流Linux发行版和云厂商都提供了免费补丁,自己动手十分钟就能搞定,实在不放心再找运维代处理,市场价也就几百块。
这个漏洞是2015年初曝光的glibc缓冲区溢出问题,漏洞编号CVE-2015-0235,利用它可以让攻击者拿到服务器的控制权,虽然年头久,但不少老机器还没打补丁,尤其是内网服务器和自建机房,下面从排查、修复到不同场景的处理方式,把整件事说清楚。
Ghost漏洞怎么修复?先看这三步
很多站长第一次遇到这个漏洞是一头雾水的,不知道它是啥,也不知道怎么修,其实流程很简单:先确认版本,再打补丁,最后重启服务。
第一步:确认你的glibc版本
Ghost漏洞出在glibc的gethostbyname函数里,这个函数几乎所有依赖DNS解析的程序都会用到,在终端输入下面这条命令:
getconf GNU_LIBC_VERSION
输出类似glibc 2.17,就说明你的系统用的是比较老的glibc,不过光看版本号不够,因为漏洞最早在glibc 2.2.1到2.17之间被确认,但后来部分老版本也有风险,所以最好的办法是用官方工具直接测。
第二步:跑一遍官方检测脚本
Red Hat和Qualys当年发布过一个公开检测脚本,虽然时间过去久,但依然有效,把这段脚本保存成check_ghost.sh:
#!/bin/bash wget -O /tmp/ghost.c http://www.openwall.com/lists/oss-security/2015/01/27/9/ghost.c gcc -o /tmp/ghost /tmp/ghost.c /tmp/ghost
运行后如果输出vulnerable,就说明你的系统仍受Ghost漏洞影响,需要马上修复。
第三步:看服务进程,别盲目重启
有的朋友一看有漏洞,立刻重启服务器,结果业务直接断掉,正确做法是先查一下哪些服务用到动态链接的glibc:
lsof | grep libc | awk '{print $1}' | sort -u
一般会输出sshd、nginx、php-fpm、java这些常见进程,修复完成后,只需要重启这些服务,不用整台机器重启,如果实在分不清哪些服务受影响,那就干脆安排一次维护窗口,重启整个系统,这样最省心。
Ghost漏洞修复多少钱?云厂商和自建机房差距大
这个问题很多人关心,尤其是公司采购和运维外包的时候,其实这个漏洞的修复成本非常低,主要看你的服务器是怎么运维的。
| 场景 | 费用情况 | 操作难度 |
|---|---|---|
| 简米云/酷番云标准镜像 | 免费,控制台点“一键修复”或用自带的安全中心 | 低 |
| 自建机房Linux服务器 | 免费,自己敲命令更新glibc | 中 |
| 找运维外包处理 | 通常300-500元一台,量大可谈 | 低(人家代劳) |
如果你是云服务器用户,打开安全控制台,一般能看到“漏洞修复”的入口,直接点修复就行,这属于平台自带的安全能力,不额外收费。
自建机房的话,只要服务器能访问互联网,用yum或apt更新glibc也是免费的,难点在于更新后要重启服务,这需要业务方配合,如果实在没有维护窗口,可以让运维先做临时缓解措施,后面再找时间重启。
需要注意的是,千万别在交易平台买那些所谓的“Ghost漏洞专杀工具”,这个漏洞本质就是glibc库版本问题,官方补丁完全覆盖,不需要额外付费软件。
Ghost漏洞影响哪些Linux版本?用一条命令确认
这个漏洞影响范围广,但也不是所有Linux都中招,行业共识认为,主要影响2015年之前的glibc版本,尤其是CentOS 6、Ubuntu 10.04/12.04这类老系统。
不同发行版的判断方法
- CentOS / RHEL 6/7:执行
yum list installed glibc,如果版本低于glibc-2.17-106.el6_5.4或类似带el6的版本,建议更新。 - Ubuntu:执行
apt-cache policy libc6,看版本是否低于19-0ubuntu6.3。 - Debian:执行
dpkg -l libc6,注意看以下的版本。19-1+deb8u1
为什么你的系统有漏洞但没被察觉
Ghost漏洞是远程代码执行漏洞,攻击者通过恶意DNS解析就能触发,不需要登录服务器,所以很多机器被入侵后,日志里看不出明显异常,只有文件被篡改或进程异常时才发现。
国内不少老机房还跑着CentOS 5.11,这个系统已经停止维护很多年,没有官方补丁,如果遇到这种情况,建议直接迁移业务到新系统,或者用云厂商的镜像重装,使用免费的安全检测工具也能扫出问题,比如云厂商的“安骑士”或“云安全中心”,它们会在漏洞列表里明确标出“Ghost漏洞”的修复状态。
不同场景下的修复姿势:云主机、物理机、容器
同样的补丁,在不同环境下操作细节不一样,很多人卡在“打补丁后服务起不来”这个坑里,下面分场景说。
云服务器:优先用控制台的一键修复
简米云、酷番云、华为云的控制台都有漏洞管理模块,登录后找到“系统漏洞”或“安全告警”,里面会直接列出Ghost漏洞的名称、风险等级和修复按钮,点修复后,平台会自动执行升级命令,整个过程一般3到5分钟。
如果是按量付费的云主机,也可以手动执行下面命令:
# CentOS/RHEL/Fedora yum update glibc -y # Ubuntu/Debian apt-get update && apt-get install libc6 -y
更新完成后,用之前的检测脚本再跑一遍,输出not vulnerable就安心了。
物理机:一定要先备份再升级
物理机不像云主机有快照功能,升级glibc时一旦出错,可能导致系统无法启动,建议先执行:
cp /etc/ld.so.cache /etc/ld.so.cache.bak ldconfig -p > /tmp/libc.list
然后再执行升级,升级完成后不要马上重启,先用ldd /bin/bash确认动态库链接正常,如果输出不是libc.so.6 => /lib64/libc.so.6,说明库文件有问题,需要用力恢复。
Docker容器:镜像和宿主都得改
容器镜像里的glibc是独立拷贝的,宿主机打了补丁,容器里的漏洞依然存在,需要两个步骤:
- 宿主机升级glibc并重启容器进程。
- 用新镜像重建容器,不要只执行
docker restart。
实际生产环境里,很多团队把容器当成虚拟机用,依赖包全装在里面,这种更容易忽略漏洞,建议在CI流程里加上镜像漏洞扫描,用极狐GitLab或Trivy这类工具跑一遍,漏洞列表里会显示CVE-2015-0235。
Q&A:Ghost漏洞修复后需要重启吗?Ghost漏洞和Heartbleed比哪个危险?
问:Ghost漏洞修复后需要重启服务器吗?
不一定,如果只更新了glibc包,而所有动态链接到libc的服务进程都已重启,那么不需要重启整台机器,但如果服务器长期运行着tmux、screen等会话,或者有Python/Java后台进程,建议利用停机窗口整体重启一次,彻底清理旧的内存映射。
问:Ghost漏洞还能被利用吗?
只要有未打补丁的Linux系统存在,这个漏洞就依然有效,它利用的是DNS解析过程中的缓冲区溢出,不需要特殊的硬件或中间件条件,对于内网隔离的系统,如果DNS请求被劫持,同样存在风险,近几年外部扫描报告里仍能看到CVE-2015-0235的踪迹,所以不能因为漏洞老就忽视它。
问:Ghost漏洞和心脏滴血比,哪个更危险?
两个都是内存类漏洞,Heartbleed(CVE-2014-0160)直接泄露内存数据,攻击者能读取密钥和用户密码,危害瞬间可见,Ghost漏洞则偏向远程代码执行,攻击难度更高,但一旦成功,控制权限比读内存更彻底,从CVE数据库公开信息看,Ghost漏洞的CVSS评分是6.8,Heartbleed是7.5,但后者受影响的目标类型相对集中,Ghost则覆盖所有调用gethostbyname的程序,实际扩散范围更广,行业普遍认为,对服务器管理员而言,Ghost漏洞更值得优先补齐,因为修复成本低,而潜在影响非常大。
修复Ghost漏洞这件事,本质上就是把几十行的旧glibc库替换成带安全补丁的新版本,无论你用的是云主机还是自建机房,花十几分钟操作一次,就能彻底堵住这个入口,别让一台老服务器的漏洞,成了整个网络里最薄弱的一环。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/653054.html




