吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 3897|回复: 5

[转载] 【转帖】深入分析恶意软件 Emotet 的最新变种

[复制链接]
默小白 发表于 2019-2-28 09:29
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!

转自:https://xz.aliyun.com/t/4176

文章翻译自:https://www.fortinet.com/blog/threat-research/analysis-of-a-fresh-variant-of-the-emotet-malware.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+fortinet%2Fblogs+%28Fortinet+All+Blogs%29

Emotet 并不是一个新的恶意软件家族。事实上,它已经存在好几年了。我们在 2017 年捕获了一个传播 Emotet 的 JS 文件,我对其进行了分析,并发表了两篇关于它的研究(Part1, Part2)。

然而,就在最近, FortiGuard 实验室捕获了一种新的 Emotet 变种。这一次,它被嵌入到 Microsoft Word 文档中。我对它进行了详细分析,在这个博客中,我将向您展示它如何在受害者的机器上运行的。

Word 文件样本

img

图1 打开文件时会有安全提示

这个受感染的文档名字为 PAY09735746167553.doc,它的宏中包含了一些恶意 VBA 代码。图 1 是它在打开时显示的内容。一旦用户点击了 Enable Content 按钮,文件中的恶意的 VBA 代码就会自动运行。经过一段时间后,它会生成并执行一个很大的 PowerShell 文件。生成的 PowerShell 代码会从几个动态生成的 url 下载真正的 Emotet 文件,如图2所示。

img

图2 下载并执行 Emotet 的 PowerShell 代码

Emotet 文件的下载与拷贝

下载的文件就是 Emotet 恶意软件。它的文件名是随机字符串,位于%temp%文件夹中。当它运行时,它会判断自身的文件路径,如果它不在 %LocalAppData%\culturesource\ 中,则会将原来的 exe 文件从 %temp% 文件夹移动到 %LocalAppData%\culturesource 路径下(如果文件夹还不存在,它甚至会创建文件夹),并将其重命名为 culturesource.exe。而且,单词 culturesource 是从其内存中解密出来的常量字符串。

下面是相关的 ASM 代码片段。它调用了 SHFileOperationW 来执行文件重定位,并且在 Timer 回调函数中被调用,稍后我将详细讨论这个函数。

[.....] 002FFB9A   loc_2FFB9A:                             ; CODE XREF: sub_311D78+1Fj 002FFB9A   call  ds:memset 002FFBA0   call  sub_2F1250      ;;;CreateDirectoryW 002FFBA5   push  1Eh 002FFBA7   lea   eax, [ebp-20h] 002FFBAA   push  edi 002FFBAB   push  eax 002FFBAC   call  ds:memset 002FFBB2   add   esp, 18h 002FFBB5   mov   dword ptr [ebp-1Ch], 1  ;; FO_MOVE 002FFBBC   lea   eax, [ebp-20h]         ; SHFILEOPSTRUCTA structure 002FFBBF   mov   dword ptr [ebp-18h], offset unk_3083F8 ;; current file path in %temp% folder. 002FFBC6   mov   esi, 0E14h 002FFBCB   mov   dword ptr [ebp-14h], offset word_307EE0 ;  %LocalAppData%\culturesource\culturesource.exe. 002FFBD2   mov   [ebp-10h], si 002FFBD6   push  eax 002FFBD7   call  ds:SHFileOperationW 002FFBDD   test  eax, eax 002FFBDF   jnz   short loc_2FFBEA 002FFBE1   cmp   [ebp-0Eh], edi 002FFBE4   jz    loc_2FFCA0 [.....]

最后,它调用 CreateProcessW 来运行 culturesource.exe 文件,然后退出当前进程。

Emotet 中的抗分析技术

接下来,Emotet 启动了第二个 culturesource.exe,用来保存和执行 Emotet 主要功能。一旦第二个 culturesource.exe 正常启动,第一个进程将退出。然后,Emotet 会动态地将代码和数据释放到许多内存块中,这些内存块随后会执行 Emotet 的后续任务。

大多数的函数都被分成了多个部分。下面我选其中一个来描述它是如何使用这个技巧的。图 3 显示了一个普通的函数被分割成七个部分,这些部分都使用 jmp 指令进行连接,从而增加了代码分析的难度。

img

图3 一个函数被分成了七个部分

所有字符串都经过加密,然后在使用它们之前进行解密。所有导入的API也都是加密的,并且在调用之前进行解密。图 4 描述了一个将字符串 "unk_3031F0" 解密成字符串 "user32.dll" 的过程。它在解密完成后,Emotet 会调用 LoadLibraryW 来加载 "user32.dll"。然后使用解密后的API信息在模块 "user32.dll" 中找到导出的API。

img

图4 解密字符串并从 user32.dll 加载API

Emotet 的启动器-Timer 函数

此外,Emotet 还使用 Windows 的 Timer 事件来执行其代码。在我之前的两篇分析中,它使用 WindowProc 函数捕获 Timer 消息并执行恶意行为。然而,这个版本有点不同。在这里,它直接使用了 Timer 的回调函数。当它调用 SetTimer 时,它会设置间隔时间为 1000。这意味着回调函数会每隔 1000 执行一次。下面是这个回调函数的伪代码:

