APT34攻击全本分析

2019年4月18日,黑客/黑客组织使用假名Lab Dookhtegan在Telegram频道上出售APT34团伙的工具包,此外还有收集到的受害者数据及工具后端面板内容截图。早在2019年3月中旬,该黑客/黑客组织就已经开始在网络上发布并售卖此套工具包。非常有意思的是,科威特的安全公司CEO发twitter特别强调了这个消息的真实性。

事件综述

2019年4月18日,黑客/黑客组织使用假名Lab Dookhtegan在Telegram频道上出售APT34团伙的工具包,此外还有收集到的受害者数据及工具后端面板内容截图。早在2019年3月中旬,该黑客/黑客组织就已经开始在网络上发布并售卖此套工具包。非常有意思的是,科威特的安全公司CEO发twitter特别强调了这个消息的真实性:

此次泄露的工具包中工具列表如下:

–  Glimpse(基于PowerShell的的新版木马,Palo Alto Networks命名为BondUpdater)

–  PoisonFrog(旧版BondUpdater)

–  HyperShell

–  HighShell(Palo Alto Networks称之为TwoFace)

–  MinionProject(fox管理界面,加载了HighShell模块)

–  Webmask(HTTP代理劫持工具,DNSpionage的主要工具,用于DNS修改)

绿盟伏影实验室和绿盟M01N战队的成员共同对此工具包进行了分析,确定此次泄露的工具包中的工具相较于以前公布的APT34组织使用的攻击工具有不同。本文将对此次泄露的工具进行详细分析,同时,从TTPs的角度来对此次泄露的工具进行解读。

攻击目标行业梳理

APT34主要针对中东国家。本次事件中国内地及中国台湾受到攻击。在过去的几年间,该组织对中国内地、中国台湾、土耳其、阿尔巴尼亚等地区均进行过攻击。

经过分析,我们找到了与国内公司相关的14个Webshell文件,6个港澳台地区公司相关的Webshell文件。

公布的工具集中也包含了大量的口令信息,按照信息来源进行打包并公布:

可以从中看到机场、石油公司相关的名称。被公布的口令强度很低,此次一共公布了1.2W多个弱口令:

APT34历史信息梳理

APT34组织由FireEye命名,该组织使用的工具和攻击思路与OilRig组织相似度极高,而后者是由Palo Alto Networks持续追踪的一个活跃在中东的组织,两者相似度极高。该组织的活动时间至少可以追溯至2014年,其目标包含了金融,政府,能源,化工和电信等多个行业,该组织一直活跃在中东地区,但是根据此次泄露的文件中的信息判断。

2017年11月4日,FireEye发现该组织使用CVE-2017-11882进行攻击,其使用的攻击工具与此次泄露的工具类似。

传播方式梳理

该组织通过鱼叉式钓鱼邮件进行攻击,其发送的垃圾邮件往往附带恶意链接,带有CVE-2017-11882等漏洞的附件文件,带有诱导点击链接的演示文档等。

TTPs

本次APT34泄露样本,经过对样本功能分析,以TTPs角度从Procedures倒推APT34所涉及的攻击战术和技术,整体来看本次泄露样本主要涉及到其攻击链的四部分,包括Privilege Escalation、Collection、Exfiltration和Command and Control等。

Privilege Escalation阶段

本次泄露样本中涉及到HighShell、HyperShell以及MinionProject等多个WebShell后门程序,并且均为.Net程序,部分涉及到通信加密以规避防御。结合泄露文件中包含的工具使用记录文档和APT34已攻陷目标网站列表可以看出,APT34组织使用这些Webshell主要针对Exchange服务器的Outlook邮箱系统的攻击,并且被放置在/owa/auth/目录下。全球已攻击目标中共包含14个中国内地能源行业和证券行业等的企业单位。

中国内地公司相关信息:

Collection阶段

