APT28 样本分析报告

APT 2年前 (2022) admin
649 0 0

APT28 样本分析报告

本文为看雪论坛优秀文章

看雪论坛作者ID:逆时针向左





样本HASH

APT28 样本分析报告




基本信息


1、壳信息:无壳
APT28 样本分析报告

2、关键API
APT28 样本分析报告

3、没注意到什么关键字符串。




行为分析


1、注册表监控:
APT28 样本分析报告
关键在设置 EnvironmentUserInitMprLogonScript 为 C:UsersReverseAppDataLocalcdnver.bat 实现持久化。

2、文件监控
APT28 样本分析报告
在 LOCALAPPDATA 目录下释放了两个文件:cdnver.dll 和 cdnver.bat;
cdnver.dll 的 MD5 为 AA2CD9D9FC5D196CAA6F8FD5979E3F14
bat 脚本内容为:start rundll32.exe “C:UsersReverseAppDataLocalcdnver.dll”,#1

3、进程监控
APT28 样本分析报告
创建进程 rundll32.exe,加载释放的文件:cdnver.dll;

从行为监控中也可以看出(释放隐藏文件、隐秘执行):
APT28 样本分析报告

4、网络监控
使用 FakeNet,捕获得域名 cdnverify.net,使用奇安信威胁分析平台查询:
APT28 样本分析报告
可以确定该样本与 APT 组织有关。





详细分析


使用 IDA 打开后,停在 WinMain 处,x32dbg 的 Base 为 0x00EF1000,在 IDA 中 Rebase 为 0x00EF0000,则 WinMain 的地址为 0x00EF1ECF:

APT28 样本分析报告
在 WinMain 中,连续调用了 sub_EF1DEF() 三次,该函数内有 XOR 等操作,猜测为字符串解密操作:

APT28 样本分析报告
结合 x32dbg 可知:
第 1 次调用,解密字符串:SystemRoot\SysWow64第 2 次调用,解密字符串:SystemRoot\System32第 3 次调用,解密字符串:TEMP
APT28 样本分析报告
因此,重命名 sub_EF1DEF() 为 decryptStr_sub_EF1DEF();之后调用函数 sub_EF12D3()。

4.1、sub_EF12D3 – 解密PE


连续两次调用 sub_EF1063()
APT28 样本分析报告


4.1.1、sub_EF1063

查看 sub_EF1063() 内部代码后,猜测也是执行字符串解密操作:
APT28 样本分析报告
结合 x32dbg 可知:
第 1 次调用,解密字符串:cdnver.dll第 2 次调用,解密字符串:LOCALAPPDATA

因此,重命名 sub_EF1063() 为 decryptStr_sub_EF1063();之后调用函数 sub_EF1000()。

4.1.2、sub_EF1000

内部代码看着也像是在进行解密操作,对 0x00F0B880 处的 0x59BD 字节的数据进行解密,解密后的数据如下,可以很明显地看到 4D5A:
APT28 样本分析报告
解密出一个 PE 文件数据后,函数结束;sub_EF12D3() 分析完成,返回到 WinMain()。

4.2 sub_EF13F7 – 解压缩PE


连续两次调用 decryptStr_sub_EF1DEF(),解密字符串,可以看到是与解压缩有关的 API :RtlGetCompressionWorkSpaceSize 和 RtlDecompressBuffer;
注:RtlGetCompressionWorkSpaceSize 函数用于确定 RtlCompressBuffer 和 RtlDecompressBuffer 函数工作空间缓冲区的正确大小。

之后调用 LoadLibraryW 加载 ntdll,并调用 GetProcAddress 获取上述两个 API 的函数地址;

调用 RtlGetCompressionWorkSpaceSize 获取缓冲区大小,在调用 HeapAlloc 申请空间;

最后调用 RtlDecompressBuffer 对刚刚解密出的 PE 数据进行解压缩:

APT28 样本分析报告


4.3、sub_EF155B – 释放DLL


4.3.1、sub_EF10CD

连续调用两次 decryptStr_sub_EF1DEF,解密得到字符串:SystemRoot 和 \System32;

之后调用 GetEnvironmentVariableW 获取 LOCALAPPDATA 环境变量:
APT28 样本分析报告
这里为:C:\Users\Reverse\AppData\Local,再将 “cdnver.dll” 与之拼接得到了释放文件的目标路径:

C:\Users\Reverse\AppData\Local\cdnver.dll
APT28 样本分析报告
返回 sub_EF155B 继续执行;

4.3.2、sub_EF155B 继续执行

调用 LoadLibraryW 加载 Kernel32.dll,并获取 CreateFile 函数地址并调用,创建文件:
APT28 样本分析报告
获取 WriteFile 函数地址并调用,把 PE 数据写入文件:
APT28 样本分析报告
文件释放完成。

4.4、sub_EF264C – 权限维持


连续 7 次调用 decryptStr_sub_EF1DEF 进行字符串解密,得到:
rundll32.exe#1UserInitMprLogonScriptcdnver.dllEnvironmentLOCALAPPDATAcdnver.bat
APT28 样本分析报告
调用 LoadLibraryW 加载 Advapi32.dll,并获取 RegOpenKeyExW 函数地址,并调用,其中 0x80000001 是 HKEY_CURRENT_USER:
APT28 样本分析报告
获取环境变量,并判断:
APT28 样本分析报告
从 ”cdnver.dll“ 中查找 “.”,获取文件后缀:
APT28 样本分析报告
之后确认只有一个 “.” 出现。


4.4.1、sub_EF2030 – bat脚本

