前言

几天前,FortinetFortiGuard实验室在网络中获取到一个恶意的MS Word文档。在文档中,研究人员发现了可自动执行的恶意VBA代码,并且可以在受害者的Windows系统上安装NanoCore RAT软件。 NanoCore RAT是在.Net框架中进行开发,其目前最新版本是“1.2.2.0”。 该软件的作者“泰勒·哈德尔斯顿”被联邦调查局抓获并于去年初被送进监狱。 而本次我们获取的样本就是使用NanoCore,从而在受害者的系统上执行恶意代码。

在这篇文章中,我将展示它如何进行传播并安装到受害者的系统上。

恶意Word文档

我们获取的Word文档的名称是“eml _-_ PO20180921.doc”。 当把它在MS Word中打开时,我们会看到如图1所示的内容。正如图中所示,应用窗口顶部有一条黄色警告消息。

一旦受害者点击图中的黄色按钮“启用内容”,恶意VBA代码就会在后台执行。 VBA代码可以从“Document_Open”中自动执行。 它的代码进行过混淆操作,如图所示。

在图中,我们观察API函数名称并调试输出信息,我们可以看到VBA代码做了一件事:它从指定的URL处下载了一个EXE文件“hxxp://www.wwpdubai.com/wp-content/plugins/jav/inv.exe“并将其保存到”%temp%\ CUVJN.exe“中。 然后在下载完成后执行此EXE文件。

CUVJN.exe是一个.Net框架程序。 它的原始名称是“icce.exe”。 图中的截图显示了相关的详细信息。然而我们是在运行CUVJN.exe时进行提取的,并不是真正的NanoCore RAT应用。让我们继续看看恶意代码如何运行。

执行Downloaded CUVJN.exe程序

我用.Net调试器dnSpy加载了CUVJN.exe。我们对其主要功能进行跟踪,我们可以看到它从其资源部分加载了大量数据块,然后将它们放在一起并对它们进行解密。

从下面的图中我们看到CUVJN.exe通过“9”资源文件夹中的名称重复加载资源块。 然后将所有数据放在一起形成本地数组变量“array10”。 然后进行解密数据操作以获得新的PE文件。

CUVJN.exe资源部分加载数据。

解密源文件得到PE文件。

解密的PE文件是另一个.Net框架程序。 它的原始名称是“dll.exe”。 此时,程序尚未调用其“主要”功能。 下面是函数“МđыдĐäѦГБуѦ”的代码片段。它通过“invoke”调用“main”函数,其中参数“crap”具有“main”函数。 这就如同直接执行函数“invoke(crap)”。 这意味着被解密的“dll.exe”将在CUVJN.exe进程内运行。

