EternalRocks(永恒之石)技术分析与防护方案

继“永恒之蓝”勒索病毒后,近日,我们发现了最新病毒“永恒之石”(EternalRocks)。该病毒属于网络蠕虫,具有自我复制的功能,并利用MS17-010漏洞进行传播。与WannaCry不同,“永恒之石”利用更多近期泄露的NSA黑客工具,其中包括多种漏洞攻击工具。

参考链接:https://threatpost.com/eternalrocks-worm-spreads-seven-nsa-smb-exploits/125825/?utm_source=tuicool&utm_medium=referral 

https://github.com/stamparm/EternalRocks

文件结构

文件名MD5功能
UpdateInstaller.exe496131B90F**********D2DD21213646下载所需的.net环境,释放svchost.exe
svchost.exe5C9F450F24**********A0BD37DB6A40释放taskhost.exe。下载Tor并运行
Taskhost.exeC52F20A85**********1248FD84AAA95释放漏洞利用工具,扫描随机IP,调用后续程序利用漏洞进行攻击
taskmgr.exe4420F89**********D2EF14136032F69漏洞利用工具
csrss.exe8C80DD**********7C1E549CB59BCBF3漏洞利用工具
wmiprvse.exeD2FB0**********4FBD1B18E475C9F23漏洞利用工具
lsass.exe2A8D4**********482750FE052223C3D漏洞利用工具
spooler.exe30380B**********006216F33FA06964D漏洞探测工具
msdtc.exeB50FF**********29A00B245E4D0C863漏洞探测工具
winlogon.exeC243**********2110977DACAFE6C8C1后门植入工具

攻击目标

含有MS17-010漏洞的计算机。

攻击流程

样本分析

EternalRocks病毒文件是通过MS17-010漏洞进行传播的,我们将以其在目标机的执行流程为线,介绍其攻击过程及其功能。

阶段一:UpdateInstaller.exe

第一阶段的样本UpdateInstaller.exe创建目录C:\Program Files\Microsoft Updates,下载并解压必须的.NET组件(提供给之后的阶段使用)TaskScheduler和SharpZlib,下载完之后会释放svchost.exe并运行。可以从样本记录的日志中看出它的行为。

svchost.exe会释放taskhost.exe,然后从archive.torproject.org下载Tor压缩包,解压缩后运行Tor程序,然后通过创建进程netsh.exe附加参数的方式添加防火墙规则,将病毒攻击组件(C:\Program Files\Microsoft Updates\svchost.exe、C:\Program Files\Microsoft Updates\taskhost.exe)、Tor组件(C:\Program Files\Microsoft Updates\Tor\tor.exe)、端口加入白名单,启用防火墙后退出(添加规则的具体命令放在附录部分)。

与C&C服务器 f3sxk2g3evjr7di5.onion(f3sxk2g3evjr7di5每次获取的都不一样,存放在C:\Program Files\Microsoft Updates\Tor\hidden_service\ hostname文件中)进行通信。

创建计划任务

感染24小时后,样本会在http:// f3sxk2g3evjr7di5.onion/updates/download?id=PC站点下载恶意程序taskhost.exe(与第一阶段的病毒文件不同)。

阶段二:EternalRocks

此阶段需要使用的样本Taskhost.exe,使用dnspy载入后,可以看到原名为EternalRocks。

运行Taskhost.exe后,它会在当前目录下释放并解压shadowbrokers.zip。

释放的这些文件中主要就是漏洞相关程序,包含漏洞利用,漏洞扫描和后门植入程序。之后,Taskhost.exe将会随机扫描IP地址并发送syn数据包等待回链,如果对方没有回传ack包就尝试连接下一个IP地址,一旦和目标IP连接成功,便启动bin目录下的进程msdtc.exe(Smbtouch.exe)进行漏洞探测,一旦探测到有可用的漏洞,就利用后门植入程序将第一阶段的UpdateInstall.exe植入到目标机器中。

网络规则

样本与以下链接产生通信:

  1. 下载.net组件:

https://api.nuget.org/packages/taskscheduler.2.5.23.nupkg

https://api.nuget.org/packages/sharpziplib.0.86.0.nupkg

  1. 下载tor

https://archive.torproject.org

检测与防护方案

检测

