HCRM博客

CentOS 6系统应对心脏出血漏洞,排查与回滚策略

CentOS 6 OpenSSL“心脏出血”漏洞排查与回滚方案

线上机器突然报“SSL handshake failure”,日志里还夹着一堆“TLS: fatal alert 40”。别急着重启,先把咖啡放下,CentOS 6 OpenSSL“心脏出血”漏洞可能正偷偷抽走内存里的私钥。下面这份笔记把排查、止血、回滚三步写成流水线,照着敲命令就能落地,零翻车。

CentOS 6系统应对心脏出血漏洞,排查与回滚策略-图1

一、先确认是不是躺枪

1. 看版本:

openssl version -a

如果输出里出现1.0.1e1.0.1f字样,基本跑不掉;CentOS 6 默认仓库还停留在1.0.1e,心脏出血专属版本号。

2. 快速热检:

python heartbleed_test.py 127.0.0.1 443

CentOS 6系统应对心脏出血漏洞,排查与回滚策略-图2

脚本返回“VULNERABLE”就实锤;没脚本也能用nmap:

nmap -p 443 --script ssl-heartbleed 本机IP

结果里出现“State: VULNERABLE”立刻进入下一环节。

二、止血:先别重启,把洞堵上

目标:把内存泄漏口封死,同时不让业务中断超过30秒。

1. 临时禁用有问题的加密套件,给nginx/apache先打绷带:

CentOS 6系统应对心脏出血漏洞,排查与回滚策略-图3

nginx.conf里加一行:

ssl_protocols TLSv1.2;

apache同理,把SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1写进配置,reload即可。

2. 如果前端有SLB,直接把443转80,让证书层先退场,把攻击面降到0,再慢慢折腾。

三、回滚方案:老系统也能用上安全版OpenSSL

CentOS 6官方源已停止维护,别傻等yum update,源码编译最稳。

1. 建隔离目录,防止污染系统:

mkdir -p /opt/openssl-1.0.1g && cd /opt/openssl-1.0.1g

2. 拉源码包:

wget https://www.openssl.org/source/openssl-1.0.1g.tar.gz

tar zxf后进入目录,打补丁:

./config --prefix=/opt/openssl-1.0.1g --openssldir=/opt/openssl-1.0.1g shared zlib

make && make install

3. 让系统优先走新库:

echo '/opt/openssl-1.0.1g/lib' > /etc/ld.so.conf.d/openssl-1.0.1g.conf

ldconfig

4. 重编nginx/apache,静态链新OpenSSL:

nginx例子:

./configure --with-httpsslmodule --with-openssl=/opt/openssl-1.0.1g

make && make install

5. 验证:

strings /usr/local/nginx/sbin/nginx | grep '1.0.1g'

出现1.0.1g说明回滚成功,再跑一次heartbleed_test.py,VULNERABLE消失。

四、旧包降级:实在不想编译也能救

有些机器编译环境残废,直接降级rpm更快。

1. 去vault.centos.org抠旧包:

wget http://vault.centos.org/6.5/updates/x8664/Packages/openssl-1.0.1e-16.el65.15.x86_64.rpm

注意后缀_5.15,这版已打心脏出血补丁。

2. 强制降级:

rpm -Uvh --oldpackage openssl-1.0.1e-16.el65.15.x8664.rpm

3. 重启依赖服务:

service httpd restart && service nginx restart

再跑检测脚本,确认漏洞关闭。

五、把坑记下来,下次不再踩

1. 写个crontab,每天凌晨拉脚本检测版本号,非1.0.1g立刻邮件告警。

2. 把编译好的/opt/openssl-1.0.1g目录打包成tar.gz,丢到内网仓库,下次新机器上线直接解压,3分钟完成。

3. 证书私钥被读过就别心疼,立刻重新签发,老证书吊销列表同步到CDN,防止中间人拿旧证书伪装。

六、常见翻车点与急救

• 降级rpm后ssh无法连接:sshd也依赖openssl,先在screen里重启sshd,确认端口22正常再退出。

• nginx编译报错“SSLCTXsetcertcb未定义”:说明系统头文件还是老版本,把/usr/include/openssl备份后,ln -s /opt/openssl-1.0.1g/include/openssl /usr/include/openssl再编。

• 负载均衡健康检查狂报失败:检查SLB探测的是否还是TLSv1.0,把探测协议改成TLSv1.2,瞬间恢复。

CentOS 6老胳膊老腿,心脏出血一来就散架;先热检确认,再临时掐加密套件,接着源码编译1.0.1g或rpm降级到_5.15,最后重编服务+验证+轮换证书,一条链路下来,漏洞清零,业务不停。

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

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

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