永恒之蓝漏洞原理
2017年5月12日,永恒原理英国国家医疗服务体系的漏洞电脑屏幕上突然弹出红色勒索界面,手术被迫取消,永恒原理救护车被转移到其他医院。漏洞同一天,永恒原理全球150多个国家、漏洞超过30万台电脑中招。永恒原理制造这场混乱的漏洞,不是永恒原理某个国家的情报机构,而是漏洞一段在网络上流传的漏洞利用代码——“永恒之蓝”。
要弄懂永恒之蓝,永恒原理得先看它攻击的漏洞目标:Windows系统的SMB服务。SMB,永恒原理简单说就是漏洞Windows用来共享文件、打印机的永恒原理协议。你从网上邻居访问同事电脑的文件夹,或者公司内部网络共享盘,走的就是这个协议。1990年代,微软为了让SMB在局域网里跑得更快,加了几个新功能,其中一个叫“SMBv1”,专门用来兼容老系统。
问题就出在SMBv1处理数据包的方式上。当一台电脑向另一台电脑发送SMB请求时,它会先发一个包含“长度”字段的包头,告诉接收方“我接下来要发多少数据”。接收方的内核收到包头后,按这个长度分配内存缓冲区。但微软的工程师在实现时,忘了检查一个关键条件——如果攻击者故意把长度字段填得比实际数据大得多,内核就会分配一块过大的缓冲区,然后继续往里面复制数据,直到缓冲区溢出。
真正的致命点在于,溢出发生后,攻击者可以精心构造数据,覆盖掉内存中紧邻缓冲区的其他数据区域,包括函数指针、返回地址。Windows内核处理SMB请求时,会调用一个名叫srv.sys的驱动程序,这个驱动里有一个函数,专门负责解析SMB头。永恒之蓝利用的是其中一处“池溢出”,攻击者往缓冲区里塞入一段恶意代码,再通过溢出覆盖掉内核中某个对象的引用,让系统在后续执行时,跳转到这段恶意代码的起始地址。
整个利用过程,就像你往一个标称装500毫升的瓶子里硬灌2000毫升水,瓶口溢出的水流进旁边的电路板,烧坏了某条线路,然后这条线路恰好是控制电灯开关的。攻击者不需要任何用户交互——不用你点链接,不用打开附件,只要你的电脑暴露在网络上,并且开放了445端口,攻击者就能直接远程触发。
更麻烦的是,永恒之蓝利用的是Windows内核的漏洞,这意味着它运行在系统最高权限层(Ring 0)。一旦成功执行,攻击者可以完全控制你的电脑,安装后门、窃取密码、横向渗透内网其它机器,为所欲为。
微软其实在漏洞公开前两个月就发布了补丁MS17-010,但全球大量企业、医院、学校没有及时更新。勒索病毒WannaCry正是利用了永恒之蓝,才得以在短时间内横扫全球。讽刺的是,这个漏洞最初是由美国国家安全局(NSA)开发的网络武器,后来被黑客组织“影子经纪人”窃取并公开。NSA拿着这个武器用了至少五年,微软毫不知情。
永恒之蓝之所以至今仍被频繁利用,是因为很多旧系统(比如Windows XP、Windows 7)已停止维护,补丁不再更新。2023年,仍有不少医院、工厂的Windows 7设备中了永恒之蓝变种的勒索病毒。技术本身没有善恶,但谁掌握它、如何使用它,决定了它会成为防御工具还是攻击利器。你电脑上的445端口,可能正是一扇没锁好的门。
(责任编辑:休闲)














