心脏出血漏洞(CVE-2014-0160)影响 OpenSSL 1.0.1a–1.0.1t 和 1.0.2a–1.0.2h 版本,需运行 openssl version -a 核对版本,并用 openssl s_client -connect host:port -tlsextdebug | grep -i heartbeat 验证心跳扩展是否启用。

直接看版本和心跳扩展状态,就能快速判断是否受 CVE-2014-0160(心脏出血)或 CVE-2016-10009(OpenSSH 远程代码执行)影响——不需要复现 PoC,也不用等日志告警。
怎么看当前 OpenSSL 版本是否在漏洞范围内
心脏出血漏洞只影响特定版本:OpenSSL 1.0.1a–1.0.1t、1.0.2a–1.0.2h;而 CVE-2021-3449(TLS 重协商 DoS)影响全部 1.1.1 系列直到 1.1.1j;CVE-2022-2274(RSA 堆溢出 RCE)仅影响 OpenSSL 3.0.4。
运行以下命令确认:
openssl version -a
重点核对两处:
-
OpenSSL 1.0.1f、1.0.1e、1.0.2d—— 心脏出血高危,必须处理 -
OpenSSL 1.1.1j—— 存在 CVE-2021-3449,需升级到1.1.1k或更高 -
OpenSSL 3.0.4—— 存在 CVE-2022-2274,必须升至3.0.5及以上
注意:openssl version 显示的可能是系统默认路径的版本,但某些服务(如 PostgreSQL、Nginx 静态链接)可能自带私有 OpenSSL,需单独检查其二进制依赖。
怎么确认服务启用了危险的心跳扩展
即使版本在漏洞范围内,若服务禁用了 TLS heartbeat 扩展,也不会被利用。不能只看版本,必须验证实际运行时行为。
对标准 HTTPS 服务(如 Web 服务器)执行:
openssl s_client -connect example.com:443 -tlsextdebug 2>&1 | grep -i "heartbeat"
如果输出中含 TLS server extension "heartbeat" (id=15),且返回状态是 CONNECTED,说明该端口启用且可被攻击。
常见易忽略场景:
- PostgreSQL 默认监听
5432,若启用了 SSL,同样走 OpenSSL —— 加-pg参数用heartbleeder检测更准 - 内网 HMI、IoT 网关常监听非标端口(如
8443、9443),需逐个测试 -
s_client超时或拒绝连接,不等于安全,可能是防火墙拦截,不是服务本身关闭了扩展
怎么发现静态链接 OpenSSL 的“影子服务”
很多老旧设备或定制软件(如医疗监护仪后台、国产数据库平台)会把 OpenSSL 静态编译进二进制,openssl version 完全查不到它,但服务仍在用漏洞版本。
查法分两步:
先找监听 TLS 的进程:
ss -tlnp | grep ':.*:'
再对疑似进程检查动态/静态链接:
ldd /path/to/binary | grep ssl
若无输出,极大概率是静态链接;此时用 strings 提取硬编码版本线索:
strings /path/to/binary | grep -E "(OpenSSL|1\.0\.1|1\.1\.1)" | head -5
常见坑:
-
ldd对 setuid 二进制可能失败,需用readelf -d查NEEDED条目 - 有些固件把 OpenSSL 符号 strip 掉了,
strings也看不到版本,只能靠端口行为检测 + 已知设备型号查厂商固件公告 - Docker 容器里跑的服务,得进容器执行检测,宿主机的
openssl命令无效
临时缓解比盲目升级更关键
很多生产环境无法立刻停机升级——比如工控系统、嵌入式设备、或依赖特定 OpenSSL ABI 的闭源中间件。这时候“关功能”比“升版本”更现实。
可操作项:
- 对 Nginx/Apache:在 SSL 配置中加
ssl_protocols TLSv1.2 TLSv1.3;并确保未启用ssl_prefer_server_ciphers on;(旧 cipher list 可能隐式启用 heartbeat) - 对 OpenSSL 1.1.1 系列服务:设置环境变量
OPENSSL_NO_HEARTBEATS=1再启动(部分版本支持,需验证) - 对 OpenSSH 服务:若无法升级到 8.6+,至少禁用
ForwardAgent yes和PKCS11Provider,防止 CVE-2016-10009 利用链成型
最常被跳过的一步:漏洞修复后,必须轮换所有密钥和会话令牌。因为心脏出血可能已泄露私钥,重装 OpenSSL 不等于重置风险。


















