网络安全公司FireEye于上周发表的一篇博文中指出,其安全团队在今年7月份发现并阻止了一场由中国×××组织APT10(又称“Menupass”)发起的网络钓鱼活动,目标瞄准了日本的媒体行业。

FireEye表示,其安全团队针对APT10的追踪开始于2009年,该组织在之前就曾有针对日本政府机构以及企业实施×××的历史。在此次×××活动中,由该组织发送的鱼叉式网络钓鱼电子邮件最终会导致UPPERCUT后门(又称“ANEL”)的安装。

×××链

如上所述,×××开始于鱼叉式网络钓鱼电子邮件,其附件中的Microsoft Word文档内嵌了恶意VBA宏。从诱饵文档的命名来看,它们几乎都与海事、外交或者朝鲜问题有关。这些诱饵文档包括:

  • 自民党海洋総合戦略小委員会が政府に提言申し入れ.doc

  • グテマラ大使講演会案内状.doc

  • 米国接近に揺れる北朝鮮内部.doc

诱饵文档设置有密码(在电子邮件的正文中提供),可能是为了绕过安全检测。在输入密码之后,诱饵文档将发出启用宏的请求,但我们无从得知文档的具体内容,因为它显示为乱码,如下图所示。

接下来,恶意宏将执行以下操作:

1、将三个PEM文件padre1.txt、padre2.txt和padre3.txt释放到受害者的%TEMP%文件夹,然后将它们从%TEMP%复制到%AllUserProfile%文件夹。

2、滥用certutil.exe,使用以下命令对已释放的文件进行解码(certutil.exe是一个合法的Windows内置命令行程序,用于管理Windows中的证书)。所使用的命令包括:

  • C:\Windows\System32\cmd.exe" /c certutil -decode C:\ProgramData\padre1.txt C:\ProgramData\\GUP.txt

  • C:\Windows\System32\cmd.exe" /c certutil -decode C:\ProgramData\padre2.txt C:\ProgramData\\libcurl.txt

  • C:\Windows\System32\cmd.exe" /c certutil -decode C:\ProgramData\padre3.txt C:\ProgramData\\3F2E3AB9

3、滥用esentutil.exe,使用以下命令释放其他的一些文件(esentutil.exe也是Windows中预安装的一个合法程序)。所使用的命令包括:

  • C:\Windows\System32\esentutl.exe" /y C:\ProgramData\\GUP.txt /d C:\ProgramData\GUP.exe /o

  • C:\Windows\System32\esentutl.exe" /y C:\ProgramData\\libcurl.txt /d C:\ProgramData\libcurl.dll /o

从这两条命令可以看出,被释放的文件包括GUP.exe和libcurl.dll。实际上,这里还有另一个文件——3F2E3AB9。

  • GUP.exe:GUP是Notepad ++用于软件更新的开源二进制文件,在此次活动中使用的是由Notepad ++进行数字签名的4.1版本,如下图所示:

  • libcurl.dll:恶意加载程序DLL

  • 3F2E3AB9:加密的shellcode

4、运行合法的可执行文件GUP.exe,这涉及到:

  • 侧载恶意DLL(libcurl.dll),用于解密并运行位于同一文件夹中的shellcode(3F2E3AB9)。

  • Shellcode会对另一个DLL进行解码和解压缩,即UPPERCUT后门的一个变种。在解码DLL之前,shellcode会使用基于ntdll_NtSetInformationThread的反调试技术,该技术导致线程与调试器分离,如下图所示。然后将DLL加载到内存中,并调用随机命名的导出函数。

5、使用Windows esentutl.exe删除最初释放的.txt文件,并将文档文本更改为嵌入消息。

完整的×××链如下图所示:

UPPERCUT后门的演变

下图是UPPERCUT的更新时间表,展示了加载器的PE编译时间和dropper的创建时间(Word文档)。由于时间戳被覆盖并用“0”填充,因此这张图不包括5.2.x版本的创建时间。

相比早期版本的第一个不同之处在于,较新版本导出函数的命名具有随机性,如5.3.2版本的导出函数为“l7MF25T96n45qOGWX”,而在5.4.1版本的导出函数为“hJvTJcdAU3mNkuvGGq7L”和“WcuH”。

最新的UPPERCUT变种还包含另一个新特性——如果恶意软件无法从命令和控制(C2)服务器接收HTTP响应,则会在Cookie标头中发送错误代码。错误代码是GetLastError函数返回的值,并在下一个beacon中发送。这可能是为了帮助×××者在后门无法接收响应时了解问题的所在。

此外,早期版本的UPPERCUT在与C2通信时使用了硬编码字符串“this is the encrypt key”,用于Blowfish加密。但是在最新版本中,密钥对于每一个C2地址都有一个唯一的硬编码,并使用C2计算的MD5散列来确定使用哪一个密钥。

总结

从APT10的×××历史记录来看,虽然该组织在×××目标的地位位置(如日本)和行业选择方面保持固定不变,但这并不体现在他们所使用的恶意软件方面。相反,该组织一直在持续不断地更新其恶意软件,并添加新的特性和功能。就拿新的UPPERCUT变种来说,其初始化Blowfish加密密钥的方式就发生了重大改变,使得安全研究人员对它的网络通信更加难以检测和解密。