本次泄露样本webmask推断主要还是针对Outlook服务的攻击,涉及Email Collection和Man in the Browser相关技术,从样本源码和使用说明文档分析,该工具会去窃取Outlook用户认证相关的邮箱账号密码及Cookie等信息,并会通过向流量中注入代码的方式完成进一步的信息收集。

Exfiltration阶段

这里主要是Exfiltration Over Command and Control Channel,攻击者会在此阶段通过C2控制将敏感数据以DNS协议方式进行回传,这种方式可以规避掉一般的数据防泄漏防护而导致信息的泄露。

Command and Control阶段

本次泄露样本分为新旧两个版本的RAT,以DNS协议通信为载体实现对目标服务器的远程控制:

旧版:poisonfrog.ps1

新版:Glimpse(dns_main.ps1)

经过对样本的分析,可以发现两个版本都使用了PowerShell作为Agent运行代码,且在执行之前需要劫持受害者的DNS服务器以进行DNS重定向,从而解析攻击者指定的域名后缀。通过使用特定的算法生成子域名,受害者机器向DNS服务器即C2 Server发送子域名A/TXT记录的DNS查询请求并获取C2提供的IPv4地址从而进行通信。此外,还需要通过计划任务的形式让Powershell脚本定期运行,从C2 Server端获取信息从而执行命令。该C2的功能主要包括命令执行,文件上传和下载。

旧版C2中已经包含了对代理的检测,并通过从远程服务器下载文件以进行网络代理的配置。但只支持对DNS A记录的查询。生成的子域名中包含了受害者系统的部分UUID值

新版C2中不包含代理的配置,默认已经完成了对DNS的劫持。新增对DNS TXT记录的解析。生成的子域名中不包含系统UUID值。

 

木马及Webshell细节分析

工具目录结构:

Glimpse:

PoisonFrog:

Webmask:

Webshells_and_Panel:

在对文件梳理并尝试还原的过程中,我们发现远控工具存在逻辑不全的地方,无法一键部署,需要进行分析和重新配置才可以正常运行,而Minion中也缺少文件,无法直接执行:

因此,我们认为此次泄露的工具包内容不完全,在分析过程中应当特别注意,目前为止,我们并没有发现泄露者预留后门。

Glimpse

Glimpse是一套使用DNS隧道的远控工具,分为Agent、Panel和Server三部分;

Agent

Agent为受控端程序。

主要功能

启动脚本为runner_.vbs,用于启动powershell主脚本;

主体脚本为dns_main.ps1,用于与服务端通信。

文件操作

程序生成特定目录PUBLIC\Libraries\guid\(下称agent目录,guid由此脚本生成),并在目录下创建receivebox、sendbox、done等子文件夹,通过这些子目录下的文件读写来实现与服务端的通信。

通信流程
  1. 程序使用ping mode(对应dns A mode)和text mode(对应dns TXT mode)两种方式与服务端进行通信,接收服务端的指令并以文件的形式保存到agent目录\receivebox\下,以rcvd为文件名前缀;
  2. 判断服务端指令并执行对应的行为;

服务端指令列表如下:

指令文件名末尾字节 含义 操作
0 执行服务端命令 读取指令文件内容并将其作为cmd指令执行,将输出结果保存到放入agent目录\sendbox下以发送,文件名前缀为proc
1 上传文件 将指令文件内容中指定的文件放入agent目录\sendbox下以发送
其他 下载文件 将指令文件放入agent目录\done下保存
  1. 服务端指令处理完成后,Agent会将agent目录\sendbox下的文件发送至服务端。

 Panel

Panel为该工具的图形面板,用于管理Server与Agent的通信。

Server

Server为服务端。

主要功能

此服务端通过DNS隧道协议进行通信,能够以A或TXT类型的DNS隧道进行文件收发,由此向agent发送指令或接收agent上传的文件。

文件操作

程序创建ALLUSERSPROFILE/Glimpse/dns/aid/(下称server目录,aid为从agent接收到的guid编号),并在目录下创建wait、receive、done、sended、sending等子文件夹,通过这些子目录下的文件读写来实现与agent的通信。

通信流程
  1. 接收agent发送的伪DNS请求;
  2. 使用本地规则解析agent信息:

伪DNS请求内容格式为:data.mainData.mainData2.mainData3,四个部分分别保存不同的内容。

data部分

0~14 15~n n+1 n+2 n+3 n+4
dataRand 未知 C reqNoIndex actionIndex T

若data尾部字符串为CxxT(x为任意字符),则此data为隧道协议数据,由server进行判断;

若尾部非以上格式,则server进行转发;

datarand: 记录action和aid,数据位置可变,由reqNoIndex和actionIndex两个值来决定

aid:此数据包的id信息,server端据此生成server目录

action:对应agent行为

action字段值 操作
M 检查特定目录下mode文件夹,并处理ping信息
W server以dnsTXT方式合并发送服务端目录下wait文件夹内容
D server以dnsTXT方式分片发送服务端目录下wait文件夹内容
0 server将wait文件夹下文件名伪装为ip字符串并发送至agent
1 server以dnsA方式将wait文件夹下的文件分片发送至agent
2 server以dnsA方式分片接收agent发送的文件至part文件夹下

mainData部分

保存指令文件的内容

mainData2部分

保存指令文件名

mainData3部分

保存C&C域名

隧道格式

服务端作为伪造的DNS服务器,响应agent的DNS请求并回复指定ip字符串,不同的ip字符串指代不同的通信内容。

ip字符串对应如下:

ip字符串内容 含义
99.250.250.199 服务端响应新的agent并创建会话
199.250.250.99 服务端响应agent端ping信息
3.2.1.0 服务端有待发送文件
24.125.a.b 服务端有待发送文件且文件名为a+b
11.24.237.110 服务端无待发送文件
a.b.c.d 服务端以dnsA方式发送分片数据,abc为数据内容,d为数据索引
1.2.3.0 服务端分片数据发送完成
a.2.3.b 服务端正在接收agent端发送的分片数据,a为agent端id,b为分片编号
253.25.42.87 服务端已收到agent端发送的分片数据

 

PoisonFrog

主要功能

PoisonFrog是一款可以窃取受控端信息和执行C&C端cmd指令的的远控工具。

运行流程
  1. 首先执行ps1脚本通过该脚本释放hUpdater.ps1和dUpdater.ps1脚本,以及一个UpdateTask.vbs脚本,并且设置Windows计划任务
  2. ps1脚本访问CC域名,通过域名下发的指令进行上传和下载文件功能。
  3. ps1脚本对目录下文件进行操作,识别脚本名的最后一个字符作为指令,对文件进行操作。
  4. 计划任务设定为每10分钟执行1次vbs脚本。

下图包含poisonfrog.ps1脚本部分内容。

组件分析

hUpdater.ps1脚本

该脚本主要用于与C2服务器发送数据和从C2服务接收命令和文件等。

当cfg.ini文件存在时,会读取文件内容提取proxy代理,使用代理模式与C2服务器进行通信。

指令格式解析,通过从C2服务器获取字符串,对字符串进行分割操作,分隔符为“<>”,分割后数组不小于4。(eg:SSA[0]<>SSA[1]<>SSA[2]<>SSA[3]<>SSA[4]<>SSA[5])根据数组中每位的不同对应响应的功能,例如当SSA[2]不等于”not”并且有值的时候执行下载文件操作。下载到指定的目录下。具体指令格式如下图

指令 说明
SSA[0] SSA[0]不等于”not”且存在值时,上传文件到目录下以SSA[0]命名的文件,到对应/fil/域名/SSA[0]的uri路径

并删除对应的文件

SSA[1] SSA[1]不等于”not”且存在值时,上传字符串到指定的uri路径。现已注释代码。
SSA[2] SSA[2]不等于”not”且存在值时,下载文件uri目录/fil/SSA[3],下载到本地C:/…./SSA[0]/SSA[2]
SSA[4] SSA[4]不等于”not”且存在值时,上传文件SSA[4]文件到对应/fil/域名/SSA[0]的uri路径
SSA[] 数组长度为2时,继续执行循环内操作

