一、前言
路透社最近报道了针对全球各类目标的一次黑客攻击活动。在路透社相关报道发表之前,微软研究人员已经在密切跟踪这个攻击组织。
根据我们传感器收集到的数据,此次攻击活动主要针对的是公共部门机构和非政府组织,如智库和研究中心等,但也包括教育机构以及石油、天然气、化学、酒店领域的私营企业。
使用Microsoft Threat Protection解决方案的客户能免受此次攻击影响。Microsoft Threat Protection采用了基于行为的防护机制,能够在早期阶段阻止恶意活动。Office 365 Advanced Threat Protection能够拦截邮件中的恶意URL,阻止基于邮件的攻击活动(也能处理首次发现的样本)。与此同时,Windows Defender Advanced Threat Protection也能通过大量告警机制揭露攻击者在攻击环节中使用的各种技术。
第三方安全研究人员认为此次攻击活动由APT29(即CozyBear)所主导,该组织与我们标记的YTTRIUM攻击组织有较大重叠。虽然分析人员非常严谨,但我们尚未找到足够的证据将此活动与YTTRIUM联系在一起。
无论如何,由于受害者身份特殊,并且我们能看到国家级攻击活动的影子,因此微软将此次威胁事件通知了数百个组织中上千个潜在的受害者。作为Defending Democracy Program的一部分,微软鼓励满足条件的组织参与Microsoft AccountGuard,这项服务能帮助容易成为攻击目标的客户免受网络安全威胁影响。
二、攻击概览
此次攻击活动于11月14日早晨开始,攻击目标似乎集中在与政策制定、政治事务或者在该领域有一定影响力的组织。
图1. 钓鱼攻击目标分布图
虽然攻击目标遍布全球,但主要集中在美国,特别是华盛顿特区及周边区域。其他目标还位于欧洲、香港、印度以及加拿大。
图2. 钓鱼攻击区域分布图
钓鱼邮件内容伪装成来自OneDrive的共享通知,如路透社报道中提到的,攻击者伪装成在美国国务院工作的人员身份。如果受害人点击了钓鱼邮件中的链接,就会触发攻击链,最终下载并被植入DLL后门,使攻击者能够远程访问收件人的计算机。
图3. 攻击链
三、技术分析
投递方式
攻击活动中使用了钓鱼邮件,伪装成来自OneDrive的文件共享通知:
图4. 钓鱼邮件内容
邮件中包含指向合法网站的某个链接,但该网站已经被攻击者成功入侵:
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文件中释放出经过base64编码的payload,payload数据从文件0x5e2be
偏移地址开始,大小为16,632个字节。
图5. LNK文件中的内容
这个payload也是经过高度混淆的一个PowerShell脚本,也会被解码运行:
图6. 解码后的第二个脚本
第二个脚本会从.LNK
文件中提取处另外2个资源:
-
ds7002.PDF
(PDF诱饵文件) -
cyzfc.dat
(第一阶段植入后门)
命令控制
PowerShell脚本会将第一阶段DLL释放到%AppData%\Local\cyzfc.dat
,这是一个64位DLL程序,具有一个导出函数:PointFunctionCall
。
随后,PowerShell脚本调用rundll32.exe
来执行cyzfc.dat
。第一阶段的命令及控制(C2)服务器地址为pandorasong[.]com
(IP为95.216.59.92
),连接成功后,cyzfc.dat
会执行如下操作,开始安装最终payload:
1、为第二阶段payload分配一个ReadWrite
页面;
2、以资源形式提取第二阶段payload;
3、从第一个payload的0xEF
偏移处提取头部信息;
4、将头部数据与从0x12A
地址开始的资源数据拼接起来;
5、使用循环异或(ROR1
)方式,解密第二阶段payload,初始秘钥为0xC5
。
第二阶段payload实际上是Cobalt Strike(一个商用渗透测试工具)的一个实例,会执行如下操作:
1、定义一个本地命名管道,格式为\\.\pipe\MSSE-<number>-server
,其中<number>
为0到9897之间的一个随机数;
2、将payload通过XOR算法解密到一个新的RW
内存区域,这次XOR秘钥非常简单:每4个字节使用0x7CC2885F
来解密;
3、将这段区域设置为RX
标志;
4、创建一个线程,开始运行paylaod。
将全局数据写入管道的过程实际上是写入了第三个payload,这个payload经过XOR加密处理,加密方式与数据读取方式相同。payload解密后会得到一个PE文件,文件头为Meterpreter头。恶意软件会解析PE头部中包含的指令,将控制权移交给反射加载器:
第3个payload加载成功后会连接C2服务器,C2服务器地址已硬编码到PE文件的配置信息区域中,而配置信息会在第3个payload运行时异或解密:
配置信息中主要包含的是C2信息:
CobaltStrike是一个功能丰富的渗透测试攻击,可以为远程攻击者提供各种功能,比如提升权限、获取用户输入信息、通过PowerShell或者WMI执行任意命令、侦察踩点、通过各种协议与C&C服务器通信以及下载并安装其他恶意软件等。
四、缓解措施
Windows Defender ATP可以检测与攻击相关的已知文件系统及网络特征。此外,也会根据行为来检测LNK文件相关操作。如果看到以下告警信息,则表明当前环境中存在攻击行为:
- 检测到高级威胁特征
- 检测到与高级威胁有关的网络活动
- 经过签名的程序已执行低信誉度任意代码
- 打开可疑的LNK文件
网络防护机制可疑阻止连接到可疑域名及IP地址的行为。大家也可以使用如下attack surface reduction(攻击面减少)规则来阻止与此次攻击活动关联的恶意行为:
Block executable files from running unless they meet a prevalence, age, or trusted list criteria
通过Windows Defender Security Center,安全运营团队可以调查这些告警信息,分析主机、用户及攻击事件视图,跟踪端到端攻击活动。在自动化调查及响应功能、威胁分析、高级搜索及自定义检测的帮助下,安全运营团队能够保护网络环境免受此类攻击影响。大家可以注册使用免费版Windows Defender ATP,体验针对高级攻击威胁的防护机制。
可以使用如下高级搜索查询语句,搜索网络环境中是否存在此类攻击活动:
//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)
以上规则查询的是过去10天内的安全事件,大家可以根据实际情况,修改EventTime
的值。
五、IOC
文件(SHA-1):
ds7002.ZIP: cd92f19d3ad4ec50f6d19652af010fe07dca55e1
ds7002.LNK: e431261c63f94a174a1308defccc674dabbe3609
ds7002.PDF (PDF诱饵文件): 8e928c550e5d44fb31ef8b6f3df2e914acd66873
cyzfc.dat (第一阶段): 9858d5cb2a6614be3c48e33911bf9f7978b441bf
URL:
hxxps://www.jmj[.]com/personal/nauerthn_state_gov/VFVKRTdRSm
C&C服务器:
pandorasong[.]com (95.216.59.92) (第一阶段C&C服务器)