1、本地检查

病毒感染主机后,会创建C:\Program Files\Microsoft Updates\目录,生成多个病毒文件,如下图:

进入开始菜单—控制面板—管理工具—计划任务,展开任务计划程序库—Microsoft—Windows,病毒会创建2个计划任务ServiceHost和TaskHost,如下图:

在主机上发现以上特征,即可判断已经感染EternalRocks病毒。

2、远程扫描

管理员可使用绿盟极光远程安全评估系统RSAS对网络内未安装补丁及中了Doublepulsar后门的主机进行远程检测,如下图:

隔离

  • 断网

检测阶段发现的已感染病毒的主机应立即进行断网,避免病毒进一步在网络内扩散。

  • 封锁端口

对于未安装MS17-010补丁的和存在Doublepulsar后门的主机,应立即封锁Windows SMB服务TCP 445端口,方法如下:

1、开始—控制面板—Window防火墙,点击左侧高级设置,点击左侧入站规则,再点击右侧新建规则创建防火墙入站规则:

2、在新建入站规则向导中,针对协议和端口步骤,选择对端口过滤。

3、选择TCP协议和特定本地端口:445

4、在操作步骤中,选择阻止连接。

5、在应用该规则处,勾选域、专用以及公用选项。

6、填入规则名称,完成创建。

7、规则创建完成后,可看到入站规则中存在445阻断规则。

除使用Windows防火墙封锁TCP 445端口外,还可以直接禁用Server服务,如下:

  1. 点击开始菜单—运行,输入msc,进入服务管理器,找到server服务。

2、双击将启动类型修改为禁用,点击停止按钮,将服务状态修改为已停止。

重新启动主机即可彻底关闭TCP 445端口。

修复

  • 清除病毒
  1. 进入开始菜单—控制面板—管理工具—计划任务,展开任务计划程序库—Microsoft—Windows,删除计划任务ServiceHost和TaskHost。
  2. 停止以下进程:

C:\Program Files\Microsoft Updates\svchost.exe

C:\Program Files\Microsoft Updates\taskhost.exe

C:\Program Files\Microsoft Updates\torunzip.exe

  1. 删除C:\Program Files\Microsoft Updates\目录及其中所有文件。
  2. 安装补丁

下载并安装微软官方补丁:

https://technet.microsoft.com/zh-cn/library/security/ms17-010.aspx

监测

  • 网络监测和阻断

管理员可使用绿盟入侵防御系统NIPS对网络中的攻击报文和Doublepulsar后门连接报文进行阻断,防范病毒进一步扩散,如下图:

同时也可使用此方法监测网络中是否有病毒扩散,帮助管理员定位感染病毒的主机。

总结

通过分析可知,此恶意程序利用的依然是先前ShadowBrokers爆出的漏洞。虽然此次事件掀起了轩然大波,各大安全厂商也都提供了防御措施,但是还是有用户没有针对此次事件进行相关的补救措施。为了防止后续其他人利用此漏洞进行攻击,建议尽快采取相应的防御措施,以免造成损失。

附录