dUpdater.ps1脚本

根据receivebox文件夹下第一遍历到的文件名(ZZA[0])最后一位字符作为指令解析:如下表格所示:

指令 说明
0 当指令为0时,将receivebox中ZZA[0]的文件内容解析写入到sendbox目录下对应的ZZA[0]文件,如果receivebox中ZZA[0]文件存在则删除对应的文件。
1 当指令为1时,如果receivebox中ZZA[0]的文件内容解析够获得为文件路径则将该文件复制到sendbox目录下对应的ZZA[0]文件,如果
2 当指令为2时,将receivebox中ZZA[0]的文件移动到done/目录下,并设置sendbox目录下对应的文件内容为”200<>+done目录路径,删除receivebox下ZZA[0]文件

 

server端脚本

Server端脚本功能包含下发指令,上传文件以及下载文件。指令格式与Agent端hUpdater.ps1脚本中指令格式解析部分相对应。具体函数对应功能如下:

函数 说明
Panel 控制面板
NotFount 无法登陆错误提示
Posted 下发指令,上传和下载文件
Deletecommand 从数据库中删除指令
Deleteagent 删除Agent,以及对应的文件
Descriptionposted 展示控制端返回的信息
Fileposted 发送文件到控制端的receive文件夹下
Agent 在每个agentID文件夹下创建receive、send、wait文件夹并在文件夹存储带有指令的文件,并将指令写入到数据库中

Webmask

该工具被APT34组织用于DNS代理与HTTP劫持。

主要功能

工具分为三部分,shell脚本install.sh用于安装,icap.py用于窃取密码与劫持,dnsd.py、dnsd.js和config.json用于配置本地DNS代理。

组件分析
dnsd模块

该模块启动本地DNS代理,配置文件与代理服务器ip由启动参数指定,默认情况下,脚本只进行DNS转发;

dnsd模块可使用python脚本或js脚本启动,对应文件为dnsd.py和dnsd.js。

guide.txt用于说明工具的使用方法,给出两种解决方案:

第一种:

即使用dnsd.py进行透明代理

第二种:

即使用native-dns模块进行DNS代理,说明中给出的ip 195.229.237.52 为一个位于阿联酋的DNS服务器,而ip 185.162.235.106 为一个示例的bot IP;

icap模块

该模块是利用pyicap编写的工具,pyicap是用于编写ICAP服务器的python3框架。ICAP通常用于扩展透明代理服务器,在透明HTTP代理缓存中实现内容过滤器等功能,能够对HTTP请求/响应执行特定的服务,这些服务内容可以由开发者指定。

extract_login_password方法:用于窃取http信息中的账号密码并记录至指定文件中。使用正则表达式对http请求中的数据进行提取。

同时,该工具记录http交互中的头部信息,包括用户端IP,请求时间,请求内容,记录cookie信息。在代码中我们发现了劫持代码,加入了以下的js脚本语句:

当这部分执行时,第一个img src会使得受害者的机器访问攻击者服务器上的logo.jpg,这个过程中会自动进行NTLM认证,此时攻击者可以获取到NetNTLMv2的hash值,该值可以用于MITM攻击。

假设攻击者已获得对代理的控制权,他可以让他的服务器回答DNS对WPAD的请求,然后让他的服务器回答获取具有实际上是PAC文件的图像的请求。

Webshells_and_Panel

Webshells_and_Panel 目录中主要包含了多种 C# 编写的Webshell 工具:

有较为简单,只有上传功能的 simpleDownload.aspx:

还有再复杂一点的 simple.aspx(多了认证和命令执行的功能):

还有功能齐全的,看起来像是初版的 highshell.aspx,包含了文件上传,命令执行,数据库操作等多种功能。这个版本 2017 年被 Palo Alto Networks报道过。

登录认证的方式如下:

用伪代码表示为:

Base64(sha256(bytes(cookies[“p”] + salt))) == pp

