Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

APT29?针对美国智库、非盈利和公共组织的网络攻击分析

0
0

路透社最近报道有黑客组织对全球的多个目标发起了网络攻击活动。微软研究人员也追踪到了同样的攻击活动,本文介绍该攻击活动的相关细节。

研究人员发现攻击活动主要攻击公共机构和非政府组织,比如智库、研究中心和教育机构,以及石油、天然气、化工以及医疗行业的私营企业。

第三方安全研究人员分析称该攻击是APT 29(CozyBear)组织发起的攻击活动,微软称APT 29为YTTRIUM。截止目前,微软研究人员称还没有足够的证据表明该攻击活动来源于APT 29。

攻击概览

攻击活动是2018年11月14日早晨开始的。攻击目标主要是参与政策制定或在该区域有政治影响的机构。


APT29?针对美国智库、非盈利和公共组织的网络攻击分析

钓鱼攻击在不同行业的分布

虽然目标分布在全球的不同行业,但主要分布在美国、尤其是华盛顿周边,其次是欧洲、香港、印度和加拿大。


APT29?针对美国智库、非盈利和公共组织的网络攻击分析

钓鱼攻击活动地理分布

鱼叉式钓鱼邮件模仿通过OneDrive分享的通知,伪装成美国国务院的工作人员。如果接收者点击了鱼叉式钓鱼攻击邮件中的链接,就开始了攻击的漏洞利用链,最终会导致植入DLL后门,使攻击者可以远程访问接收者的机器。


APT29?针对美国智库、非盈利和公共组织的网络攻击分析

攻击链

攻击活动分析 传播

攻击中使用的鱼叉式钓鱼攻击邮件模仿通过OneDrive分享的嗯我那件共享通知。


APT29?针对美国智库、非盈利和公共组织的网络攻击分析

邮件中含有一个合法但是被黑的第三方链接:

hxxps://www.jmj.com/personal/nauerthn_state_gov/TUJE7QJl[random string]

攻击者使用了随机字符串来识别点击了链接的不同目标。但所有该链接的变种都会将用户重定向到相同的链接:

hxxps://www.jmj.com/personal/nauerthn_state_gov/VFVKRTdRSm

当用户点击链接后,就会被提供一个含有恶意LNK文件的ZIP文件。攻击中所有文件的文件名都是相同的,比如ds7002.pdf, ds7002.zip, ds7002.lnk。

安装

LNK文件表示攻击的第一阶段。它会执行一个混淆的powershell命令,该命令会从LNK文件的offset 0x5e2be扩展16632字节的位置提取出base64编码的payload。


APT29?针对美国智库、非盈利和公共组织的网络攻击分析

LNK文件中编码的内容

编码的payload是一个严重混淆的PowerShell脚本,会被解码和执行:


APT29?针对美国智库、非盈利和公共组织的网络攻击分析
解码的第二个脚本

第二个脚本会从.LNK文件中提取出两个额外的文件:

ds7002.PDF (诱饵PDF文件)

cyzfc.dat (1阶段植入)

C2

PowerShell脚本会在路径%AppData%\Local\cyzfc.dat下创建一个第一阶段DLL文件cyzfc.dat。这是导出函数PointFunctionCall的64位DLL。

然后PowerShell脚本会通过调用rundll32.exe来执行cyzfc.dat。在连接第一阶段C2服务器pandorasong[.]com (95.216.59.92)后,cyzfc.dat开始通过以下步骤来安装final payload:

1. 为第二阶段payload分配ReadWrite页;

2. 提取第二阶段payload作为资源

3. 将header融入到第一阶段payload的0xEF字节

4. 将header加到资源从字节0x12A开始的位置中;

5. 用滚动XOR(ROR1)方法从key 0xC5开始解密第二阶段payload。


APT29?针对美国智库、非盈利和公共组织的网络攻击分析

第二阶段payload是Cobalt Strike的一个实例,Cobalt Strike是一个商业渗透测试工具,会执行以下步骤:

