作者:启明星辰ADLab

一、分析简述

《蜻蜓二代“Dragonfly2.0”恶意组件分析报告(上篇)》中,启明星辰ADLab详细阐述了蜻蜓二代的两个组件 Backdoor.Dorshel 和 Trojan.Karagany.B 相关的技术细节,本篇将对剩余的组件进行详细分析。其中组件Backdoor.Goodor 和 Screenutil 目前未能找到样本,但根据目前掌握的信息可知,组件 Backdoor.Goodor 为一款常驻组件,实现了远程组件的下载执行,可能属于蜻蜓二代攻击的第二阶段组件。而组件 Screenutil 为一款屏幕工具组件,主要用于实现桌面截图功能,此项功能在蜻蜓一代中同样也存在,该组件属于第三阶段的信息窃取组件。本文将对剩余的4个核心组件进行详细的剖析。

本次公开的8个组件中一些组件的功能有所重叠,由于蜻蜓黑客组织的攻击手段多样,所以第一个阶段会因为所依赖的攻击方式不同而采用了不同的攻击组件,比如组件 Trojan.Karagany.B 伪装成为 Flash 更新,适合作为第一阶段的后门投放,而同样作为第一阶段被投放的 Dorshel 组件却可能是通过邮件或者水坑式攻击的方式进入受害主机。根据目前掌握的情况,我们列出蜻蜓二代各个组件的基本功能及其可能的投放阶段,如下表:

上表中第一阶段投放表示黑客通过各种攻击手段向受害者投放的第一个可执行组件,主要用于下载第二阶段的组件执行以及执行一些必要操作;而第二阶段的组件是由第一阶段的组件下载执行的,主要以收集情报为主;第三阶段可能在已有情报的基础上对目标下放特定组件,一则可能用于进一步的信息窃取,二则用于扫描受害者主机的环境,这个阶段的样本并不完整,比如缺少 OPC/SCADA 扫描组件等。

二、蜻蜓二代技术变化

从以上公开的组件分析来看,蜻蜓二代相比蜻蜓一代而言通信更加难以监测,蜻蜓一代几乎都采用了明文的 HTTP 通信,而二代组件与C&C的通信(包含信息收集、命令交互、文件回传等操作)普遍采用了 HTTPS 的方式来进行加密传输,无法通过 IDS 等流量监测设备进行有效的监测。另外组件进行远程请求的 URL 也有所改进,蜻蜓一代的 URL 都包含有明确含义的.php(如:“log.php”、“testlog.php”、“source.php”),而蜻蜓二代更具有迷惑性,如采用随机名且无后缀的URL(如:/A56WY),以及采用后缀名.gif(如:getimage/830411.gif)。蜻蜓二代的 Loader 模块开始采用实时下载纯加密 Shellcode 代码执行的方式来执行,并不会落地到磁盘,而蜻蜓一代的 Loader 模块则是下载完整PE文件执行,并且会落地到磁盘。另外,蜻蜓二代还将一些隐蔽性很高的技术应用于其攻击组件之中,如预初始化劫持技术(Backdoor.Dorshel)、模板注入技术(Trojan.Phisherly)等。

蜻蜓二代在收集信息及窃密时,采用组件 Hacktool.Credrix 窃取更为敏感的信息,除了窃取各类浏览器相关登录凭证外,还开始获取系统账户的登录凭证、远程桌面登录凭证以及邮件客户端的登录凭证。

三、蜻蜓二代剩余组件分析

1. 组件 Trojan.Heriplor

Trojan.Heriplor 为该黑客组织专用后门,第一代和第二代都有出现,用于下载恶意组件执行。目前我们所能得到的样本是一个64位 dll 文件,该模块的主要功能是从C&C端下载 Shellcode 并且执行。

该组件首先初始化要调用的系统 API 函数,随后通过 Socket 连接远程C&C服务器121.200.62.194,连接端口为8443。连接成功后组件向C&C端发送8个字节数据。

接下来开始下载shellcode执行。通信时,组件先从C&C接收4个字节的数据作为下一次要接收数据的长度。组件以接收的长度作为内存大小分配一段可读可写可执行内存,用于接收shellcode执行,如下图:

2. 组件 Trojan.Listrix

Trojan.Listrix 组件主要用于收集受害者主机信息,根据赛门铁克描述的信息,该模块具有收集计算机名称、用户名称、文件列表、进程列表、操作系统版本等信息。

该组件通过遍历感染主机的所有驱动器查找符合如下文件后缀的文件:*.rtf,*.zip,*.pfx,*.cer,*.crt,*.pem,*.key,*.cfg,*.conf,*.pst,*.rar,*.doc,*.docx,*.xls,*.xlsx,*pass*.*,*.pdf,*.pub,*.ppk,Volume*.*,然后将这些文件的文件路径、大小、创建时间等信息写入到临时文件目录下临时文件中,接着将其拷贝到AppData目录下的“\Update\Temp\ufiles.txt”。最后恶意代码通过cmd命令进行自删除,并退出。

在临时文件目录创建临时文件:

遍历硬盘,查找符合规则的文件:

将获取到的符合规则的文件信息写入到临时文件:

通过cmd命令执行删除自身文件:

3. 组件Trojan.Phisherly

该组件是一个 DOCX 文档,其利用了 Office 对 DOCX 中指定的关联资源解析漏洞来窃取用户的共享凭证。

通过我们对该组件的分析发现,该组件文件中的 Relationship 标签被指定为一个远程的共享文件。当该文档被打开后,Office进程会利用 SMB 协议来访问该共享文件。