"c:\windows\system32\netsh.exe" firewall add allowedprogram C:\Program Files\Microsoft Updates\svchost.exe "Microsoft Update Service" ENABLE
"c:\windows\system32\netsh.exe" firewall add allowedprogram C:\Program Files\Microsoft Updates\taskhost.exe "Microsoft Update Helper" ENABLE
"c:\windows\system32\netsh.exe" firewall add allowedprogram C:\Program Files\Microsoft Updates\Tor\tor.exe "Microsoft Update Installer" ENABLE
"c:\windows\system32\netsh.exe" firewall add portopening TCP 135 "Open TCP Port 135"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open TCP Port 135" dir=in action=allow protocol=TCP localport=135
"c:\windows\system32\netsh.exe" firewall add portopening TCP 445 "Open TCP Port 445"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open TCP Port 445" dir=in action=allow protocol=TCP localport=445
"c:\windows\system32\netsh.exe" firewall add portopening TCP 5357 "Open TCP Port 5357"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open TCP Port 5357" dir=in action=allow protocol=TCP localport=5357
"c:\windows\system32\netsh.exe" firewall add portopening TCP 49152 "Open TCP Port 49152"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open TCP Port 49152" dir=in action=allow protocol=TCP localport=49152
"c:\windows\system32\netsh.exe" firewall add portopening TCP 49153 "Open TCP Port 49153"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open TCP Port 49153" dir=in action=allow protocol=TCP localport=49153
"c:\windows\system32\netsh.exe" firewall add portopening TCP 49154 "Open TCP Port 49154"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open TCP Port 49154" dir=in action=allow protocol=TCP localport=49154
"c:\windows\system32\netsh.exe" firewall add portopening TCP 49155 "Open TCP Port 49155"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open TCP Port 49155" dir=in action=allow protocol=TCP localport=49155
"c:\windows\system32\netsh.exe" firewall add portopening TCP 49156 "Open TCP Port 49156"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open TCP Port 49156" dir=in action=allow protocol=TCP localport=49156
"c:\windows\system32\netsh.exe" firewall add portopening TCP 139 "Open TCP Port 139"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open TCP Port 139" dir=in action=allow protocol=TCP localport=139
"c:\windows\system32\netsh.exe" firewall add portopening UDP 123 "Open UDP Port 123"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 123" dir=in action=allow protocol=UDP localport=123
"c:\windows\system32\netsh.exe" firewall add portopening UDP 3702 "Open UDP Port 3702"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 3702" dir=in action=allow protocol=UDP localport=3702
"c:\windows\system32\netsh.exe" firewall add portopening UDP 5355 "Open UDP Port 5355"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 5355" dir=in action=allow protocol=UDP localport=5355
"c:\windows\system32\netsh.exe" firewall add portopening UDP 64840 "Open UDP Port 64840"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 64840" dir=in action=allow protocol=UDP localport=64840
"c:\windows\system32\netsh.exe" firewall add portopening UDP 1900 "Open UDP Port 1900"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 1900" dir=in action=allow protocol=UDP localport=1900
"c:\windows\system32\netsh.exe" firewall add portopening UDP 51976 "Open UDP Port 51976"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 51976" dir=in action=allow protocol=UDP localport=51976
"c:\windows\system32\netsh.exe" firewall add portopening UDP 52810 "Open UDP Port 52810"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 52810" dir=in action=allow protocol=UDP localport=52810
"c:\windows\system32\netsh.exe" firewall add portopening UDP 65238 "Open UDP Port 65238"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 65238" dir=in action=allow protocol=UDP localport=65238
"c:\windows\system32\netsh.exe" firewall add portopening UDP 51974 "Open UDP Port 51974"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 51974" dir=in action=allow protocol=UDP localport=51974
"c:\windows\system32\netsh.exe" firewall add portopening UDP 137 "Open UDP Port 137"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 137" dir=in action=allow protocol=UDP localport=137
"c:\windows\system32\netsh.exe" firewall add portopening UDP 138 "Open UDP Port 138"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 138" dir=in action=allow protocol=UDP localport=138
"c:\windows\system32\netsh.exe" firewall add portopening UDP 51975 "Open UDP Port 51975"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 51975" dir=in action=allow protocol=UDP localport=51975
"c:\windows\system32\netsh.exe" firewall add portopening UDP 64841 "Open UDP Port 64841"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 64841" dir=in action=allow protocol=UDP localport=64841
"c:\windows\system32\netsh.exe" firewall add portopening UDP 51973 "Open UDP Port 51973"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 51973" dir=in action=allow protocol=UDP localport=51973
"c:\windows\system32\netsh.exe" firewall add portopening UDP 546 "Open UDP Port 546"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 546" dir=in action=allow protocol=UDP localport=546
"c:\windows\system32\netsh.exe" firewall add portopening UDP 51972 "Open UDP Port 51972"
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Open UDP Port 51972" dir=in action=allow protocol=UDP localport=51972
"c:\windows\system32\netsh.exe" firewall set service fileandprint disable
"c:\windows\system32\netsh.exe" advfirewall firewall add rule name="Malware SMB Block" dir=in localport=445 protocol=TCP action=block
"c:\windows\system32\netsh.exe" firewall set opmode ENABLE

声 明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

如果您需要了解更多内容,可以
加入QQ群:570982169
直接询问:010-68438880

Spread the word. Share this post!

Meet The Author

Leave Comment