一、概述
2019年某月某日,接到某客户反馈,项目多台服务器CPU占用情况超出正常范围,申请到场进行应急处置工作。
接到反馈后,前往客户现场参与安全事件应急处置,已完成了病毒种类确认、恶意脚本分析和初步处置工作。
二、现场处置情况
11日下午,到场后,疑似中毒的虚拟机已经被关闭,工程师从中选择了数台主机,启动后进行分析。这些主机磁盘的多个位置(主要为C:\,C:\Windows\)存在数量数十至数千不等的八位随机名称的.exe文件(以及少量的四位随机名称.exe文件),大小均为55KB,最早创建时间为月9日13点左右,在创建频率较高的主机上可达到每分钟创建2-3个,在安全工程师进行检查的过程中,这些文件仍然在不断创建。怀疑这些文件为病毒所创建的恶意文件,可以将其作为快速识别中毒主机的标志之一。
为保护现场完整,安全工程师在杀毒动作之前首先进行了计划任务、服务、进程、网络连接分析。以较为典型的192.168.2.70(计算机名w2k3-JSTYDL)、192.168.2.31(w2k3-SOC)为例。
在计划任务分析中,发现了三个可疑计划任务Autocheck、Autostart、escan。Autostart、escan分别设置了,从2019年11月11日开始,C:\Windows\下两个随机命名的exe文件每隔十分钟执行一次。
Autocheck任务则每隔50分钟,在http://w.beahh.com/page.html?pW3XX-XXXXXX上下载恶意文件。但本次中毒的服务器和互联网均无法直接连接,经实际验证,此链接对应的页面不存在。但w.beahh.com域名被识别为驱动人生木马事件的远控服务器之一。
在192.168.2.70和192.168.2.31的事件管理器中,安全日志发现长期存在频率极高的登录类型3(共享文件和共享打印机)的失败尝试,来源分布在服务器网段和工作终端网段的大量主机上。
在系统日志分析中,发现频繁有四位随机名称的服务启动,每个服务运行一个单独的八位随机名称.exe文件,并且我们在服务管理中找到了这些服务。
值得注意的是,大部分主机的服务管理已无法正常打开,但是依然能通过命令行查看正在运行的服务,确认这些异常服务的存在。
在进程分析中,发现存在大量cmd.exe、wscript.exe进程,数量明显不正常。使用进程分析工具,发现这两种进程关联到了C:\windows\temp\tmp.vbs文件,疑似在执行恶意脚本。在文件系统中存在的八位随即名称.exe文件,有一部分也处于运行状态。
通过netstat-ano查看网络连接,发现大量的本地445端口与外部地址的连接,以及大量的本地端口与外部地址445端口的连接,这个情况广泛出现在受感染主机上,无法用正常的共享文件行为解释。
随后,在主机上安装杀毒软件(360杀毒离线安装版、火绒安全软件离线安装版),对中毒主机进行全盘扫描。火绒扫描结果如下(360扫描结果相同):
扫描出的恶意文件主要分为三类,分别是:
1. 位于文件系统不同位置的随机命名的.exe文件被识别为木马文件。
2. 位于C:\windows下的多个文件被识别为DTStealer蠕虫文件。驱动人生木马事件中,
病毒也利用了DTStealer进行传播。
3. 位于C:\windows\temp下的svchost.exe、tmp.vbs等文件被识别为木马文件。
在与项目组和客户的沟通中,初步了解了楼层网络和主机的基本情况如下:
1.网络被分为两个部分:各公司开发人员使用的工作终端,和楼层开发组对应的业务服务器。网络之前只有一台防火墙,没有部署其他安全设备。
2.工作终端、不同用途的服务器由不同的负责人进行管理。
3.由于业务需要,旧服务器都开放了445端口用于共享文件,无论是本地防火墙还是网络边界的防火墙设备均未对445端口进行任何配置,使得在服务器区域和工作终端区域的任何一台主机都可以尝试访问服务器的445端口。
4.大部分服务器使用相同的密码,密码为键盘顺序,复杂度较低。
5.部分服务器安装了较落后版本的趋势科技杀毒软件,。
6.大部分服务器为windows 2003 R2版本。
11月12日,对感染主机进行进一步排查。
运行了scvhost.exe,在弹出的命令行中确认其存在扫描局域网存活主机、扫描445端口、加载攻击载荷(exp)进行攻击。
在安全工程师进行检查的过程中,在C盘根目录和C:\Windows路径下,八位随机名称的.exe文件仍然在不断被创建。在一般情况下,病毒文件无法删除/反复创建是由于存在恶意计划任务或守护进程。但本次感染的服务器上被创建的计划任务频率远低于文件创建的频率,且计划任务执行的动作也与创建文件无关。
使用进程分析工具ProcessMonitor,对文件创建动作前后的主机运行信息进行检查。发现在192.168.2.70上每一次恶意文件创建之前,都会与192.168.2.225进行一次长度固定的数据包传输。且192.168.2.70的445端口一直存在与192.168.2.225的网络连接,安全工程师根据以上信息,怀疑由于局域网内存在大量被感染的服务器正在不断扫描局域网主机并进行漏洞利用,每一次入侵都会在服务器上创建一个八位随机名称的.exe文件。
随后安全工程师登录192.168.2.225上进行检查,除其他服务器存在的八位、四位随即名称.exe文件外,发现了之前检查的服务器上不存在的恶意文件m2.ps1、mkatz.ini。
m2.ps1和驱动人生木马事件中出现的m.ps1文件非常相似。
mkatz.ini为windows系统密码抓取工具mimikatz运行后保存密码的文件,安全工程师在其中发现了主机的系统信息、账户密码。
另外,在192.168.2.255发现了以计划任务方式进行启动的八位随机名称exe程序,与之前所检查的主机都通过服务方式进行自启动不相同,且存在四位随机名称的恶意文件,显示出本次传播的病毒在启动方式、命名规则上并非只有一种,其灵活性给后期病毒处置提高了难度。
根据以上信息,安全工程师判断192.168.2.225为服务器网段内活跃的病毒传播者之一,持续扫描和攻击局域网主机,在主机上不断创建病毒文件。这类传播行为就是受感染主机上出现的大量八位随机名称文件的原因。
在某台Windows2003 r2服务器上通过组策略封闭445端口后,不再出现新的病毒文件,确认对于病毒传播方式的判断是正确的。
11月13日,在192.168.2.30主机上,检测到伪装为为taskmgr.exe的恶意文件,即驱动人生木马事件中的挖矿主程序。
安全工程师通过分析得到的病毒特征包括:
1.病毒传播利用了蠕虫DTStealer。
2.病毒创建的计划任务连接到了驱动人生木马服务器w.beahh.com。
3.病毒使用mimikatz收集操作系统账户和密码,存在m2.ps1、taskmgr.exe恶意文件。病毒利用445端口进行传播。
根据已收集到的信息,判断本次病毒感染事件的病毒类型为近一年来驱动人生挖矿木马的新变种。
在结束了当天的病毒分析工作后,安全工程师给出了初步的处置方式如下:
1.2003服务器本地安全策略上添加策略,阻止本地共享文件端口到外面任意端口的TCP通信。2008可在windows防火墙上配置入站出站策略;在工作终端和服务器区之间的防火墙设备上配置策略,禁止工作终端访问服务器共享文件端口。
共享文件端口包括:135,137,138,139,445。
通过分析病毒文件确定病毒已获取并保存了服务器统一使用的密码,建议将3389端口一并封闭。
由于网络中不断在通过445端口传播病毒,需要先封端口再杀毒才能起到效果。
2.安装360杀毒,资源允许的话再安装360安全卫士,均选择包含最新完整病毒库的离线版本,进行全盘扫描并处理。
3.修改服务器密码,增加密码复杂度(8位以上,无键盘顺序规律,包含数字、大小写字母、特殊字符),建议服务器使用不相同的密码。
4.杀毒软件无法彻底清理病毒有关文件、服务、计划任务,之后会编写批处理脚本对这些方面的残余内容进行清理。
5.通知工作终端使用者安装杀软。
11月20日,安全工程师在现场根据受感染服务器的具体情况,调整并完成了病毒清理脚本。清理脚本主要功能如下:
1.在Windows防火墙中配置规则,封禁本地135、137、138、139、445端口。
2.删除病毒所创建的计划任务。
3.删除病毒所创建的固定名称服务。
4.删除病毒在文件系统中创建的固定名称文件。
5.删除病毒在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\下的注册表项。
6.停止病毒进程。
脚本在Windows 2008 R2以上版本可以正常运行,Windows 2003 R2由于无法直接在防火墙上,封禁端口操作需要手动在计算机组策略中进行配置。
安全工程师将病毒清理脚本和其他处置建议一并向用户、项目组进行了汇报。
三、事件细节分析
3.1入侵路径推测
病毒可能的传播途径如下:
根据对病毒文件和现场网络环境的分析,推测病毒可能通过工作终端的互联网访问、使用带毒移动介质、带毒笔记本接入网络等方式,首先感染楼层开发人员的工作终端。工作终端与服务器间只有一台防火墙,且由于业务需要未针对445端口配置阻断策略,使任意感染的工作终端都可以对服务器发动攻击,服务器大部分使用了相同的简单密码,任意一台服务器沦陷就会导致当前网络下所有使用此密码的服务器失去保护,横向传播后大批量服务器感染。
3.2 恶意文件检查
病毒核心文件
svchost.exe
所在位置
C:\windows\temp
文件分析
运行后首先扫描局域网存活主机和开放的445端口,之后尝试利用永恒之蓝漏洞,以及其他的攻击手段。漏洞利用成功后会在受害主机上创建计划任务、服务以及上传文件。
运行窗口:
.pyd文件所在位置
C:\windows\temp
文件分析
编译svchost.exe所需的python库文件
tmp.vbs
所在位置
C:\windows\temp
文件分析
攻击者侵入主机后,创建tmp.vbs并运行,实现创建计划任务、创建服务、设置端口转发、文件系统操作、在目标域名下载脚本文件。
文件内容如下:
在线威胁检测结果如下:
八位随机名称.exe文件
文件位置
主要位于C:\、C:\windows\,其他路径下有少量存在。
文件分析
攻击者侵入主机后,在文件系统中创建八位随机名称.exe文件,并创建服务和计划任务配置其开机自动启动。因为网络内大量主机被感染,同一时间段内大量主机在互相攻击,每次攻击都会创建一个此类文件,所以产生了主机上存在数百到书签不等的.exe文件的情况。
存在的行为有:查询计算机名、查询系统用户名、查询系统信息、查询系统时区、创建文件等。
m2.ps1文件位置
C:\Windows
文件分析
攻击者入侵主机后,创建此文件并运行。
此脚本通过编码转换混淆脚本内容,存在的行为有:修改代理配置、读取软件策略、查询计算机名、查询系统信息等。
另外在代码中集成了windows密码获取工具Mimikatz。
mkatz.ini文件位置
C:\Windows
文件分析
m2.ps1中集成的mimikatz工具运行后,创建此文件用于保存所抓取的用户密码。文件中可以看到当前计算机的计算机名、账户名、抓取到的密码哈希值、哈希值的破解结果等数据。
taskmgr.exe文件位置
32位系统中c:\windows\system32\drivers\
64位系统中c:\windows\SysWOW64\drivers\
文件分析
挖矿病毒主程序,伪装为任务管理器taskmgr.exe,在检测到用户运行真正的taskmgr.exe时会结束进程,达到隐藏自己的效果。
四、处置建议
1. 端口控制
由于病毒主要通过445端口传播,目前在工作终端与服务器、服务器之间均存在大量攻击行为,应在2003服务器本地安全策略上添加策略,阻止本地共享文件端口到外面任意端口的TCP通信。2008可在windows防火墙上配置入站出站策略;在工作终端和服务器区之间的防火墙设备上配置策略,禁止工作终端访问服务器共享文件端口。共享文件端口包括:135,137,138,139,445。
在工作终端和服务器区之间的防火墙设备上配置策略,禁止工作终端访问服务器共享文件端口。共享文件端口包括:135,137,138,139,445。
通过分析病毒文件确定病毒已获取并保存了服务器统一使用的密码,建议尽快全面更换服务器密码,关闭3389端口,如果无法实现则更换远程桌面端口。
2. 更新杀毒软件
目前服务器使用的杀毒软件版本较为落后,应保持杀毒软件的及时更新。无法安装最新版本趋势杀毒软件的主机,建议下载安装包含最新病毒库的360杀毒离线安装包、360安全卫士离线安装包,并进行全盘查杀,并配置周期性杀毒策略。
3.更新密码策略
尽快修改服务器密码,增加密码复杂度(8位以上,无键盘顺序规律,包含数字、大小写字母、特殊字符),建议服务器使用不相同的密码。
4.系统加固
确保所有服务器都更新了“永恒之蓝”漏洞相关安全补丁。
确保更新了微软发布的所有安全补丁。
5. 清理残余文件
在服务器上运行安全工程师提供的脚本文件,封闭windows 2008r2以上版本的服务器的共享文件端口,清理病毒创建的计划任务、服务、文件、注册表。
6. 控制工作终端
要求楼层工作终端自行安装杀毒软件,不使用未知安全的移动介质,不访问未知风险的网站,不将未知风险风险文件带入局域网,提高员工安全意识。
工作终端区域应被服务器区域视为完全不可信,建议在防火墙上进行配置,假如暂时无法停止使用共享文件,则配置只允许指定IP访问服务器445端口。建议在边界处添加IPS、态势感知、WAF等设备,有助于威胁的发现、阻断、追溯。
五、总结
检查后确认,本次事件为“驱动人生”挖矿病毒感染,病毒极有可能首先感染了工作终端区域某台计算机,再通过445端口入侵第一台服务器,继续横向传播最终导致服务器区域大面积感染。
建议在完成病毒清理清理工作后,推进操作系统和网络层面的安全加固工作,同时引入周期性的针对应用和系统层面的脆弱性检测,以提供持续性的安全保障。
附件:残余文件清理批处理脚本
@echo off
echo 关闭共享文件端口和远程桌面端口,仅限2008以上版本,2003请手动在组策略中设置
echo 正在关闭135-139端口 请稍候…
netsh advfirewall firewall add rule name = "Disable port 135 - TCP" dir = in action = block protocol = TCP localport = 135,136,137,138,139
echo.
netsh advfirewall firewall add rule name = "Disable port 135 - UDP" dir = in action = block protocol = UDP localport = 135,136,137,138,139
echo.
echo 正在关闭445端口 请稍候…
netsh advfirewall firewall add rule name = "Disable port 445 - TCP" dir = in action = block protocol = TCP localport = 445
echo.
netsh advfirewall firewall add rule name = "Disable port 445 - UDP" dir = in action = block protocol = UDP localport = 445
echo.
rem echo 正在关闭3389端口 请稍候…
rem netsh advfirewall firewall add rule name = "Disable port 445 - TCP" dir = in action = block protocol = TCP localport = 3389
rem echo.
rem netsh advfirewall firewall add rule name = "Disable port 445 - UDP" dir = in action = block protocol = UDP localport = 3389
echo.
echo 清理恶意服务
echo 正在关闭服务
net stop Ddriver
echo 正在删除服务
sc delete Ddriver
echo 正在关闭服务
net stop WebServers
echo 正在删除服务
sc delete WebServers
@echo.
echo 清理恶意计划任务
echo 清理项目出现的计划任务
echo 正在删除计划任务Autocheck
schtasks /Delete /TN Microsoft\Windows\Tasks\Autocheck /F
echo 正在删除计划任务Autostart
schtasks /Delete /TN Microsoft\Windows\Tasks\Autostart /F
echo 正在删除计划任务Gpcheck
schtasks /Delete /TN Microsoft\Windows\Tasks\escan /F
echo 清理驱动人生木马典型的计划任务
schtasks /Delete /TN Ddrivers /F
schtasks /Delete /TN WebServers /F
schtasks /Delete /TN DnsScan /F
schtasks /Delete /TN Microsoft\Windows\Bluetooths /F
schtasks /Delete /TN Certificate /F
schtasks /Delete /TN Credentials /F
@echo.
echo 清除病毒文件
echo 停止vbs脚本
taskkill /IM wscript.exe /F
echo 正在删除windows\temp下的所有文件
takeown /f %windir%\temp
Cacls C:\Windows\temp /t /e /c /g everyone:f
attrib -a -r -s -h /d /s %windir%\temp\*
del /f /s /q %windir%\temp\*.*
echo 正在清理windows下的恶意文件m2.ps1,mkatz.ini
takeown /f %windir%\m2.ps1
takeown /f %windir%\mkatz.ini
Cacls C:\Windows\m2.ps1 /t /e /c /g everyone:f
Cacls C:\Windows\mkatz.ini /t /e /c /g everyone:f
attrib -a -r -s -h /d /s %windir%\m2.ps1
attrib -a -r -s -h /d /s %windir%\mkatz.ini
del /f /s /q %windir%\m2.ps1
del /f /s /q %windir%\mkatz.ini
echo 正在清理驱动人生木马典型的恶意文件
takeown /f %windir%\system32\svhost.exe
takeown /f %windir%\system32\wmiex.exe
Cacls C:\Windows\system32\svhost.exe /t /e /c /g everyone:f
Cacls C:\Windows\system32\wmiex.exe /t /e /c /g everyone:f
attrib -a -r -s -h /d /s %windir%\system32\svhost.exe
attrib -a -r -s -h /d /s %windir%\system32\wmiex.exe
taskkill /IM svhost.exe /F
taskkill /IM wmiex.exe /F
del /f /s /q %windir%\system32\svhost.exe
del /f /s /q %windir%\system32\wmiex.exe
takeown /f %windir%\system32\drivers\svchost.exe
takeown /f %windir%\system32\drivers\taskmgr.exe
Cacls C:\Windows\system32\drivers\svchost.exe /t /e /c /g everyone:f
Cacls C:\Windows\system32\drivers\taskmgr.exe /t /e /c /g everyone:f
attrib -a -r -s -h /d /s %windir%\system32\drivers\svchost.exe
attrib -a -r -s -h /d /s %windir%\system32\drivers\taskmgr.exe
del /f /s /q %windir%\system32\drivers\svchost.exe
taskkill /IM taskmgr.exe /F
del /f /s /q %windir%\system32\drivers\taskmgr.exe
echo 正在清理注册表
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Ddriver /f
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WebServers /f
echo 清除完成!按任意键继续……
echo. & pause