当前位置:首页 > 热点

漏洞修复失败怎么办

补丁装不上,漏洞系统照常跑,修复这事儿我见得太多了。失败上周帮一个客户处理Exchange服务器的漏洞漏洞,CVE-2023-21529,修复微软早就发了补丁,失败Windows Update里点了八百遍,漏洞进度条走到30%就回滚。修复服务器照常收发邮件,失败管理员也就没当回事。漏洞直到某天早上发现邮件队列堵了几万封,修复日志里全是失败异常登录记录——攻击者从那个没补上的漏洞进来了。

漏洞修复失败,漏洞最忌讳的修复就是"先放一放"。你以为系统还在转就没事,失败但攻击者不这么想。他们扫描器24小时不停,专挑那些该打补丁却没打上的机器。补丁失败不是小概率事件,我粗略估计,在真实运维环境里,至少两成补丁会以各种理由装不上。

先搞清楚它为什么失败

别急着重启。Windows系统里,C:\Windows\Logs\CBS\CBS.log这个文件会告诉你真相。Linux上看/var/log/dpkg.log或者yum.log。我见过最常见的原因:补丁依赖的前置更新没装、系统文件被第三方安全软件锁死、磁盘空间不够——别笑,真有人C盘只剩200MB还硬要装几个G的累积更新。

还有一种情况特别隐蔽:补丁装到一半,杀毒软件把某个临时文件当病毒隔离了。某次我给一台Windows Server 2016打补丁,卡在"正在配置更新"整整四个小时。最后发现是某国产杀软把TiWorker.exe给拦了。把杀软临时禁用,补丁十分钟装完。

手动安装不是丢人的事

Windows Update失败,去微软Update Catalog网站直接下载.msu文件手动装。这招能绕过大部分自动更新框架的毛病。Linux上用包管理器失败,试试直接下载.rpm或.deb用rpm -ivh或dpkg -i装。注意依赖关系,缺什么补什么。

有个坑得提醒:手动装补丁前,先确认系统版本号。Windows 10的1909和21H2,同一个补丁包可能不通用。Linux上uname -r看一眼内核版本,别下错了。

实在装不上,就绕过去

有些补丁失败是系统本身的问题,比如组件存储损坏。Windows上跑DISM /Online /Cleanup-Image /RestoreHealth和sfc /scannow,能修好大部分。Linux上apt --fix-broken install或者yum-complete-transaction试试。

如果补丁就是死活装不上,评估一下这个漏洞的实际风险。比如一个需要物理接触才能利用的漏洞,而你的服务器在锁着的机房里,优先级可以降一降。但如果是远程代码执行漏洞,补丁装不上就得考虑临时缓解措施:关端口、加防火墙规则、上WAF。某次我遇到一个Apache漏洞补丁和业务系统冲突,最后是在Nginx层加了一条规则把攻击流量挡了,撑到周末业务窗口期再彻底解决。

别忽略回滚后的残留

补丁失败后系统回滚,有时候会留下半成品。Windows上表现为某些服务启动不了,Linux上可能是包管理器状态锁死。Windows检查%windir%\WinSxS\Temp目录,Linux上rm /var/lib/dpkg/lock解锁再dpkg --configure -a。

我自己的习惯:每次补丁操作前,虚拟机快照或者系统还原点先做好。生产环境没这条件,至少把关键配置文件备份一份。补丁失败不可怕,可怕的是失败之后系统状态比之前更糟。

最后说句实在的:补丁管理没有银弹。自动化工具能覆盖八成场景,剩下两成得靠人盯着日志、手动干预。别信那些"一键修复所有漏洞"的鬼话,真出了事,还是得你一行一行看日志。

分享到: