[译] APT分析报告:11.深入了解Zebrocy的Dropper文档(APT28)

2023-11-05

这是作者新开的一个专栏,主要翻译国外知名安全厂商的APT报告,了解它们的安全技术,学习它们溯源APT组织和恶意代码分析的方法,希望对您有所帮助。当然,由于作者英语有限,会借助机翻进行校验,还请包涵!

前文分享了Lazarus攻击工业事件,主要采用ThreatNeedle高级恶意软件集群。这篇文章将详细讲解俄罗斯的APT组织Sofacy(APT28)中Zebrocy的Dropper文档。简短的文章读起来很轻松,希望对您有所帮助。

在这里插入图片描述


一.APT28介绍

Sofacy 是一个从2008年就一直处于活跃状态的APT组织,并在2016年美国总统选举黑客事件中崭露头角。该组织更广为人知的名字是 FancyBearAPT28,其攻击目标包括政府、J队、安全机构和私人组织等,并以参与黑客攻击和泄M行动而闻名。在过去的几年里,Sofacy进行了彻底的重组,在很大程度上避开了分析师的关注。其中一个比较典型的变体称为 Zebrocy,其目标主要集中在前苏联和亚洲周边国家。

在这里插入图片描述

2018年,网络安全公司Palo AltoNetworks的研究人员就发现,与俄罗斯政府关系密切的SofacyAPT(又名APT28、Fancy Bear或Sednit)威胁组织使用Go编程语言编写了他们常用的Zebrocy工具的新版本。Zebrocy主要通过网络钓鱼攻击来实现,其中包含有宏和可执行文件附件的诱饵Microsoft Office文档。

该恶意软件的幕后操纵者于2015年首次被发现与GreyEnergy具有高度关联性。GreyEnergy是一个威胁组织,被认为是BlackEnergy (又名Sandworm)的继任者,这表明它是一个与Sofacy和GreyEnergy关联的子组织。它实际上充当了一个后门和下载器,能够收集系统信息、操作文件、捕获屏幕截图并执行恶意命令,然后将这些恶意命令传输到攻击者控制的服务器。

在2020年,Sofacy利用COVID-19作为诱饵发送Zebrocy恶意软件发起在野攻击。虽然Zebrocy最初是用Delphi(称为Delphocy)编写的,但此后已被用六种语言实现,包括AutoIT,C ++,C#,Go,Python和VB.NET。这篇文章将分享其Dropper的一个攻击案例。

在这里插入图片描述

在2021年3月,我们观察到了一系列针对哈萨克斯坦的攻击活动,它们使用Delphi编写的恶意软件 Delphocy 发起攻击,该恶意软件与以前的 Zebrocy 有关。被发现的Word文档据称来自哈萨克斯坦一家名为Kazchrome的公司,该公司是一家采矿和金属公司,并且是全球最大的铬矿和铁合金生产商之一。

总体来说,我们发现了6个与这个集群相关的Delphocy Word文档,它们都包含相同的删除PE文件的VBA脚本。在这六份Word文件中,有两份似乎是来自哈萨克斯坦的受害者上传到VirusTotal的真实文件。上传的文件包含了原始文件名:

  • Авансовыйотчет(новый).doc
  • Формадокладной(служебной)записки.doc

在这篇文章中,我们将深入研究这些样本,并分享一些其他分析师用来逆向Delphocy dropper文档的技术。我们展示了研究人员如何绕过密码保护宏,并描述了如何使用IDR(交互式Delphi重构器)反编译Delphi,以及如何使用dhrake的插件将保存的IDC文件导入Ghidra。

我们的分析结果引导发现了更多的Zebrocy簇,提供了一组IOC和YARA检测规则,使威胁搜索程序能够在其环境中搜索和这些相关的工件。


二.绕过VBA宏密码保护

在使用VBA宏分析Office文档时,攻击者有许多不同的工具和技术来完成这项工作,但我已经养成了一个习惯。当我第一次开始逆向恶意软件时,在手动绕过受密码保护的宏中,我就使用了这个习惯。

在这里插入图片描述