连续 6 次调用 decryptStr_sub_EF1DEF 解密字符串:
startLOCALAPPDATAcdnver.dll#1rundll32.execdnver.bat

调用 WideCharToMultiByte 将宽字符转为多字节字符;

调用 LoadLibraryW 加载 Kernel32.dll,_getenv 获取环境变量,获取 CreateFileA 的函数地址并调用创建文件
C:UsersReverseAppDataLocalcdnver.bat:
APT28 样本分析报告
构建脚本字符串 start rundll32.exe “C:UsersReverseAppDataLocalcdnver.dll”,#1,调用 WriteFile 将脚本写入 bat 文件。
APT28 样本分析报告
返回 sub_EF264C 继续执行;
拼接构造字符串 C:\Users\Reverse\AppData\Local\cdnver.bat,
APT28 样本分析报告
调用 LoadLibraryW 加载 Advapi32.dll,获取 RegSetValueExW 函数地址,
APT28 样本分析报告
设置注册表,使用 Logon Scripts 机制实现持久化:
APT28 样本分析报告

Logon Scripts 机制:Windows允许在特定用户或用户组登录系统时运行脚本,也就是能使脚本优先于杀毒软件执行。

注册表设置前后对比:
APT28 样本分析报告
APT28 样本分析报告


4.5、sub_EF1707 – 执行dll


调用 _wcsstr 函数在 cdnver.dll 路径中查找 “.dll”:
APT28 样本分析报告
若找到子串,连续 3 次调用 decryptStr_sub_151DEF 解密字符串:
代码
APT28 样本分析报告


4.5.1、sub_EF1D09

调用 OpenProcessToken、GetTokenInformation、GetSidSubAuthorityCount、GetSidSubAuthority 等 API 获取进程的 RID 信息:
APT28 样本分析报告
APT28 样本分析报告
x32dbg 中,RID = 0x2000,为中完整性:
APT28 样本分析报告
返回 sub_EF1707 继续执行,将 eax(0x1) 与 3 比较,不等则跳转到 loc_EF1811 执行 shell 命令,之后返回:
APT28 样本分析报告
若 sub_EF1707 返回值为 3,则继续执行 00EF17DE:


4.5.2、sub_EF1B02

首先会调用 sub_EF1957 函数:首先加载 AdvApi32.dll,获取 OpenProcessToken 的函数地址并调用;获取 LookupPrivilegeValue 的函数地址并调用,查看系统权限的特权值,第二个参数表示所要查看的特权信息的名称 SeSecurityPrivilege:
APT28 样本分析报告
调用 AdjustTokenPrivileges 修改令牌权限,再调用 LookupPrivilegeValue,所要查看的特权信息的名称 SeTcbPrivilege:
APT28 样本分析报告
最后再调用一次 AdjustTokenPrivileges 修改令牌权限。
APT28 样本分析报告
提权完成,返回 sub_EF1B02。
调用 sub_EF1C3D 函数:通过调用 CreateToolhelp32Snapshot、Process32FirstW、Process32NextW 等 API 遍历进程,查找 explorer.exe 进程:
APT28 样本分析报告
调用 OpenProcess、OpenProcessToken 等 API 获取 explorer.exe 进程的访问令牌句柄 TokenHandle,并作为结果返回:
APT28 样本分析报告
在进行内存初始化后,调用 sub_EF18DC 函数,向内存中写入命令:
APT28 样本分析报告
返回 sub_EF1B02。
加载 AdvApi32.dll,获取 CreateProcessAsUser 函数地址,并调用:
APT28 样本分析报告

CreateProcessAsUser 函数创建一个新的进程及其主线程,其第三个参数为指向命令行字符串的指针,即:RunDll32.exe “C:UsersReverseAppDataLocalcdnver.dll”,#1

通常,调用 CreateProcessAsUser 函数的进程必须具有 SE_INCREASE_QUOTA_NAME 特权,并且如果令牌不可分配,则可能需要 SE_ASSIGNPRIMARYTOKEN_NAME 特权。

返回 sub_EF1707,进行内存释放等操作。

返回 _WinMain,最后调用 sub_EF18AD。


4.6、sub_EF18AD


调用 DeleteFileW 删除文件
APT28 样本分析报告

综上,该样本的主要行为有:
  • 在 LOCALAPPDATA 目录下释放 dll 和 bat;

  • 修改注册表实现持久化;

  • 提权,加载执行 cdnver.dll。


参考

[1]. Windows普通程序与服务程序的初始特权(Privileges)https://blog.csdn.net/Joal_zhu/article/details/7513858

[2]. [原创]【APT样本分析】APT28样本超详细分析https://bbs.pediy.com/thread-272043.htm#msg_header_h1_3

[3]. “奇幻熊”(APT28)组织最新攻击https://www.freebuf.com/articles/network/162715.html

APT28 样本分析报告

– End –


APT28 样本分析报告


看雪ID:逆时针向左

https://bbs.pediy.com/user-home-781904.htm

  *本文由看雪论坛 逆时针向左 原创,转载请注明来自看雪社区。


APT28 样本分析报告

峰会回顾:https://mp.weixin.qq.com/s/eEbc8k8H9Pc2K0d_AHG3BA




# 往期推荐






APT28 样本分析报告


APT28 样本分析报告

球分享

APT28 样本分析报告

球点赞

APT28 样本分析报告

球在看



APT28 样本分析报告

点击“阅读原文”,了解更多!

原文始发于微信公众号(看雪学苑):APT28 样本分析报告

版权声明:admin 发表于 2022年10月31日 下午6:02。
转载请注明:APT28 样本分析报告 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...