```
void stdcall Timer_fun(int a1, int a2, int a3, int a4)
{
unsigned int v4; // esi@6
int v5; // eax@6
unsigned int v6; // esi@15
int v7; // eax@15
int v8; // esi@16
int v9; // eax@16
if ( qword_307C94 <= (unsigned
int64)(unsigned int)GetTickCount() )
{
switch ( HIDWORD(qword_307C94) )
{
case 1:
HIDWORD(qword_307C94) = 0;
if ( !sub_2F6BA0() || !sub_2F7170() || check_if_process_is_in_correct_path() )
goto LABEL_7;
v4 = GetTickCount() % 0xBB8u;
v5 = GetTickCount();
HIDWORD(qword_307C94) = 2;
LODWORD(qword_307C94) = v4 + v5 + 3000;
break;
case 2:
HIDWORD(qword_307C94) = 0;
if ( sub_2F8300()
&& sub_2F8430()
&& sub_2F8B20()
&& sub_2F95B0()
&& sub_2FA320()
&& sub_2FB750()
&& sub_2F68D0() )
{
dword_307CC4 = (int)&unk_3080E8;
dword_307CC8 = (int)&unk_303430;
dword_307CCC = 106;
v6 = GetTickCount() % 0xBB8u;
v7 = GetTickCount();
HIDWORD(qword_307C94) = 3;
LODWORD(qword_307C94) = v6 + v7 + 3000;
}
else
{

LABEL_7:
HIDWORD(qword_307C94) = 4;
}
break;
case 3:
HIDWORD(qword_307C94) = 0;
v8 = GetTickCount();
v9 = sub_2FCB20();
HIDWORD(qword_307C94) = 3;
LODWORD(qword_307C94) = v9 + v8;
break;
case 4:
SetEvent(dword_304C0C);
break;
default:
return;
}
}
}
```

Case 1

在 Case 1 中,它的一个功能将自身的文件移动到指定位置。此外,它还通过调用 GetComputerNameW 和 GetVolumeInformationW 来收集计算机名称、文件系统和卷信息。它将这些数据一起保存在一个全局变量中,该变量在 C&C 服务器中用作受害者的ID。然后,Emotet计算EXE文件的CRC32,并将其保存在另一个全局变量中,该变量在将第一个包发送到C&C服务器时使用。

Case 2

Case 2功能是通过 OpenSCManagerW 打开系统的服务管理器(Service Control Manager), 并设置一个名为 culturesource 的 Windows 系统服务,用于在Windows启动时运行Emotet。
与此同时,“culturesource.exe”被移动到文件夹“%windir%\system32”。图 5显示了已安装的服务“culturesource”的屏幕截图,它的启动类型是“Automatic”。

img

图5 culturesource 服务截图

Case 3

Case 3 的功能是初始化 DLL 模块并解密 Emotet 会用到的所有 API 函数,包括"urlmon.dll", "userenv.dll", "wininet.dll"等等。

Case 4

Case 4 是用来设置程序主要功能回调的分支。它收集受害者的系统数据,并将这些数据发送到其C&C服务器,以及执行从C&C服务器接收的指令。

译者注:这里的case 1234分支的功能与原文不同,译者认为原文出现了错误,如果大家感兴趣,可以再去原文比较一下

C&C 服务器通信

Emotet 会调用一些 API 函数来收集信息。比如,它调用 RtlGetVersion 来 Windows 版本信息,调用 GetNativeSystemInfo 来获取系统和 CPU 的信息。此外,他还会在 PEB 偏移 0x1D4 的位置选择一个 DWORD,用来作为其 Session ID。

Emotet 通过调用 CreateToolhelp32Snapshot、Process32FirstW 和 Process32NextW 持续收集正在运行的进程的名称。然后,Emotet 将所有收集到的数据放到一个数据结构中,对整个数据结构进行加密。图 6显示了 Emote 如何将这些数据拷贝到一个数据结构中。红色矩形中的值是用来表示后面数据的类型,带有蓝色下划线的值表示后面数据的长度,使用了 UTF-8 编码。

红色矩形中: 12 后面的字符串是计算机名。 18 后面的数据是本机系统信息。 20 后面的字节是生成自 PEB 的 Session ID。 2D 后面的 DWORD 值是 Emotet 文件的CRC32值。 32 后面的字符串是所收集的进程列表,

我在之前的博客中提到过,它的C&C服务器可以检查受害者的机器上是否运行着分析工具(如wireshark、调试器等)。如果检测到,它将不会用明文进行回复。

img

图6 culturesource 服务截图

数据加密后,它使用Base64对其进行编码。此外,它还将Base64代码伪装成HTTP报头的cookie值。在图7中可以看到Base64代码。

img

图7 culturesource 服务截图

在图 7 中,同样可以看到 C&C 服务器返回了一些数据。当受害者的机器第一次从C&C服务器接收数据时,它在系统注册表的 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 子键下创建一个名为 cultruesource 的自动运行条目。现在他有两种启动 Emotet 的方法了,即系统服务和系统注册表中的自动运行。在图 8 和图 9 中,您可以看到关于向注册中添加自动运行条目的更多信息。