其中 salt 和 pp 均为预定义的值:

设置好 cookies 值后即可认证使用。

除此之外,在 Hypershell 目录中还发现了多个版本的 highshell 的升级版(此为8.6.2, 还有其他版本,稍有差异)如下:

这个版本使用了 Semantic UI 框架重新编写,同时后端也进行了模块化的拆分,比普通版本在工程化上更进了一步。认证方式和上述类似,都是基于 cookie 来认证的。

 

Yara规则

/*
   YARA Rule Set
   Author: Florian Roth
   Date: 2019-04-17
   Identifier: Leaked APT34 / OilRig tools
   Reference: https://twitter.com/0xffff0800/status/1118406371165126656
*/
rule APT_APT34_PS_Malware_Apr19_1 {
   meta:
      description = "Detects APT34 PowerShell malware"
      author = "Florian Roth"
      reference = "https://twitter.com/0xffff0800/status/1118406371165126656"
      date = "2019-04-17"
      hash1 = "b1d621091740e62c84fc8c62bcdad07873c8b61b83faba36097ef150fd6ec768"
   strings:
      $x1 = "= get-wmiobject Win32_ComputerSystemProduct  | Select-Object -ExpandProperty UUID" ascii
      $x2 = "Write-Host \"excepton occured!\"" ascii /* :) */

      $s1 = "Start-Sleep -s 1;" fullword ascii
      $s2 = "Start-Sleep -m 100;" fullword ascii
   condition:
      1 of ($x*) or 2 of them
}

rule APT_APT34_PS_Malware_Apr19_2 {
   meta:
      description = "Detects APT34 PowerShell malware"
      author = "Florian Roth"
      reference = "https://twitter.com/0xffff0800/status/1118406371165126656"
      date = "2019-04-17"
      hash1 = "2943e69e6c34232dee3236ced38d41d378784a317eeaf6b90482014210fcd459"
   strings:
      $x1 = "= \"http://\" + [System.Net.Dns]::GetHostAddresses(\"" ascii
      $x2 = "$t = get-wmiobject Win32_ComputerSystemProduct  | Select-Object -ExpandProperty UUID" fullword ascii
      $x3 = "| Where { $_ -notmatch '^\\s+$' }" ascii

      $s1 = "= new-object System.Net.WebProxy($u, $true);" fullword ascii
      $s2 = " -eq \"dom\"){$" ascii
      $s3 = " -eq \"srv\"){$" ascii
      $s4 = "+\"<>\" | Set-Content" ascii
   condition:
      1 of ($x*) and 3 of them
}

rule APT_APT34_PS_Malware_Apr19_3 {
   meta:
      description = "Detects APT34 PowerShell malware"
      author = "Florian Roth"
      reference = "https://twitter.com/0xffff0800/status/1118406371165126656"
      date = "2019-04-17"
      hash1 = "27e03b98ae0f6f2650f378e9292384f1350f95ee4f3ac009e0113a8d9e2e14ed"
   strings:
      $x1 = "Powershell.exe -exec bypass -file ${global:$address1}"
      $x2 = "schtasks /create /F /ru SYSTEM /sc minute /mo 10 /tn"
      $x3 = "\"\\UpdateTasks\\UpdateTaskHosts\""
      $x4 = "wscript /b \\`\"${global:$address1" ascii
      $x5 = "::FromBase64String([string]${global:$http_ag}))" ascii
      $x6 = ".run command1, 0, false\" | Out-File " fullword ascii
      $x7 = "\\UpdateTask.vbs" fullword ascii
      $x8 = "hUpdater.ps1" fullword ascii
   condition:
      1 of them
}

引用来源:

https://github.com/Neo23x0/signature-base/blob/master/yara/apt_oilrig.yar

IOC信息

