跳转至

CVE-2017-0143 Eternal Blue

Description

永恒之蓝(Eternal Blue)爆发于2017年4月14日晚,是一种利用 Windows 系统的 SMB 协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。

甚至于2017年5月12日, 不法分子通过改造“永恒之蓝”制作了 Wannacry 勒索病毒,使全世界大范围内遭受了该勒索病毒,甚至波及到学校、大型企业、政府等机构,只能通过支付高额的赎金才能恢复出文件。

不过在该病毒出来不久就被微软通过打补丁修复。

漏洞影响

目前已知受影响的 Windows 版本包括但不限于:Windows NT,Windows 2000、Windows XP、Windows 2003、Windows Vista、Windows 7、Windows 8,Windows 2008、Windows 2008 R2、Windows Server 2012 SP0。

What is SMB?

SMB 协议

SMB(Server Message Block)是一个协议服务器信息块,它是一种客户机/服务器、请求/响应协议,通过 SMB 协议可以在计算机间共享文件、打印机、命名管道等资源,电脑上的网上邻居就是靠SMB实现的;

SMB 协议工作在应用层和会话层,可以用在 TCP/IP 协议之上,SMB 使用 TCP/139 端口和 TCP/445 端口。

SMB 原理

  1. 首先客户端发送一个 SMB negport 请求数据报,并列出它所支持的所有 SMB 的协议版本。
  2. 服务器收到请求消息后响应请求,并列出希望使用的 SMB 协议版本。如果没有可以使用的协议版本则返回 0XFFFFH,结束通信。
  3. 协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送 SessetupX 请求数据包实现的。
  4. 客户端发送一对用户名和密码或一个简单密码到服务器,然后通过服务器发送一个 SessetupX 应答数据包来允许或拒绝本次连接。
  5. 当客户端和服务器完成了磋商和认证之后,它会发送一个 Tcon 或 TconX SMB 数据报并列出它想访问的网络资源的名称,之后会发送一个 TconX 应答数据报以表示此次连接是否接收或拒绝。
  6. 连接到相应资源后,SMB 客户端就能够通过 open SMB 打开一个文件,通过 read SMB 读取文件,通过 write SMB 写入文件,通过 close SMB 关闭文件。

What is Eternal Blue?

漏洞出现在 Windows SMB v1 中的内核态函数 srv!SrvOs2FeaListToNt 在处理 FEA(File Extended Attributes) 转换时,在大非分页池(内核的数据结构,Large Non-Paged Kernel Pool)上存在缓冲区溢出。

函数 srv!SrvOs2FeaListToNt 在将 FEA list 转换成 NTFEA(Windows NT FEA) list 前会调用 srv!SrvOs2FeaListSizeToNt 去计算转换后的 FEA lsit 的大小。

然后会进行如下操作:

  1. srv!SrvOs2FeaListSizeToNt 会计算 FEA list 的大小并更新待转换的 FEA list 的大小
  2. 因为错误的使用 WORD 强制类型转换,导致计算出来的待转换的 FEA list 的大小比真正的 FEA list 大
  3. 因为原先的总大小计算错误,导致当 FEA list 被转化为 NTFEA list 时,会在非分页池导致缓冲区溢出

永恒之蓝是在 Windows 的 SMB 服务处理 SMB v1 请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。

通过永恒之蓝漏洞会扫描开放 445 文件共享端口的 Windows 机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。

Explanation of exploit; PoC

...

Mitigation

  1. 禁用 SMB v1 协议
  2. 打开 Windows Update,或手动安装补丁
  3. 使用防火墙阻止 445 端口的连接,或者使用进/出站规则阻止 445 端口的连接
  4. 不要随意打开陌生的文件
  5. 安装杀毒软件,及时更新病毒库

Refer


最后更新: November 17, 2022
创建日期: November 17, 2022