img

图8 添加新的自动运行条目

img

图9 注册表编辑器中添加的自动运行条目 culturesource 的屏幕截图

通过解密接收到的数据,我得到了一个PE文件,如图10所示。通过分析,我发现解密的 PE 文件是另一个 Emotet。它只是用来升级自己的。

img

图 10 从 C&C 服务器解密的数据

到目前为止,这是我对这个新变种的分析。我将继续关注这个Emotet活动,以获得更多的功能和变化。和以前的版本一样,C&C 服务器的 IP 列表被硬编码到它的内存中,并保存在一个全局变量中。每个 IP 和端口对使用 8 字节,总共有 62 个 C&C 服务器。以下是硬编码在这个版本的 IP 和端口列表:

71.91.161.118 : 21 70.164.196.211 : 995 175.101.79.120 : 80 187.233.136.39 : 143 5.107.250.192 : 995 50.224.156.190 : 8080 5.107.161.71 : 993 186.179.243.7 : 995 71.240.202.13 : 443 190.215.53.85 : 80 133.242.164.31 : 7080 115.71.233.127 : 443 69.136.227.134 : 22 216.49.114.172 : 443 153.121.36.202 : 7080 181.119.30.27 : 995 70.164.196.211 : 20 98.157.215.153 : 80 62.75.187.192 : 8080 189.234.165.149 : 8080 154.72.75.82 : 20 45.123.3.54 : 443 217.13.106.160 : 7080 75.99.13.124 : 7080 198.74.58.47 : 443 69.195.223.154 : 7080 172.114.175.156 : 8080 73.124.73.90 : 20 74.80.16.10 : 80 24.11.67.222 : 443 181.143.53.227 : 21 173.76.44.152 : 20 208.78.100.202 : 8080 47.44.164.107 : 993 45.63.17.206 : 8080 50.31.0.160 : 8080 62.75.191.231 : 8080 98.142.208.27 : 443 78.187.172.138 : 7080 67.205.149.117 : 443 98.186.90.192 : 443 5.230.147.179 : 8080 50.240.162.242 : 995 94.76.200.114 : 8080 178.62.37.188 : 443 83.222.124.62 : 8080 70.184.83.93 : 20 173.255.196.209 : 8080 208.107.230.235 : 20 186.179.80.102 : 443 72.95.118.97 : 21 162.250.19.59 : 80 134.129.126.86 : 443 69.198.17.7 : 8080 8.17.46.42 : 53 70.90.183.249 : 7080 47.149.54.132 : 8080 200.116.160.31 : 80 175.143.84.108 : 50000 178.254.31.162 : 8080 175.110.104.150 : 20 211.115.111.19 : 443

解决方案:

现在,FortiGuard 反病毒服务已经将此恶意 Word 文档标记为 “VBA/Agent.AFD!tr.dldr”,原始的 Emotet 文件也已检测为“W32/Kryptik.GBUH!tr”。我们还发布了一个名为 Emotet.Botnet 的 IPS 特征,用来检测 C&C 服务器和受害者之间的流量。下载 Emotet 的 URL 也已经被FortiGuard WebFilter评为恶意网站。

IoC

URL:

"hxxp://muathangnhom.com/6DOpkmOL9_yfO" "hxxp://gmcvietnam.vn/abMbIaTzHSDkAq" "hxxp://hugoclub.sk/yCq4xkYzeqAJK_v" "hxxp://foreprojects.webedge.com.ng/Lc3UYXyQixr_Dp" "hxxp://evonline.liceoriosdechile.com/NpDgofVhpankbq_I8AaJbzQj"

Sample SHA256:

```
PAY09735746167553.doc:

1194bab2c4a8e63e59ef01220ebe8e4d3511b12a16da30e713c2fbee6c2cb520
```

Downloaded Emotet/Original Exe file:

7C5CDC5B738F5D7B40140F2CC0A73DB61845B45CBC2A297BEE2D950657CAB658

免费评分

参与人数 3吾爱币 +2 热心值 +2 收起 理由
世不待 + 1 谢谢@Thanks!
Yancy-Lan + 1 感谢告知
willJ + 1 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

GJ15034686235 发表于 2019-2-28 16:06
最近刚好分析了这个,有个问题,在以get方式发出cookie请求后,服务器全部没有返回信息,后续怎么做
Yancy-Lan 发表于 2019-3-2 21:22
tfrist 发表于 2019-3-13 02:44
GJ15034686235 发表于 2019-2-28 16:06
最近刚好分析了这个,有个问题,在以get方式发出cookie请求后,服务器全部没有返回信息,后续怎么做

服务端会检查你的运行的进程 如果打开了 一些分析软件 比如Ollydbg wireshark 等等分析类的软件 服务端就不返回。  另外一个情况是你的包是不是有可能被拦截了?比如你的网络出口的地方有防火墙什么的
世不待 发表于 2019-3-15 19:56
新入小白,暂时看不懂,先收藏,多谢楼主分享
leleboyme 发表于 2019-3-17 17:52
谢谢楼主分享资源
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2019-7-20 16:00

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表