在 SMB 通信中,当客户端访问远程服务器时,客户端会先向服务器发送一个“Negotiate Protocol Request”请求,这个请求中包含了客户端所支持的所有 SMB 版本信息,服务器收到请求后,选择一个它支持的最新版本,在通过“Negotiate Protocol Response”回复给客户端。Negotiation 结束之后,客户端请求和服务器建立一个会话,在客户端发送的 Session Setup Request 里,包含了身份验证请求。服务器回复 Session Setup Response,包含了验证的结果。Session Setup 通过后,客户端就成功的连上了服务器,客户端发送 Tree Connect Request 来访问具体的共享资源。

如果远程服务器被设置成诱饵服务器,那边受害者主机会尝试将自身的凭证发送给诱饵服务器做验证。此时诱饵服务器便可以获取到该凭证并且收集起来供黑客使用。

该方法此前称为“模板注入”技术,实际上并不准确,该技术实际上和模板并没有关系,只是当时发现的样本中刚好利用了模板文件作为远程共享文件。如下图:

4. 组件 Hacktool.Credrix

组件 Hacktool.Credrix 同样也是用来窃取用户凭证,该组件可以接收一个参数用来指定保存凭证信息的文件路径,如果不提供参数则将凭证信息保存到C:\\Users\\Public\\Log.txt文件。

窃取的信息包括系统凭证信息、Google Chrome、Mozilla Firefox、Internet Explorer、Opera浏览器中保存的凭证信息,FTP客户端 FileZilla 中保存的凭证信息,邮箱客户端 Outlook、Thunderbird 保存的凭证信息,远程终端的凭证信息等。

其中窃取系统凭证信息的代码采用了开源项目 mimikatz 的代码。相关凭证信息及实现方法如下表所示:

1)提取 Chrome 凭证信息

Chrome 浏览器保存用户登录信息的数据库文件为%AppData%\Local\Google\Chrome\User Data\Default\ Login Data,该数据库是 sqlite3 的数据库,数据库中用于存储用户名密码的表为 logins。logins 表结构定义如下:

从该表中读取的内容是加密的,通过 CryptUnprotechData 函数对其进行解密便可以获取到明文数据。

2)提取 Mozilla 凭证信息

组件首先从注册表获取 Firefox 的安装目录和安装版本。

接着利用安装目录中文件 nss3.dll 来解密数据库 signons.sqlite 中被加密的内容。

通过SQL语句获取到主机名、被加密的用户名及密码。

调用 nss3.dll 中的导出函数对 sqlite 查询出的用户名和密码进行解密。

3)Internet Explorer 凭证信息获取

该组件通过多种方式来提取IE浏览器保存的登录凭证(不同IE内核的提取方法不同),具体如下:

通过pstorec.dll的PStoreCreateInstance函数来提取凭证信息。

通过vautcli.dll组件来提取凭证信息。

通过guid “abe2869f-9b47-4cd9-a358-c22904dba7f7”解密保存的IE密码。

通过IE的自动完成密码机制来获取明文的用户凭证。

4)FileZilla 凭证获取

FileZilla 凭证获取较为简单,其登录凭证信息是用明文存储的。因此只需要定位到相应的配置文件即可找到用户的登录名和密码,如下图:

5)Outlook 凭证获取

该组件通过枚举注册表 Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles 下的所有子健,读取键名为下表中的数据比如password进行解密还原出明文的密码。

6)Thunderbird凭证获取

同样,Thunderbird 的凭证数据也是存储在数据库文件中%AppData%\\Thunderbird\\Profiles,然后通过 nss3.dll 的导出函数对储存文件的密码进行解密。

7)系统凭证提取

针对不同系统使用了两种获取系统密码的方法,NT6 以上内核使用 bcrypt.dll 中的导出函数进行解密,NT6以下则使用 lassrv.dll 进行解密。

通过 lsasrv 的初始化函数发现了一段调试日志信息,通过该信息可以确定该段代码采用了开源项目 mimikatz 的代码。

8)RDP 凭证获取

组件首先获取 lsass.exe 的进程ID,然后遍历目录%AppData%\\Local\\Microsoft\\Credentials下存储的所有RDP凭证文件,凭证文件只有进程 lsass 才具有解密能力。所以,程序会注入 shellcode 到进程 lsass.exe,对加密的凭证文件进行解密。以下是远程注入部分的代码流程:

四、总结

从公开信息以及当前的分析可以看出,蜻蜓组织是一个具有多种攻击能力的黑客组织,其能够通过窃取受害主机凭证来访问目标网络,并且还有广泛的定制化的黑客工具集来对目标网络进行攻击。从蜻蜓一代到二代的发展来看,该黑客组织的对抗手段已经运用得越来越多(如 https 加密通信、实时的加密 shellcode 下载执行、预初始化代码劫持、模板注入等),并且也开始频繁的运用合法的系统管理工具如 PowerShell、PsExec 和 Bitsadmin 来进行辅助实现攻击,这在一定程度上加大了威胁发现的难度。虽然该黑客组织在攻击过程中没有使用过0day,但是其长期对能源部门的情报收集,表明该组织是一个高度专注的黑客组织。从各种攻击案例来看,该组织的目的并非为谋取经济利益,更有可能是为了达到某种政治目的。


启明星辰积极防御实验室(ADLab)

ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员。截止目前,ADLab通过CVE发布Windows、Linux、Unix等操作系统安全或软件漏洞近300个,持续保持亚洲领先并确立了其在国际网络安全领域的核心地位。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/395/