欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

不死的EternalBlue(永恒之蓝)

来源:本站整理 作者:佚名 时间:2019-05-30 TAG: 我要投稿


2017年,Shadow Brokers将从美国国家安全局NSA窃取的软件漏洞利用攻击泄露在网上,之后1个月知名勒索软件WannaCry就席卷全球。现在已经过去2年了,Eternalblue仍然占据着美国的头版头条。本文就Eternalblue和Eternalblue为什么可以不死进行简要分析。
Eternalblue
CVE-2017-0143到CVE-2017-0148漏洞是Windows 7, Windows Server 2008, Windows XP和运行在445端口上的Windows 10系统中使用的Microsoft SMBv1服务器系列漏洞。原始Eternalblue可执行文件中硬编码的字符串表明攻击的Windows版本有:

漏洞影响范围不仅限于Windows系统,还包括使用Microsoft SMBv1服务器协议的设备,比如Siemens超声医疗设备。
Eternalblue本身主要是与漏洞CVE-2017-0144相关,该漏洞通过发送特殊伪造的消息到SMBv1服务器来允许远程攻击者在目标系统上执行任意代码。其他相关的漏洞利用有Eternalchampion, Eternalromance, Eternalsynergy,这些都是被美国国安局NSA相关的APT黑客组织Equation Group标记的。

Eternalblue为什么广泛传播?
SMBv1协议的漏洞已于2017年3月打补丁修复了。但2年过去了,仍然有超过100万联网的设备仍然受到该漏洞的影响。

从全球范围来看,最需要修复的Windows版本为Windows Server 2008和2012 R2版本。

其中有40万受Eternalblue漏洞影响的设备位于美国,其中有超过10万台(约占1/4)设备位于加利福尼亚州,这是美国科技产业的心脏。

目前不仅仅是勒索软件在使用Eternalblue,几乎所有需要蠕虫功能的恶意软件都可以发现Eternalblue的利用。2019年1月,研究人员还发现有加密货币挖矿机通过Eternalblue和Beapy攻击位于中国的企业。
勒索软件在2018年短暂淡出人们实现后,Eternalblue再次成为美国的头条。

Eternalblue如何被使用?
用Eternalblue利用CVE-2017-0144漏洞的技术是NSA开发的,该工具集在网上泄露后,目前已经成为全世界广泛使用的工具了。

为了成功利用该漏洞,未授权的攻击者需要发送一个经过恶意伪造的包给服务器,这也是WannaCry和NotPetya勒索软件能够进行自我繁殖和传播的原因。Eternalblue会允许勒索软件访问网络上的其他机器。攻击者可以利用Equation Group开发Shadow Brokers泄露在网上的DoublePulsar作为payload来安装在有漏洞的目标机器上,并启动勒索软件的副本。

Eternalblue工作原理
Eternalblue依赖于一个名为 srv!SrvOS2FeaListSizeToNt的Windows函数。下面先讲一下SMB工作原理以及如何导致远程代码执行。
SMB (Server Message Block) 是用来从网络上的服务器系统来请求文件和打印服务的协议。在协议的说明中有允许协议来通信关于文件扩展属性的信息,尤其是文件系统中关于文件特征的元数据。
Eternalblue利用了3个不同的bug。第一个是协议尝试映射OS/2 FileExtended Attribute (FEA)列表结构到NT FEA结构来确定需要分配的内存大小的数学错误。错误计算创建了一个整数溢出导致分配的内存比预想的要小,最终导致缓冲区溢出。如果要写的内容太多,额外的数据就会溢出到相邻的内存空间。
利用第二个漏洞可以触发缓冲区溢出,这是由于SMB协议定义的两个子命令SMB_COM_TRANSACTION2和SMB_COM_NT_TRANSACT的差别。如果有太多的数据要包含在一个单独的包中,就需要_SECONDARY命令。TRANSACTION2和NT_TRANSACT的关键区别在于后者调用的数据包是前者大小的2倍。如果客户端使用NT_TRANSACT子命令在TRANSACTION2子命令前发送伪造的消息,就会出现验证错误。如果协议发现接收了2个分开的子命令,就会根据最后接收的包的类型来分配类型和大小。因为最后接收的包比较小,所以第一个包会占用比分配空间更多的空间。
一旦攻击者完成初始的溢出,就可以利用SMBv1中的第3个漏洞来进行Heap Spraying(堆喷射),导致在给定地址分配一块内存。然后,攻击者就可以写入和执行shellcode来控制系统。

Sean Dillon写了一个Ruby脚本可以扫描目标来确定系统是否未修复,并利用所有相关的漏洞。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载