2017年5月12日,影响全球150个国家的网络30万台电脑几乎在同一时刻弹出红色勒索界面。攻击者利用的安全并非什么高深黑客技术,而是软洞一个早在两个月前就被微软修复的漏洞——永恒之蓝。这个漏洞藏身于Windows的影响SMB文件共享协议中,只要向目标电脑发送一段特定格式的网络数据包,就能在对方毫无察觉的安全情况下执行任意代码。更讽刺的软洞是,美国国家安全局早已发现这个漏洞并秘密利用多年,影响直到被黑客组织Shadow Brokers窃取并公开,网络才酿成这场数字瘟疫。安全
像永恒之蓝这类漏洞,软洞属于典型的影响内存破坏型漏洞。程序在读写内存时没有严格检查数据边界,网络攻击者就能用精心构造的安全超长数据覆盖内存中的关键指令,劫持程序执行流程。这类漏洞最致命,因为不需要用户任何操作,只要电脑联网就可能中招。2014年曝光的Heartbleed漏洞同样属于此类——OpenSSL加密库在处理心跳包时忘记检查数据长度,导致服务器内存中的私钥、用户密码等敏感数据可以被随意读取。我认识的一位安全研究员当时开玩笑说,那段时间互联网上所有加密通信都像是用透明信封邮寄情书。
另一种常见漏洞是注入类漏洞,尤其在Web应用中泛滥成灾。最典型的SQL注入,本质上是程序把用户输入直接拼接进数据库查询语句。攻击者在输入框里填一段精心设计的SQL代码,就能绕过登录验证、拖走整个用户表。2019年某大型酒店集团的会员数据库泄露,涉及1.3亿条开房记录,事后调查发现罪魁祸首就是一个未做参数化查询的搜索接口。比SQL注入更隐蔽的是命令注入——程序调用系统命令时没过滤特殊字符,攻击者用分号或管道符就能追加执行任意系统命令。
逻辑漏洞则完全是另一回事,它们不涉及任何底层技术,纯粹是业务设计上的疏忽。2018年某电商平台的优惠券漏洞,用户通过修改请求中的金额参数就能以0.01元购买任意商品。这类漏洞没法用安全补丁修复,因为问题出在业务规则本身。我见过最离谱的案例是某银行APP的转账功能,攻击者先转出一笔钱,趁系统对账间隙立刻撤回,利用时间差反复套现。这种漏洞考验的是程序员对业务场景的理解深度,而不是代码能力。
还有一类漏洞容易被普通人忽视——供应链漏洞。2020年底曝光的SolarWinds事件中,黑客入侵了这家网络管理软件公司的开发环境,在其合法更新包中植入后门代码。全球超过18000家企业和政府机构在不知情的情况下安装了带毒更新,包括美国财政部、国土安全部等核心部门。这种攻击手法最阴险,因为受害者安装的是正版软件的官方更新,杀毒软件和防火墙都不会产生任何告警。软件生态的信任链条一旦被攻破,整个行业都面临系统性风险。
说回永恒之蓝,那次勒索病毒爆发后,微软罕见地为已停止支持的Windows XP发布了紧急补丁。但更值得反思的是,很多漏洞之所以被大规模利用,并非因为攻击者技术有多高明,而是因为大量用户长期不更新系统、不修复已知漏洞。我见过不少企业服务器上还跑着十年前的PHP版本,上面挂着满是SQL注入的旧代码。安全圈有句老话:漏洞不是被发现的,而是被制造出来的——当开发者写出第一行代码时,就注定了它的宿命。