|
2017年5月12日,漏洞一个普通的漏洞周五。英国国家医疗服务体系(NHS)的漏洞电脑屏幕上突然弹出一个红色窗口,要求支付价值300美元的漏洞比特币。医生们发现病历打不开了,漏洞急诊室的漏洞排班系统瘫痪了。这不是漏洞科幻电影,这是漏洞WannaCry勒索病毒的真实开场。短短几小时内,漏洞全球150个国家的漏洞20多万台电脑中招。而这一切的漏洞源头,是漏洞美国国家安全局(NSA)自己开发的一个网络武器——"永恒之蓝"。 漏洞这东西,漏洞说白了就是漏洞代码里的一个"没想到"。程序员写代码时,漏洞脑子里装的是正常流程:用户会乖乖输入名字,计算机会乖乖执行指令。可偏偏有人不按套路出牌。你写了个登录框,想着用户会输"张三李四",结果有人往里塞了一段SQL语句,直接把你的数据库大门给卸了。这就是SQL注入,一个二十多年前就被发现、至今还在各种网站上游荡的老漏洞。 我认识一个做渗透测试的朋友,他的工作就是专门找漏洞。有次他跟我说,给一家公司做安全评估,发现他们的后台管理密码是"admin123"。他打电话告诉对方负责人,对方愣了三秒,说:"这不可能,我们改过密码了。"然后他当着对方的面,用这个密码登进了系统。负责人脸都绿了。你看,漏洞不一定是多高深的技术问题,有时候就是人的惰性。改密码嫌麻烦,设个简单的;打补丁嫌费事,拖一拖再说。攻击者最喜欢的就是这种"拖一拖"。 2014年,心脏出血漏洞(Heartbleed)曝光。这个漏洞藏在OpenSSL这个几乎全世界网站都在用的加密库里面。它允许攻击者读取服务器内存里最多64KB的数据。64KB听起来不多,但反复读取,就能把服务器的私钥、用户的密码、甚至聊天记录一点点拼出来。这个漏洞存在了两年多才被发现。两年里,全球三分之二的HTTPS网站都敞着这道后门。更讽刺的是,OpenSSL这个支撑着半个互联网安全的项目,当时全职维护者只有一个人,而且几乎是义务劳动。 漏洞从来不只是技术问题。它是一面镜子,照出我们如何对待自己创造的东西。你写了一个功能,急着上线,测试只跑了主流程,边界情况懒得管。你用的开源库,版本停留在三年前,因为升级要改代码,改代码要重新测试,重新测试要排期。你的服务器密码,团队五个人都知道,离职了也没人想着改。这些都不是什么高深的安全理论,就是日常的偷懒和侥幸。攻击者不需要比你的防御强多少,他只需要找到你最薄弱的那个环节,然后轻轻一推。 WannaCry爆发后,微软发了一个补丁。这个补丁其实在两个月前就发布了。也就是说,只要那20万台电脑里的大部分,在两个月内点一下"更新",这场灾难的规模会小得多。但人们没有。为什么?因为那个补丁会让电脑重启,会打断手头的工作,会让人觉得"哪有那么巧的事"。然后巧事就来了。 所以漏洞到底是什么?它是代码的裂缝,是流程的缺口,是人性的盲区。你写下的每一行代码,都在某个你不知道的角落,被某个你没想到的人,用某种你没预料的方式,重新审视着。这不是危言耸听,这是互联网的日常。你唯一能做的,就是别当那个"拖一拖"的人。 |