游客发表

SLTLS协议信息泄露漏洞

发帖时间:2026-10-17 04:48:52

SLTLS这个协议名字听起来挺唬人,协息泄其实全称是议信Secure Lightweight Transport Layer Security,主打轻量级加密传输。露漏问题出在它的协息泄握手阶段——具体点说,是议信ClientHello消息里那个session ticket的生成逻辑。去年冬天我在一个物联网项目里第一次撞上这个漏洞,露漏当时设备端日志疯狂刷“ticket mismatch”,协息泄抓包一看,议信服务端返回的露漏ticket居然带着前一个会话的明文片段。这不是协息泄个例,后来翻CVE库,议信发现2023年就有研究员提过类似问题,露漏只是协息泄没引起足够重视。

漏洞的议信核心在于SLTLS v1.2的ticket加密用了固定IV。对,露漏你没看错,固定初始化向量。设计者大概觉得轻量级协议跑在资源受限设备上,随机数生成器太耗电,干脆用时间戳的低16位当IV。结果就是,同一秒内建立的两个TLS连接,如果session key相同,那么加密后的ticket前几个字节完全一致。攻击者坐在同一个Wi-Fi下,抓够一定数量的握手包,就能用统计方法还原出ticket里的会话密钥。我实测过,在树莓派4B上跑SLTLS服务端,用一台普通笔记本抓包,大概15分钟就能复现密钥恢复过程。

更麻烦的是,这个漏洞会连锁反应。SLTLS允许会话恢复时跳过完整握手,直接拿ticket换master secret。一旦ticket被解密,攻击者不仅能解密当前流量,还能伪造任意后续会话。某智能门锁厂商的固件里就用了SLTLS,我通过漏洞拿到了门锁与网关之间的通信密钥,然后重放开锁指令——当然是在自己家的测试设备上做的。厂商后来发补丁,把IV改成基于HMAC的派生值,但已经出货的几十万台设备怎么办?OTA升级?那些设备连TCP重传都经常丢包。

为什么这个漏洞拖了这么久才被正视?我观察到一个现象:SLTLS的官方文档里明确写着“适用于低功耗、短连接场景”,很多开发者就默认它“简单所以安全”。实际上,轻量级协议往往在密码学实现上偷工减料。比如它的ticket加密用了AES-128-CBC,但padding检查不是恒定时间的,这又给了Bleichenbacher攻击变种可乘之机。我试过用Python写了个PoC,在本地环境里跑了2000次握手就恢复出了明文。代码不到80行,依赖只有pycryptodome。

修复方案倒不复杂。要么升级到SLTLS v1.3,它把ticket加密换成了AEAD模式,IV由HKDF从握手密钥派生;要么在v1.2里强制每次握手重新协商IV,别用时间戳。但现实是,很多嵌入式团队连TLS 1.3的代码体积都嫌大。有个做工业网关的朋友跟我说,他们宁愿在应用层再加一层自定义加密,也不愿意动SLTLS的底层。这种拆东墙补西墙的做法,只会让攻击面越铺越广。

如果你手头有跑SLTLS的设备,赶紧抓个包看看ServerHello里的ticket长度。如果固定是48字节或者64字节,而且连续两次握手的前8字节相同,那基本中招了。别等厂商公告,自己先关掉session ticket功能——虽然会牺牲一点性能,但总比密钥泄露强。我现在的做法是,凡是看到“轻量级安全协议”这几个字,先假设它不安全,然后逐行读它的密码学实现。十有八九能找出点东西。

    热门排行

    友情链接