public static void МđыдĐäѦГБуѦ(object fileName, object crap)
    {
        checked
        {
            try
            {
                NewLateBinding.LateCall(crap, null, "invoke", new object[]
                {null, new object[0] }, null, null, null, true);
                int num = 0;
                object instance;
[ ... ]

根据我们的分析,解密的.Net程序是守护进程。 让我们继续从main()函数中进行跟踪分析。 首先,它创建一个Mutex并检查该进程是否已存在,以确保系统只运行该程序的一个进程。 接下来,它通过检测系统是否加载了“snxhk.dll”模块来检查Avast是否在受害者的系统上运行。 如果已经运行,它会一直等到它被卸载。 而Avast是一款AntiVirus软件,“snxhk.dll”是其模块之一。

public static void avast()    {
        try        {
            IntPtr moduleHandle = RunPE.GetModuleHandle("snxhk.dll");
            while (moduleHandle != IntPtr.Zero)            {
                moduleHandle = RunPE.GetModuleHandle("snxhk.dll");
                Thread.Sleep(500);
            }
        }
        catch (Exception ex)
        {        }
    }

然后,该函数执行与CUVJN.exe类似的活动,以从其资源gzip存档中加载数据。 之后执行以下函数解压缩gzip存档并获取PE文件。 这是真正的NanoCore RAT客户端

public static byte[] DEC(byte[] ThrowApples, int VAR12 = 70)
 {
        int num = 0;
        GZipStream gzipStream = new GZipStream(new MemoryStream(ThrowApples), CompressionMode.Decompress, true);
        int num2 = ThrowApples.Length;

        byte[] result;
        try   
        {     
            byte[] array;
            for (;;)  
               {     
                array = (byte[])Utils.CopyArray((Array)array, new byte[num + num2 + 1]);
                int num3 = gzipStream.Read(array, num, num2);
                if (num3 == 0)
                    {     break;     }
                num += num3;
              }
            array = (byte[])Utils.CopyArray((Array)array, new byte[num - 1 + 1]);
            result = array;
         }
 [ … ]

在运行真正的NanoCore客户端之前,程序会执行一些检查操作。 它会检查当前进程的完整路径是否为“%AppData%\Microsoft\Windows\ScreenToGif\netprotocol.exe”。 当然,这里的结果是“假”。 此时我们仍在进程CUVJN.exe中,因此其完整路径为“%temp%\ CUVJN.exe”。 然后它停止上述操作并采取分支将CUVJN.exe文件复制到文件夹“%AppData%\Microsoft\Windows\ScreenToGif\”,然后将其重命名为“netprotocol.exe”。 之后,它使用新文件创建一个新的“Process”对象,并调用“Process”对象的“Start()”函数来运行它。 最后,它调用“ProjectData.EndApp()”来终止CUVJN.exe进程。

下图显示了如何将恶意软件复制到新路径,并进行运行操作,然后退出CUVJN.exe的代码段。

作为“CUVJN.exe”的副本,由于“netprotocol.exe”正在运行,所以我们可以预期它与我们上面回顾的CUVJN.exe完全相同。 他们是:

1.从资源部分加载数据,然后解密它以获取“dll.exe”文件。

2.在“netprotocol.exe”中运行“dll.exe”的主要功能,而不是“CUVJN.exe”。

3.从“dll.exe”的资源中解压缩NanoCore

4.检查当前进程的完整路径是否为“%AppData%\Microsoft\Windows\ScreenToGif\netprotocol.exe”。 这次答案是“正确”。

让我们从中断的位置继续跟踪,其中只有进程的名称已更改为“netprotocol.exe”。

无法结束守护进程

通过我们的分析,“dll.exe”是一个守护进程。 它启动另一个“netprotocol.exe”并将解压缩的NanoCore注入其内存,然后运行。 “dll.exe”的一个任务是让NanoCore在第二个“netprotocol.exe”中作为守护进程保持良好的运行。 它有一个“ProtectMe”类,其功能函数是“ProtectMe.Protect()”,作用是防止进程被杀。 当我第一次在我的测试环境中测试这个恶意软件时,我很惊讶我根本无法杀死进程“netprotocol.exe”。 它既不是系统服务,也不具有比我有更高的权限。 在我做了一些研究之后,我了解了这个类的功能,如下所示。

[DllImport("ntdll.dll")]

private static extern IntPtr ZwSetInformationProcess(IntPtr _1, IntPtr _2, IntPtr _3, IntPtr _4);

public static void Protect()
{
    ProtectMe.ZwSetInformationProcess(ProtectMe.GetCurrentProcess(), (IntPtr)33L, (IntPtr)ProtectMe.VarPtr(-2147421911), (IntPtr)4L);

事实证明它使用来自NTDLL.dll的函数ZwSetInformationProcess。 这个函数可以修改进程的状态,这就是我无法杀死进程的原因。 下图是当我尝试通过命令“taskkill”杀死“netprotocol.exe”时的屏幕截图,守护进程“netprotocol.exe”(PID 3428)无法被杀死。

此处有一个名为“RunPE.doIt()”的函数用于运行和保护NanoCore RAT客户端。 它调用API CreateProcessA来启动一个新的“netprotocol.exe”应用,之后暂停它。 接下来,它在新的“netprotocol.exe”中分配内存,并使用API WriteProcessMemory将整个NanoCore放入新分配的内存中。 最后,它将线程上下文的入口点修改为NanoCore的入口点,并通过调用API ResumeThread在第二个“netprotocol.exe”内运行NanoCore

NanoCore RAT客户端

NanoCore是2013年首次发现的RAT(远程访问特洛伊木马)。它能够在受害者的机器上执行许多恶意操作,例如修改注册表、进程控制、提权操作、文件传输、键盘记录、密码窃取等。

NanoCore是一个.Net框架程序。 它的代码被完全混淆。入下图所示。

一旦它在第二个“netprotocol.exe”中运行,它会在“%AppData%”文件夹下创建一个新的主文件夹。 新文件夹在我的测试环境中命名为“AA401429-5100-45C4-9496-689224150CC3”。 它还会创建许多子文件夹,例如“DHCP Manager”和“Logs”,然后将“netprotocol.exe”复制到“DHCP Manager”并将其重命名为“dhcpmgr.exe”。 然后,它在Windows注册表中创建一个自动运行项,其值为“DHCP Manager”,其数据内容是“dhcpmgr.exe”的完整路径。 下图显示了详细信息。

“Logs”子文件夹包含从受害者系统收集的不同子文件夹中的数据,其名称是不同登录用户的当前登录用户名。

为了方便演示,我将展示如何输入消息。 我打开了Chrome浏览器并访问了一个网上银行网站,我在登录页面上输入了测试帐号和测试密码。 我们可以发现我输入的所有内容都被NanoCore客户端获取,并保存在“Logs”子文件夹相关登录用户的文件中。 文件名伪装成Windows更新日志文件。

结论

恶意Word文档已被检测为“VBA/Agent.1B7E!tr.dldr”,并且FortiGuard AntiVirus服务已将“CUVJN.exe”检测为“MSIL/Injector.REB!tr”

恶意软件下载的URL已被FortiGuard WebFilter服务评为“恶意网站”。

如何删除此恶意软件

1> 从系统注册表“HKCU\Software\Microsoft\Windows\CurrentVersion\Run”中删除值“DHCP Manager”(取决于Windows系统版本)并保存数据供以后使用,例如“%AppData%\ [随机字符串]\DHCP Manager\dhcpmgr.exe”

2> 重新启动Windows系统。

3> 删除“%AppData%\Microsoft\Windows\ScreenToGif”文件夹。

4> 删除在步骤1中保存的文件夹。

IOC

URL:

hxxp://www.wwpdubai.com/wp-content/plugins/jav/inv.exe

Sample SHA256:

eml_-_PO20180921.doc

FFEE1A33C084360B24C5B987B80887A2D77248224DBD6A0B6574FF9CEF74BDD6

CUVJN.exe / icce.exe / dhcpmgr.exe / netprotocol.exe

32BB5F767FE7788BCA4DD07F89F145D70EC3F58E2581CAB9CA6182D3FCE9BC86

文章为翻译稿件。原文:https://www.fortinet.com/blog/threat-research/-net-rat-malware-being-spread-by-ms-word-documents.html

源链接

Hacking more

...