步骤如下:

  • 1.打开您最喜欢的十六进制编辑器,本文使用HxD
  • 2.加载Word文档
  • 3.搜索以下文本
    CMG=
    GC=
    DPB=
  • 4.向每个添加一个x
    CMGx=
    GCx=
    DPBx=
  • 5.保存更改的文件

在这里插入图片描述

当打开Word文档并查看宏时,您可以看到脚本和表单。在分析函数时,最突出的地方是:

  • ert.DataType=“bin.base64”

这表明UserForm1采用base64编码。

在这里插入图片描述


三.Wininition用户表单

当选择UserForm1时,文本框将显示一个 base64 编码的字符串,这正是我们上面讨论过的函数。下一步是将整个字符串复制到一个文件中,以便对其进行解码。

在这里插入图片描述

现在我们通过base64解码二进制文件并将其保存为wininition.exe。

在这里插入图片描述

接下来,使用HxD清理头部(headers),然后使用PE-Bear修改块头部(fix the sections headers),以进入下一阶段的分析。

在这里插入图片描述

当对一个二进制文件进行分类时,首要工具是Hiew,它可以调查并寻找线索以便进行更深层次的理解。通过 winintion,我注意到Embarcadero字符串,这意味着这个二进制文件是用Delphi编写的。在逆向Delphi二进制文件时,我总是使用IDR(交互式Delphi重构器)。其中,IDR是一个用Delphi编写的可执行文件和动态库(DLL)的反编译器。

在这里插入图片描述


四.用Ghidra和dhrake逆向Delphi二进制文件

在搜索IDR的最新进展时,我们遇到了一个很棒的 Ghidra 插件。它是一个用在Ghidra中的脚本集合,使用IDR输出到IDC的Delphi二进制文件进行逆向工程。虽然这是一年前发表的,但如果攻击者使用Ghidra,它就是一个宝藏。

dhrake允许您将IDC文件从IDR导入Ghidra。这将导入符号名、函数签名并为Delphi类创建结构。该插件从IDR生成的IDC文件中提取并应用Delphi符号,并且试图查找Ghidra错误确定函数入口点的情况。如果您从未将插件导入Ghidra,请阅读另一篇文章。

在这里插入图片描述

这那篇文章中,我已经把IDC保存到一个选定的文件夹,然后将插件安装在Ghidra中,并运行提示输入IDC文件的脚本将其加载!

在这里插入图片描述

在这里插入图片描述

在wininit二进制文件中,WinMain的第一个函数是 SetWindowsHookExW,这是一个钩子程序(hook procedures),用来监视系统中某些类型的事件。钩子进程的低级键盘输入事件是 WH_KEYBOARD_LL,其参数中的数字是13。该钩子是一种拦截按键事件的机制,然后将所有事件保存到一个日志文件中,并将其发送到C2。

在这里插入图片描述

C2使用十六进制进行模糊处理,十六进制可以转换为ascii。

  • 68747470733A2F2F7777772E786268702E636F6D2F646F6D696E61726772656174617369616E6F6479737365792F77702D636F6E74656E742F706C7567696E732F616B69736D65742F7374796C652E706870
  • hxxps://www.xbhp[.]com/dominargreatasianodyssey/wp-content/plugins/akismet/style.php
  • 68747470733A2F2F7777772E63346373612E6F72672F696E636C756465732F736F75726365732F66656C696D732E706870
  • hxxps://www.c4csa[.]org/includes/sources/felims.php

注意:这些域名似乎是被盗用的域名。


五.结论

通过对这些文件的分析,我们找到了其他的Zebrocy集群。随着Zebrocy的范围不断发展,组织必须具有适当的可见性和检测能力来发现这个威胁行动者。我们希望在这篇文章中讨论的技术将有助于其他研究人员分析Delphocy droppper文档,特别是文档中有密码保护的宏。

此外,为了阻止此类攻击,CISA建议在使用可移动媒体打开来自未知发件人的电子邮件和附件,以及扫描可疑的电子邮件附件时,请确保谨慎行事,并确保扫描附件的扩展名与文件头匹配。

前文分享:

2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、逆向分析、APT分析报告、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

在这里插入图片描述

