关于安全:永恒之蓝漏洞利用机制分析

7次阅读

共计 1740 个字符,预计需要花费 5 分钟才能阅读完成。

近日,Tellyouthepass 勒索病毒被发现再次沉闷,攻击者利用了 EternalBlue(永恒之蓝)内网扩散模块集成到勒索攻打包中,实现内网蠕虫式病毒传播,并已对局部企业进行攻打,如果没有采取及时的防护措施,可能给企业带来微小的损失。

tellyouthepass 中永恒之蓝的利用代码

永恒之蓝是何方神圣

永恒之蓝是美国国家安全局开发的破绽利用程序,于 2017 年 4 月 14 日被黑客组织 Shadow Brokers 透露。永恒之蓝蕴含过程间通信共享(IPC $),该共享容许空会话。这意味着该连贯是通过匿名登录建设的,默认状况下容许空会话,空会话容许客户端向服务器发送不同的命令。

自 2018 年永恒之蓝被 WannaCry 利用并在寰球各国掀起风波之后,热度至今没有消减。尽管微软于 2017 年公布过 Microsoft Windows 补丁,修补了这个破绽,当初仍然有许多黑客利用永恒之蓝进行攻打。与此同时该程序也在一直进化,甚至造成了每周更新的传统,曾将 EXE 攻击方式逐渐切换到利用 Powershell 脚本实现无文件攻打。

永恒之蓝的工作机制

永恒之蓝依赖于一个名为 srv!SrvOS2FeaListSizeToNt 的 windows 函数。要理解它是如何导致近程执行代码,首先须要理解 SMB 的工作机制。SMB(服务器音讯块)是一种协定,用于通过网络从服务器零碎申请文件和打印服务。在协定的标准中,有一些构造能够使协定传播无关文件扩大属性的信息,实质上是无关文件系统上文件属性的元数据。

在此基础上,永恒之蓝利用了协定中的三个不同的谬误。

第一个谬误是当协定试图将 OS / 2 FileExtended Attribute(FEA)列表构造转换为 NT FEA 构造以确定要调配多少内存时呈现的数学谬误。错误计算会产生整数溢出,导致调配的内存少于预期的数量,进而导致缓冲区溢出。如果写入的数据超出预期,则多余的数据可能溢出到相邻的存储空间中。

第二个谬误是因为 SMB 协定对两个相干子命令:SMB_COM_TRANSACTION2 和 SMB_COM_NT_TRANSACT 的定义不同而导致的缓冲区溢出。两者都有一个_SECONDARY 命令,当单个分组中蕴含太多数据时应用该命令。TRANSACTION2 和 NT_TRANSACT 之间的要害区别在于,后者须要一个数据包,大小是前者的两倍。如果客户端应用 NT_TRANSACT 紧接在前的子命令发送精心制作的音讯,则会产生 TRANSACTION2 验证谬误。尽管协定辨认出两个离开的子命令已被接管到,其调配的类型和尺寸的数据包(并相应地分配内存)仅基于接管到的最初一个数据包的类型。因为最初一个较小,因而第一个数据包将占用比调配的更多的空间。

一旦攻击者实现了最后的溢出,他们就能够利用 SMBv1 中的第三个 bug,该 bug 呈现在 SMB_COM_SESSION_SETUP_ANDX 命令中:该命令的申请依赖于 WordCount 的值来确定具体的申请格局,当为 12 时和为 13 时红框中的变量会有所区别,利用该破绽将 12 类型的申请包通过 13 类型进行解决,因为两种类型的申请包格局不统一,通过管制申请包指定偏移的数据,即能够管制 SrvAllocateNonPagedPool 创立的 pool 的大小,实现堆喷射,导致在指定地址分配内存,使得攻击者能够编写和执行 Shellcode 来控制系统。

如何防止利用永恒之蓝的攻打

首先,确保更新并利用安全补丁 MS17-10,其次禁用 SMBv1,并且不使任何易受攻击的计算机拜访互联网。

以后网络局势下,已呈现疑似永恒之蓝病毒变种,例如:wannaRen 的病毒,应答这些新的威逼,传统防护伎俩很难无效防备,安芯网盾内存保护零碎通过硬件虚拟化技术对内存歹意行为进行监控,可能无效检测到内存中缓冲区溢出、堆栈溢出、部署 shellcode、执行 shellcode、等歹意行为,无效防护这类新威逼。

参考文献:

[1]https://www.sentinelone.com/b…

[2]https://www.anquanke.com/post…

[3]https://zh.wikipedia.org/wiki…

[4]https://www.freebuf.com/mob/a…

正文完
 0