游客发表
2014年4月7日,心脏开源社区炸了锅。流血漏洞OpenSSL被爆出致命漏洞,关内代号Heartbleed——心脏流血。心脏这个漏洞潜伏了整整两年,流血漏洞没人发现,关内直到Google安全团队和Codenomicon公司几乎同时盯上它。心脏
什么叫心脏流血?流血漏洞打个比方,你去银行取钱,关内把银行卡递进窗口,心脏对柜员说“我要取100块”。流血漏洞正常柜员会给你100块,关内然后礼貌地结束对话。心脏但心脏流血漏洞让柜员变得过于“热情”——你只说了要100块,流血漏洞他却把保险柜里所有的关内钱都塞给你,还附赠一份客户名单。问题出在OpenSSL的心跳扩展机制上,它本意是让两台服务器之间保持连接,互相确认“我还活着”。攻击者发一个请求包,声称自己需要某个长度的数据,服务器就老老实实把那块内存里的内容全部返回——不管那是不是请求者该看的。
最恐怖的地方在于,内存里存着啥,攻击者就能拿到啥。私钥、密码、会话令牌、用户数据,全在内存里躺着。更麻烦的是,攻击者可以反复触发这个漏洞,每次都能从服务器内存的不同位置“撕”一块数据下来。就像你每次去那个银行柜员那儿取100块,他每次都把整个保险柜倒给你,你多取几次,整个银行的家底都摸清了。
这个漏洞影响面有多广?当时互联网上超过三分之二的网站用的都是OpenSSL,包括雅虎、谷歌、Facebook这些巨头。有个网络安全专家当时说了一句让我印象极深的话:“这个漏洞不是一扇门,是整面墙都塌了。”你没法通过修补一个端口来解决,因为问题出在核心加密库本身。所有依赖OpenSSL的服务都得打补丁,然后还得撤销旧证书、重新签发新证书——前提是你得确定私钥没泄露。但讽刺的是,你根本不知道攻击者是不是早就偷走了私钥,只是没用而已。
我印象里最戏剧化的案例是加拿大税务局。他们发现漏洞后紧急关停了在线服务,但后来还是确认有大约900份社会保险号码被窃取。900个号码背后就是900个真实的人,他们的身份信息可能已经在黑市上流转。这种伤害没法量化,因为受害者可能几年后才发现自己“被贷款”了。
心脏流血给整个行业上了一课:开源软件不等于安全软件。OpenSSL的核心代码长期只有两三个人在维护,这些人拿的是开源社区的微薄赞助,干的却是守护全球互联网加密地基的活儿。这不是某个人的错,是整个生态的结构性风险——我们太依赖免费的基础设施,却不愿意为维护它买单。
后来有人统计,OpenSSL项目一年收到的捐款大约只有几千美元,还不够一个安全工程师干两天的工资。心脏流血之后,Linux基金会牵头搞了核心基础设施倡议,大公司们才开始掏钱。但说实话,这种“出事才捐款”的模式挺让人心寒的。
现在回头看,心脏流血更像是一个分水岭。它让所有人意识到,互联网的信任基石其实薄得像张纸。你每天用的网银、邮箱、社交账号,底下垫着的可能就是一个业余时间维护的开源项目。这种感觉就像你住在一栋摩天大楼里,后来才发现地基是几个志愿者周末抽空浇的混凝土——质量还不错,但谁也不敢打包票。
友情链接