myleftheart.com
C:\Users\Public\Public\atag[0-9]{4}[A-Z]{2}
C:\Users\Public\Public\dUpdater.ps1
C:\Users\Public\Public\hUpdated.ps1
C:\Users\Public\Public\UpdateTask.vbs
27e03b98ae0f6f2650f378e9292384f1350f95ee4f3ac009e0113a8d9e2e14ed
b1d621091740e62c84fc8c62bcdad07873c8b61b83faba36097ef150fd6ec768
2943e69e6c34232dee3236ced38d41d378784a317eeaf6b90482014210fcd459
c3772977316a604504065b61635947727bd6ea1a4de358f679344688f4c31820
6950d0f99684678b595d3551ec6642a77b6e8be33aba061ef9b39379af9de46d
fe1b011fe089969d960d2dce2a61020725a02e15dbc812ee6b6ecc6a98875392
eb1ded644e7491f3f60982be9652cbe40b0c819329927ea654cb43e40acb9b1c
544a1f8fe76776f0172ac2e5dd8d7be6ee9b5a492054fa1f5505e2f0371ca5a7
228d1f1d90f26b64ab57e220ae0d883ddc3887a861cc935993ed0472b6083f61
99.250.250.199
199.250.250.99
11.24.237.110
253.25.42.87
3.2.1.0
1.2.3.0
185.56.91.61
195.229.237.52
185.162.235.106
94.23.172.164
46.105.221.247
148.251.55.110
185.15.247.147
145.239.33.100
82.102.14.219

 

缓解建议

1、注意陌生邮件,不主动点击非常见发件人发来的邮件中的附件,不随意点击邮件中的附加的链接,避免出现信息泄露或者计算机中毒的情况。

2、不使用弱口令密码,应不定时更换密码,保证密码强度。

3、及时修复漏洞,注意边界设备、不常用设备的自动更新正常开启,保证设备及软件处于最新版本。

4、使用安全公司提供的边界防护设备、情报预警系统,防患于未然。

 

检测手段

网络层面:

检查是否存在IOC中列举的DNS解析服务器地址;

检查机器是否对外发送大量的DNS请求,时间间隔为50ms一次;

异常的域名请求;

主机层面:

检查机器中是否存在以下目录或文件:

C:\Users\Public\Public\atag[0-9]{4}[A-Z]{2}
C:\Users\Public\Public\dUpdater.ps1
C:\Users\Public\Public\hUpdated.ps1
C:\Users\Public\Public\UpdateTask.vbs

检查机器中DNS服务器地址是否被篡改;

检查http服务器根目录下是否存在未知文件;

检查主机是否监听特定端口。

 

关于伏影实验室

伏影实验室专注于安全威胁研究与监测技术,包括但不限于威胁识别技术,威胁跟踪技术,威胁捕获技术,威胁主体识别技术。研究目标包括:僵尸网络威胁,DDOS对抗,WEB对抗,流行服务系统脆弱利用威胁、身份认证威胁,数字资产威胁,黑色产业威胁 及 新兴威胁。通过掌控现网威胁来识别风险,缓解威胁伤害,为威胁对抗提供决策支撑。

 

 

参考资料

https://github.com/Neo23x0/signature-base/blob/master/yara/apt_oilrig.yar

https://www.fireeye.com/blog/threat-research/2017/12/targeted-attack-in-middle-east-by-apt34.html

https://unit42.paloaltonetworks.com/unit42-oilrig-uses-updated-bondupdater-target-middle-eastern-government/

https://misterch0c.blogspot.com/2019/04/apt34-oilrig-leak.html

https://raidforums.com/Thread-access-to-top-secret-information-and-hacking-tools-of-Iran-ministry-of-intelligence?pid=540189

https://anonfile.com/8f8aL0S1mb/targets_txt

Spread the word. Share this post!

Meet The Author

伏影实验室专注于安全威胁监测与对抗技术研究。
研究目标包括Botnet、APT高级威胁,DDoS对抗,WEB对抗,流行服务系统脆弱利用威胁、身份认证威胁,数字资产威胁,黑色产业威胁及新兴威胁。通过掌控现网威胁来识别风险,缓解威胁伤害,为威胁对抗提供决策支撑。

Leave Comment