(By:Eastmount 2021-05-07 星期五 晚上7点写于武汉 http://blog.csdn.net/eastmount/ )


IOC指标

Word文件

SHA256
3b548a851fb889d3cc84243eb8ce9cbf8a857c7d725a24408934c0d8342d5811
1dd03c4ea4d630a59f73e053d705185e27e2e2545dd9caedb26a824ac5d11466
1e8261104cbe4e09c19af7910f83e9545fd435483f24f60ec70c3186b98603cc
c213b60a63da80f960e7a7344f478eb1b72cee89fd0145361a088478c51b2c0e
2bf088955007b4f47fe9187affe65fffea234ff16596313a74958a7c85129172
d9e7325f266eda94bfa8b8938de7b7957734041a055b49b94af0627bd119c51c

SHA1
fc0b7ad2ae9347d6d2ababe2947ffb9f7cc73030
71b4b9f105de94090fc36d9226faaa1db6d9f3d1
6a8f63c4491adcf2cf7f76cd1481c5647615a6c9
a3ecf1fdc1206e9d3061530fa91775cf3d97f788
ae01ca2cf0dc07abb3a7bef9930e38c9212975d5
66b39f4fd1dd51c2f548330e5818f732dad0aa28

VBA

SHA256
a442135c04dd2c9cbf26b2a85264d31a5ac4ec5d2069a7b63bc14b64a6dd82b7

SHA1
6ec4eb883752b70db134ac0f4e0d5b4a77196184

Wininition

SHA256
ee7cfc55a49b2e9825a393a94b0baad18ef5bfced67531382e572ef8a9ecda4b

SHA1
afbdb13d8f620d0a5599cbc7a7d9ce8001ee32f1

网址

hxxps://www.xbhp[.]com/dominargreatasianodyssey/wp-content/plugins/akismet/style.php
hxxps://www.c4csa[.]org/includes/sources/felims.php

Yara Rules

rule apt_RU_delphocy_encStrings {
  meta:
    desc = "Hex strings in Delphocy drops"
    author = "JAG-S @ SentinelLabs"
    version = "1.0"
    TLP = "White"
    last_modified = "04.09.2021"
    hash0 = "ee7cfc55a49b2e9825a393a94b0baad18ef5bfced67531382e572ef8a9ecda4b"
    hash1 = "07b2d21f4ef077ccf16935e44864b96fa039f2e88c73b518930b6048f6baad74"

  strings:
    $enc_keylogger2 = "5B4241434B53504143455D" ascii wide
    $enc_keylogger3 = "5B5441425D" ascii wide
    $enc_keylogger4 = "5B53484946545D" ascii wide
    $enc_keylogger5 = "5B434F4E54524F4C5D" ascii wide
    $enc_keylogger6 = "5B4553434150455D" ascii wide
    $enc_keylogger7 = "5B454E445D" ascii wide
    $enc_keylogger8 = "5B484F4D455D" ascii wide
    $enc_keylogger9 = "5B4C4546545D" ascii wide
    $enc_keylogger10 = "5B55505D" ascii wide
    $enc_keylogger11 = "5B52494748545D" ascii wide
    $enc_keylogger12 = "5B444F574E5D" ascii wide
    $enc_keylogger13 = "5B434150534C4F434B5D" ascii wide
    $cnc1 = "68747470733A2F2F7777772E786268702E636F6D2F646F6D696E61726772656174617369616E6F6479737365792F77702D636F6E74656E742F706C7567696E732F616B69736D65742F7374796C652E706870" ascii wide
    $cnc2 = "68747470733A2F2F7777772E63346373612E6F72672F696E636C756465732F736F75726365732F66656C696D732E706870" ascii wide

  condition:
    uint16(0) == 0x5a4d and (any of ($cnc*) or all of ($enc_keylogger*))
}

rule apt_RU_Delphocy_Maldocs {
  meta:
    desc = "Delphocy dropper docs"
    author = "JAG-S @ SentinelLabs"
    version = "1.0"
    TLP = "White"
    last_modified = "04.09.2021"
    hash1 = "3b548a851fb889d3cc84243eb8ce9cbf8a857c7d725a24408934c0d8342d5811"
    hash2 = "c213b60a63da80f960e7a7344f478eb1b72cee89fd0145361a088478c51b2c0e"
    hash3 = "d9e7325f266eda94bfa8b8938de7b7957734041a055b49b94af0627bd119c51c"
    hash4 = "1e8261104cbe4e09c19af7910f83e9545fd435483f24f60ec70c3186b98603cc"

  strings:
    $required1 = "_VBA_PROJECT" ascii wide
    $required2 = "Normal.dotm" ascii wide
    $required3 = "bin.base64" ascii wide
    $required4 = "ADODB.Stream$" ascii wide
    $author1 = "Dinara Tanmurzina" ascii wide
    $author2 = "Hewlett-Packard Company" ascii wide
    $specific = "Caption         =   \"\\wininition.exe\"" ascii wide
    $builder1 = "Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} UserForm1" ascii wide
    $builder2 = "{02330CFE-305D-431C-93AC-29735EB37575}{33D6B9D9-9757-485A-89F4-4F27E5959B10}" ascii wide
    $builder3 = "VersionCompatible32=\"393222000\"" ascii wide
    $builder4 = "CMG=\"1517B95BC9F7CDF7CDF3D1F3D1\"" ascii wide
    $builder5 = "DPB=\"ADAF01C301461E461EB9E2471E616F01D06093C59A7C4D30F64A51BDEDDA98EC1590C9B191FF\"" ascii wide
    $builder6 = "GC=\"4547E96B19021A021A02\"" ascii wide

  condition:
    uint32(0) == 0xE011CFD0 and all of ($required*) and (all of ($author*) or $specific or 5 of ($builder*))
}

参考文献:

  • [1] http://blog.nsfocus.net/windows-apt-zebrocy/
  • [2] https://www.sohu.com/a/283726515_804262
  • [3] https://www.welivesecurity.com/2019/09/24/no-summer-vacations-zebrocy/
  • [4] https://www.4hou.com/posts/x7jq
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[译] APT分析报告:11.深入了解Zebrocy的Dropper文档(APT28) 的相关文章

随机推荐

  • ColossalAI-Chat训练手册(RLHF)

    目录 1 什么的RLHF流程 2 环境安装 3 训练 运行 3 1 模型下载 3 1 SFT supervised fine tuning 3 2 训练奖励模型 Training reward model 3 3 RL Training m
  • 将点云数据投影到图像上并生成带有颜色的激光雷达点云:Python实现指南

    1 引言 点云数据在许多应用领域 例如地理信息系统 自动驾驶汽车 机器人 3D建模等领域都有重要应用 这种数据通常是3D空间中的点集 其中每个点都具有三维坐标 但是 通过将点云数据投影到2D图像上并为其添加颜色 我们可以更容易地可视化和分析
  • 安卓开发学习视频!深入浅出Android性能调优,最强技术实现

    前言 找工作还是需要大家不要紧张 有我们干这一行的接触人本来就不多 难免看到面试官会紧张 主要是因为怕面试官问的问题到不上来 那时候不要着急 答不上了的千万不然胡扯一些 直接就给面试官说这块我还没接触到 以后如果工作当中遇到的话我可以很快的
  • Docker 容器监控 - Weave Scope

    Author rab 目录 前言 一 环境 二 部署 三 监控 3 1 容器监控 单 Host 3 2 容器监控 多 Host 总结 前言 Docker 容器的监控方式有很多 如 cAdvisor Prometheus 等 今天我们来看看其
  • 【linux基础9】系统文件的压缩和传输(scp,rsync传输的使用方式和压缩解压方式)

    系统文件的压缩和传输 一 实验环境 二 传输文件 一 基本信息 二 scp命令 一 指令 二 测试 scp远程传输文件 三 rsync命令 一 指令 二 rsync远程同步传输 四 文件的归档压缩 1 文件归档 装进一个箱子里面 2 压缩和
  • Python数据分析之:pandas 的索引方式 data.loc[], data[][]

    文章目录 1 data loc index column 2 data column index 1 data loc index column 使用 loc 第一个参数是行索引 第二个参数是列索引 import pandas as pd
  • java中输出一个字符串中出现次数最多的字符以及次数

    1 先把字符串转化为数组 toCharArray 2 定义一个数组count i 存取每个字符 以及数量 count i 3 计算每个字符 以及值 4 取count的最大值 public class MaxString public sta
  • fortran中use blas95、use f95_precision、use lapack95报错的问题

    fortran中use blas95 use f95 precision use lapack95报错的问题 不废话了 直入正题 这几个模块是mkl中的库 需要点击项目 gt 属性 找到fortran 选择其中的Libraries 选择其中
  • sparkstreaming---pom.xml

  • fifteenth day for learning

    apace虚拟主机功能 一 基于IP地址 1 创建基于IP得网站目录及首页 如 home www html 129 home www html 130 echo 129 gt home www html 129 index html ech
  • ZooKeeper服务器启动流程

    ZooKeeper服务器启动 1 单机版服务器启动 ZooKeeper服务器的启动 大体可以分为下面五个主要步骤 配置文件解析 初始化数据管理器 初始化网络I O管理器 数据恢复和对外服务 流程如下图所示 2 集群版服务器启动 Leader
  • Python中的嵌套循环

    1 什么是嵌套循环 所谓嵌套循环就是一个外循环的主体部分是一个内循环 内循环或外循环可以是任何类型 例如 while 循环或 for 循环 例如 外部 for 循环可以包含一个 while 循环 反之亦然 外循环可以包含多个内循环 循环链没
  • Maven学习笔记十:Maven坐标和依赖(依赖的配置)

    Maven坐标和依赖 依赖的配置 依赖会有基本的groupId artifactId和version等元素组成 其实一个依赖声明可以包含如下的一些元素
  • 诺基亚NoKia 8250维修笔记

    今天从桌底翻出一台诺基亚8250 零几年的老物件 尝试着加电启动 发现无论如何都是按下开机键电流上升到30MA然后回到0 看了下元器件无明显损坏 各电容均正常无击穿现象 正负极无短路 怀疑可能是芯片坏了或者晶振坏了 网上找了相关资料 怀疑可
  • 升级Mac后,连接easyconnect不能访问网页

    升级Mac后 连接运行EasyConnect后 打开网页如下提示代理问题 查看论坛 发现可能是升级Mac后导致的 见链接 关于Mac OS10 15无法使用SSL VPN 的问题预警 根据其中的连接 https bbs sangfor co
  • React组件写法

    一 傻瓜组件也叫展示组件 负责根据props显示页面信息 聪明组件也叫容器组件 负责数据的获取 处理 优势 分离工作组件和展示组件 解耦 提高组件的重用行 提高组件的可用性和代码阅读 便于测试与后续的维护 二 深入理解函数组件 函数式组件是
  • ffmpeg builds by zeranoe_手把手搭建FFmpeg的Windows环境

    1 简述 在Windows平台 搭建FFmpeg开发环境 能够帮助我们做各种开发的测试 如推流 拉流 滤镜等 2 下载源码 1 登陆FFMPEG官网 官网地址 http ffmpeg org 下载4 2 1版本源码地址 https ffmp
  • 复杂链表的复制java - 左神算法基础课04 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 今天讲讲复杂链表的复制 一个链表在原来的基础上新增一个指针 随机指向任意一个节点 可能是null 然后要求你复制链表 随机链表的生成 复杂链表 public clas
  • 在sqlplus中执行语句时候报错误SP2-0734: 未知的命令开头"id varchar..." - 忽略了剩余的行

    在sqlplus中执行语句时候报unknown command beginning错误 提交给维护部门批量修改数据的文件 在sqlplus中执行时候报错 SP2 0734 unknown command beginning where t
  • [译] APT分析报告:11.深入了解Zebrocy的Dropper文档(APT28)

    这是作者新开的一个专栏 主要翻译国外知名安全厂商的APT报告 了解它们的安全技术 学习它们溯源APT组织和恶意代码分析的方法 希望对您有所帮助 当然 由于作者英语有限 会借助机翻进行校验 还请包涵 前文分享了Lazarus攻击工业事件 主要