1. 以\\.\pipe\MSSE-<number>-server格式定义一个本地命名的pipe,其中<number>是0到9897之间的随机数字;

2. 连接到pipe,写入全局数据size 0x3FE00;

3. 通过命名的pipe实现后门:

从pipe(最大0x3FE00字节)到分配的缓存中读取内容;

XOR解码payload到新的RW内存区域,这次使用的XOR key为:用0x7CC2885F每4个字节进行简单XOR

将该区域变成RX;

创建一个线程运行payload。


APT29?针对美国智库、非盈利和公共组织的网络攻击分析
APT29?针对美国智库、非盈利和公共组织的网络攻击分析
APT29?针对美国智库、非盈利和公共组织的网络攻击分析

将全局数据写入pipe实际上是写的是一个第三方payload。Payload也是用相同的XOR算法加密的,解密后,与Meterpreter header组成了一个PE文件,可以翻译PE header中的指令,并将控制转移到反射加载器上:


APT29?针对美国智库、非盈利和公共组织的网络攻击分析

第三个payload最后会加载并连接到C2服务器地址,其中C2服务器地址是融入到PE文件的配置信息中的。配置信息在第3个payload运行时会XOR解密:


APT29?针对美国智库、非盈利和公共组织的网络攻击分析

配置信息本身含有C2信息:


APT29?针对美国智库、非盈利和公共组织的网络攻击分析

CobaltStrike是一个功能丰富的渗透测试工具,提供给远程攻击者广泛的功能,包括提权、获取用户输入、通过PowerShell或WMI执行任意命令、执行侦察、通过不同协议与C2服务器通信、下载和安装恶意软件等。

Indicators of attack Files (SHA-1)

ds7002.ZIP: cd92f19d3ad4ec50f6d19652af010fe07dca55e1

ds7002.LNK: e431261c63f94a174a1308defccc674dabbe3609

ds7002.PDF (decoy PDF): 8e928c550e5d44fb31ef8b6f3df2e914acd66873

cyzfc.dat (first-stage): 9858d5cb2a6614be3c48e33911bf9f7978b441bf

URLs hxxps://www.jmj[.]com/personal/nauerthn_state_gov/VFVKRTdRSm

C&C servers

pandorasong[.]com (95.216.59.92) (first-stage C&C server) 安全团队可以查找网络中相关的活动来确定是否被攻击和入侵: //Query 1: Events involving the DLL container
let fileHash = "9858d5cb2a6614be3c48e33911bf9f7978b441bf";
find in (FileCreationEvents, ProcessCreationEvents, MiscEvents,
RegistryEvents, NetworkCommunicationEvents, ImageLoadEvents)
where SHA1 == fileHash or InitiatingProcessSHA1 == fileHash
| where EventTime > ago(10d)
//Query 2: C&C connection
NetworkCommunicationEvents
| where EventTime > ago(10d)
| where RemoteUrl == "pandorasong.com"
//Query 3: Malicious PowerShell
ProcessCreationEvents
| where EventTime > ago(10d)
| where ProcessCommandLine contains
"-noni -ep bypass $zk=' JHB0Z3Q9MHgwMDA1ZTJiZTskdmNxPTB4MDAwNjIzYjY7JHRiPSJkczcwMDIubG5rIjtpZiAoLW5vdChUZXN0LVBhdGggJHRiKSl7JG9lPUdldC1DaGlsZEl0"
//Query 4: Malicious domain in default browser commandline
ProcessCreationEvents
| where EventTime > ago(10d)
| where ProcessCommandLine contains
"https://www.jmj.com/personal/nauerthn_state_gov"
//Query 5: Events involving the ZIP
let fileHash = "cd92f19d3ad4ec50f6d19652af010fe07dca55e1";
find in (FileCreationEvents, ProcessCreationEvents, MiscEvents,
RegistryEvents, NetworkCommunicationEvents, ImageLoadEvents)
where SHA1 == fileHash or InitiatingProcessSHA1 == fileHash
| where EventTime > ago(10d)

Viewing all articles
Browse latest Browse all 12749