近日,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/blog/eternalblue-nsa-developed-exploit-just-wont-die/
[2]https://www.anquanke.com/post/id/86270
[3]https://zh.wikipedia.org/wiki/%E6%B0%B8%E6%81%92%E4%B9%8B%E8%93%9D
[4]https://www.freebuf.com/mob/articles/terminal/153230.html