本文为看雪论坛优秀文章
看雪论坛作者ID:逆时针向左
一
样本HASH
二
基本信息
三
行为分析
关键在设置 EnvironmentUserInitMprLogonScript 为 C:UsersReverseAppDataLocalcdnver.bat 实现持久化。
在 LOCALAPPDATA 目录下释放了两个文件:cdnver.dll 和 cdnver.bat;
cdnver.dll 的 MD5 为 AA2CD9D9FC5D196CAA6F8FD5979E3F14
bat 脚本内容为:start rundll32.exe “C:UsersReverseAppDataLocalcdnver.dll”,#1
创建进程 rundll32.exe,加载释放的文件:cdnver.dll;
从行为监控中也可以看出(释放隐藏文件、隐秘执行):
使用 FakeNet,捕获得域名 cdnverify.net,使用奇安信威胁分析平台查询:
可以确定该样本与 APT 组织有关。
四
详细分析
使用 IDA 打开后,停在 WinMain 处,x32dbg 的 Base 为 0x00EF1000,在 IDA 中 Rebase 为 0x00EF0000,则 WinMain 的地址为 0x00EF1ECF:
结合 x32dbg 可知:
第 1 次调用,解密字符串:SystemRoot\SysWow64
第 2 次调用,解密字符串:SystemRoot\System32
第 3 次调用,解密字符串:TEMP
因此,重命名 sub_EF1DEF() 为 decryptStr_sub_EF1DEF();之后调用函数 sub_EF12D3()。
4.1、sub_EF12D3 – 解密PE
4.1.1、sub_EF1063
结合 x32dbg 可知:
第 1 次调用,解密字符串:cdnver.dll
第 2 次调用,解密字符串:LOCALAPPDATA
4.1.2、sub_EF1000
解密出一个 PE 文件数据后,函数结束;sub_EF12D3() 分析完成,返回到 WinMain()。
4.2 sub_EF13F7 – 解压缩PE
调用 RtlGetCompressionWorkSpaceSize 获取缓冲区大小,在调用 HeapAlloc 申请空间;
最后调用 RtlDecompressBuffer 对刚刚解密出的 PE 数据进行解压缩:
4.3、sub_EF155B – 释放DLL
4.3.1、sub_EF10CD
之后调用 GetEnvironmentVariableW 获取 LOCALAPPDATA 环境变量:
这里为:C:\Users\Reverse\AppData\Local,再将 “cdnver.dll” 与之拼接得到了释放文件的目标路径:
返回 sub_EF155B 继续执行;
4.3.2、sub_EF155B 继续执行
获取 WriteFile 函数地址并调用,把 PE 数据写入文件:
文件释放完成。
4.4、sub_EF264C – 权限维持
rundll32.exe
#1
UserInitMprLogonScript
cdnver.dll
Environment
LOCALAPPDATA
cdnver.bat
调用 LoadLibraryW 加载 Advapi32.dll,并获取 RegOpenKeyExW 函数地址,并调用,其中 0x80000001 是 HKEY_CURRENT_USER:
获取环境变量,并判断:
从 ”cdnver.dll“ 中查找 “.”,获取文件后缀:
之后确认只有一个 “.” 出现。
4.4.1、sub_EF2030 – bat脚本
start
LOCALAPPDATA
cdnver.dll
#1
rundll32.exe
cdnver.bat
调用 LoadLibraryW 加载 Kernel32.dll,_getenv 获取环境变量,获取 CreateFileA 的函数地址并调用创建文件C:UsersReverseAppDataLocalcdnver.bat:
构建脚本字符串 start rundll32.exe “C:UsersReverseAppDataLocalcdnver.dll”,#1,调用 WriteFile 将脚本写入 bat 文件。
返回 sub_EF264C 继续执行;
调用 LoadLibraryW 加载 Advapi32.dll,获取 RegSetValueExW 函数地址,
设置注册表,使用 Logon Scripts 机制实现持久化:
4.5、sub_EF1707 – 执行dll
若找到子串,连续 3 次调用 decryptStr_sub_151DEF 解密字符串:
4.5.1、sub_EF1D09
x32dbg 中,RID = 0x2000,为中完整性:
返回 sub_EF1707 继续执行,将 eax(0x1) 与 3 比较,不等则跳转到 loc_EF1811 执行 shell 命令,之后返回:
若 sub_EF1707 返回值为 3,则继续执行 00EF17DE:
4.5.2、sub_EF1B02
调用 AdjustTokenPrivileges 修改令牌权限,再调用 LookupPrivilegeValue,所要查看的特权信息的名称 SeTcbPrivilege:
最后再调用一次 AdjustTokenPrivileges 修改令牌权限。
提权完成,返回 sub_EF1B02。
调用 sub_EF1C3D 函数:通过调用 CreateToolhelp32Snapshot、Process32FirstW、Process32NextW 等 API 遍历进程,查找 explorer.exe 进程:
调用 OpenProcess、OpenProcessToken 等 API 获取 explorer.exe 进程的访问令牌句柄 TokenHandle,并作为结果返回:
在进行内存初始化后,调用 sub_EF18DC 函数,向内存中写入命令:
返回 sub_EF1B02。
加载 AdvApi32.dll,获取 CreateProcessAsUser 函数地址,并调用:
返回 _WinMain,最后调用 sub_EF18AD。
4.6、sub_EF18AD
-
在 LOCALAPPDATA 目录下释放 dll 和 bat;
-
修改注册表实现持久化;
-
提权,加载执行 cdnver.dll。
参考
看雪ID:逆时针向左
https://bbs.pediy.com/user-home-781904.htm
峰会回顾:https://mp.weixin.qq.com/s/eEbc8k8H9Pc2K0d_AHG3BA
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
原文始发于微信公众号(看雪学苑):APT28 样本分析报告