蜻蜓二代“Dragonfly2.0”恶意组件分析报告(上篇)

2017-09-11 21:49:06 启明星辰 ADLab

更多资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)


分析背景

2017年9月6日,安全公司赛门铁克发布消息称,著名俄罗斯黑客组织“Dragonfly”近期活动更加频繁。“Dragonfly”是一个专门以能源电力机构、ICS设备制造厂商、石油管道运营商等为攻击目标的黑客组织,该黑客组织曾经攻击过法国、德国、意大利、波兰、土耳其、美国等欧美国家的能源公司。该黑客组织自2010年开始活跃,直到2014年被该公司披露后,一度停止了攻击活动。最近发现的“Dragonfly”从攻击目的和恶意代码技术上都有所提升,被称为“蜻蜓二代”或者“Dragonfly2.0”。目前的证据表明,实际上蜻蜓二代在2015年12月份就已经有了活动迹象。

蜻蜓二代恶意代码组件描述

蜻蜓二代“Dragonfly2.0”和一代一样,使用多种攻击方式(恶意电子邮件、水坑攻击和合法软件捆绑)对目标进行渗透并植入恶意代码。

蜻蜓二代攻击组件简单描述如下:

Backdoor.Dorshel组件:采用逃避框架Sheller处理过的恶意代码,实现其他恶意组件的下载执行;

Trojan.Karagany.B组件:为Trojan.Karagany(蜻蜓一代中出现)的升级版,原始文件名为“install_flash_player.exe”,其伪装成为Flash更新,黑客组织可能通过社交网络或者水坑式攻击提供Flash更新链接,诱使受害者点击运行,该组件能够感染系统并常驻于系统,并且还具有窃密文件回传、远程执行任意命令、下载扩展组件执行等功能;

Trojan.Heriplor组件:为该黑客组织专用后门,第一代和第二代都有出现,用于下载恶意组件执行;

Trojan.Listrix组件:主要用于收集受害者主机信息,其中包含计算机名称、用户名称、文件列表、进程列表、操作系统版本、CPU信息等;

Hacktool.Credrix组件:可用于窃取用户凭证及其他敏感信息;

Backdoor.Goodor组件:常驻于受害者主机,以实现额外组件的下载和执行;

Trojan.Phisherly组件:会以邮件的形式进行传播,主要用于窃取用户凭证。

本文先对Backdoor.Dorshel和Trojan.Karagany.B组件进行详细的技术剖析,剩下的组件启明星辰ADLab将会在后续的篇幅中进行分析阐述。

Dorshel和Karagany.B组件详细分析

1. 组件Backdoor.Dorshel

该组件通过Sheller逃避框架进行了代码处理,在一定程度能够躲避安全软件的监控。该框架将真实恶意代码执行点切入到预执行代码中执行,而在真实的入口函数中实现一些无害代码,比如创建窗口程序执行正常合法行为。

我们通过分析发现,恶意代码的运行时库初始化代码被做了劫持,被劫持的函数为多线程初始化函数_mtinit中的__calloc_crt函数。如下图中所示,正常CRT代码应该调用__calloc_crt函数。

因此,在恶意代码的WinMain函数运行之前,恶意代码会首先得到执行,创建线程执行连接黑客C&C服务器,下载恶意组件执行。线程启动完成后,该段劫持代码执行流程会通过PUSH-RET的方式跳转0x4036b6的__calloc_crt函数,最后跳回到原始的多线程初始化代码中执行,直到WinMain函数得到执行。

恶意线程通过PEB动态初始化要调用的系统API函数,接着连接C&C服务器103.41.177.69发送HTTPS GET请求,请求链接为https://103.41.177.69/A56WY。

如果连接失败,恶意代码会进行10次重连(该C&C服务器当前已经不能连接);连接成功,则会提取有效载荷并加载到内存中运行。

2. 组件Trojan.Karagany.B

该组件伪装成为Flash更新文件,黑客组织可能通过社交网络或者水坑式攻击提供Flash更新链接,诱使受害者点击运行,该组件以感染系统、常驻系统以及下载扩展组件执行为目的。此外该组件还会用于目标主机信息的获取,而C&C服务器会根据这些情报信息下发不同的payload给该组件执行。

(1)解密内置PE代码

该组件内置有一个加密的PE完整镜像数据,被存储于地址0x41f000处。组件执行后会解密该PE数据,通过PE结构定位到PE入口后执行入口函数。

(2)感染系统

