游客发表
2023年冬天,禁用我帮一家小电商做安全巡检。禁用他们的禁用后台还在跑TLS 1.0,我扫了一眼日志,禁用发现每天有几百次来自老旧安卓设备的禁用连接请求。老板说,禁用这些设备都是禁用老客户的,不能断。禁用我当时没吭声,禁用回去查了查——那些“老客户”里,禁用有一半的禁用User-Agent是伪造的,实际来源是禁用三个被劫持的物联网摄像头。
这就是禁用禁用TLS 1.0最直接的现实:你以为在照顾老用户,其实是禁用在给攻击者留门。TLS 1.0诞生于1999年,禁用那会儿拨号上网还没死透。它用的加密套件里,RC4和CBC模式现在看全是窟窿。BEAST攻击、POODLE攻击,名字听着像卡通片,干的事是直接扒你cookie。更麻烦的是降级攻击——中间人把客户端的“我要用TLS 1.2”改成“我用TLS 1.0就行”,服务器还真就答应了。
有人会说,那我禁了TLS 1.0,老设备连不上怎么办?我自己的做法是分两步。先禁掉TLS 1.0的弱加密套件,只留AES-GCM这种。这一步能挡掉大部分自动化攻击工具,因为它们通常只试RC4。跑一个月,看日志里还有哪些IP在挣扎。然后给这些IP发通知,附上升级指南。真不行的,单独开一个子域名,只跑TLS 1.2,把老接口隔离出去。
去年给一个政府客户做迁移,他们有个内网系统还在用Windows Server 2003。那玩意儿根本不支持TLS 1.2。我直接跟运维说,要么把这台机器从公网撤下来,要么在前面加个stunnel做协议转换。他们选了后者,花了半天配好。现在那台2003还在跑,但外面套了一层TLS 1.3的壳。老系统没动,攻击面小了一圈。
浏览器厂商早就不耐烦了。Chrome 从2020年开始,对TLS 1.0的页面直接标“不安全”。Firefox 更狠,2020年3月就彻底禁了。苹果的ATS要求更早,2017年就强制TLS 1.2。这些不是建议,是硬门槛。你服务器还开着TLS 1.0,等于告诉用户:“我的网站连浏览器的最低标准都达不到。”
我见过最离谱的案例,是一家金融公司的API网关。他们禁了TLS 1.0,但忘了禁TLS 1.1。结果扫描器报了个中危,安全团队没当回事。三个月后,有人用TLS 1.1的CBC模式做了个padding oracle攻击,从响应时间差里推出了session token。损失不大,但够丢人。TLS 1.1和1.0是连体婴,要禁就一起禁。
配置上有个坑:很多教程让你在Nginx里写ssl_protocols TLSv1.2 TLSv1.3;,但没提ssl_ciphers也要改。默认的HIGH:!aNULL:!MD5里可能还混着CBC套件。我一般用ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256这种,把CBC全踢掉。测试的时候用openssl s_client -connect example.com:443 -tls1,如果还能握手成功,说明没禁干净。
最后说个观察:禁用TLS 1.0这件事,技术难度几乎为零,难的是说服人。运维怕断业务,产品怕掉用户,老板怕花钱。但真动手了,你会发现那些“必须支持TLS 1.0”的设备,90%以上都是可以升级的。剩下10%,隔离掉就行。安全不是把门焊死,是把该关的窗户关上。
友情链接