内置PE代码得到执行后,如果当前执行文件路径不为STService,则会对受害主机实施感染操作:检测当前进程是否以STService名称运行,如果不是则将自身拷贝到Application Data目录的STService/STService.exe,并以STService Scheduling为参数运行,在恶意代码将自身拷贝到STService目录时,会修改文件时间,并设置文件属性为系统隐藏。

否则启动恶意线程工作,首先收集受害主机信息,其中包含用户名称、操作系统版本号、架构、安装日期等信息,并将这些信息拼接在一起。这些信息一则用着互斥事件(Event对象)名称,来保证每次只有一个实例在主机上运行,二则会被回传到控制端服务器实现恶意组件的上线功能。

然后,通过利用COM接口在开始菜单的启动文件夹下创建快捷方式来实现自启动。

完成感染后,该组件会重新启动并且以STService进程运行,接着就会循环创建320个线程,其中有一个线程是用来了与远程地址通信,其他线程不断的执行申请内存、写入11111111、释放内存等操作,可能用于干扰内存监视工具。

(3)启动线程解密配置信息

恶意代码的配置信息以加密字符串形式存储,其中以$$$开始,以###作为分隔,解密方法为xor,但每个配置信息xor的key不同。

加密字符串

秘钥

解密后内容

说明

?: >>>=<!":

0xC

37.1.202.26

C&C1(默认C&C)

8;#?!9=4 <:

0xB

37.1.219.31

C&C2(后备C&C)

jk{y|lij

0xD

getimage

上线信息路径

fdyyvw

0x13

upload

上传文件路径

?' *

0xF

0718

标志


(4)构造HTTPS请求数据发送给控制端实现上线

该组件首先连接默认C&C为37.1.202.26,向其提交本地的基本信息并且获取控制命令,如果无法成功完成该C&C的上线和控制命令的获取,该恶意组件会使用备用C&C。判断默认C&C上线是否成功的依据是响应的数据中是否包含有“uE4GMN”,如果包含则表示成功,否则表明失败。在默认C&C上线失败的情况下,恶意代码会判断状态标志文件“%APPDATA%\STService\status_svr.txt”,如果该文件存在,则使用备用C&C进行上线和控制命令的获取。

(5)上线数据包构造

首先,根据本机信息来实现url和请求参数的构造,构造明文数据如下:

其中的getimage/830411.gif为url地址,di59d=23947132339773951032&zv=15a0718&param=635为根据本机信息拼接成的字符串。

url格式化串为:

[配置信息中的上线包路径getimage]/%d%d[.jpg|.png|.gif]

数据格式化串为:

%si%dd=%d[本机信息字符串]&%sv=%d%s[配置信息中的标记0718]&param=%d

恶意代码会对数据信息进行加密,并通过base64编码,在转换成url编码。

上图为di59d=23947132339773951032&zv=15a0718&param=635加密后的十六进制数值。随后,通过编码转化后的请求参数如下:

最后,恶意代码添加HTTP请求头,通过https协议的方式实现上线请求及控制命令的获取。

(6)解析控制命令并执行相应的控制功能

当远程服务器成功响应数据后,恶意代码组件会根据服务器返回的内容执行指定操作,包括下载执行其他组件、进行卸载等。

控制命令

控制参数

功能

uE4GMN

-

删除status_svr.txt文件

htt

文件下载链接

下载控制命令中指定的文件链接并执行

####

-

删除自身文件,并结束当前进程

###

cmd命令

执行控制命令中指定的任意命令

##

文件完整路径

将控制命令中指定的文件上传到C&C服务器上,服务器目标路径为/upload/[RandName][.jpg/.png/.gif]

注:其中上传文件是通过监控线程实现,恶意代码将控制端返回的指定路径的文件拷贝到C:\Documents and Settings\Lorz\Application Data\Update\Tmp\目录,然后监控线程会将该目录下的文件上传到控制端服务器。

恶意代码运行过程中会创建线程监控"C:\Documentsand Settings\Lorz\Application Data\Update\Tmp\*.*"目录,如果发现该目录下存在文件,则读取文件内容进行上传。其中上传的url路径为/upload/[rand][.jpg/.png/.gif],其中的upload来自解密后的配置信息(由fdyyvw解密出来),恶意代码会从.jpg、.png、.gif、中随机选取作为上传服务器目标路径。


后 续

本报告对蜻蜓二代“Dragonfly2.0”的其中两个组件Backdoor.Dorshel和Trojan.Karagany.B进行了深入完整的剖析,后续启明星辰ADLab会对蜻蜓二代剩下的组件进行一一分析,敬请期待。