查看原文
其他

APT28样本超详细分析

FSNSN 看雪学苑 2022-07-01


本文为看雪论坛优秀‍‍‍文章
看雪论坛作者ID:FSNSN




基本信息


病毒名称:ff808d0a12676bfac88fd26f955154f8884f2bb7c534b9936510fd6296c543e8
MD5:36524C90CA1FAC2102E7653DFADB31B2
SHA1:8D6DB316EA4E348021CB59CF3C6EC65C390F0497
CRC32:04DA02C3
样本来源:anyrun




测试环境及工具


2.1测试环境


Win7 x64 SP1


2.2测试工具


2.2.1查壳工具

ExeinfoPE


2.2.2监测工具

火绒剑、Processonitor、Regshot


2.2.3调试工具

OD、IDA




基本静态分析


3.1字符串分析


日期月份时间相关的字符串

各种字符,猜测跟加密相关:

各个国家的语言:

3.2PE分析


3.2.1导入表


1、KERNEL32.dll

关键函数
 
进程遍历:
CreateToolhelp32Snapshot
Process32NextW
文件操作:
WriteFile
DeleteFile
CreateFile
FlushFileBuffers

获取当前操作系统的信息:
GetEnviromentVariable

解密相关:
Decodeointer

反调试相关:
IsDebuggerPresent
IsProcessorFeaturePresent //判断处理器相关信息
 
2、ADVAPI32.dll
可能跟提权相关
 
3、SHELL32.dll
命令执行相关


3.3壳分析


无壳




行为分析


4.1文件监控

创建、写入、修改文件


4.2进程监控

启动一个rundll32.exe进程

通过rundll32.exe加载释放的dll文件


4.3网络监控

因为使用的模拟网络,所以需要根据DNS请求的域名进行过滤

威胁情报进行查询


4.4注册表监控

敏感操作:
注册表HKCR\Environment\UserInitMprLogonScript键值所指的程序会在杀毒软件启动前启动,而且修改它不需要管理员权限,因此我们可以通过其来达到权限维持的效果。
 
综上,可以看出,我们拿到的样本,执行后,释放一个bat文件和一个dll文件,bat文件调用rundll32.exe执行dll文件,并写入注册表进行权限维持。网络方面收集完本机信息会去访问C2服务器。核心功能应该是在dll文件中,接下来先分析这个母体文件。




综合分析


IDA大致分析样本流程如下:

下面结合OD详细分析:
OD加载后,停留在此处。

执行大量函数,无法直观判断具体功能。



一直执行下去发现,程序终止,所以猜测上面的函数应该有反调试的功能。

根据动态获取的基地址,结合IDA的OEP,直接跳转程序入口,下断点并执行到此处。

程序开始执行。

1DEF函数

先是执行了三个相同的函数。

函数内部有循环和运算操作,猜测是进行加解密操作。

OD执行查看,解密字符串如下,是三个路径。
 
12D3函数

两次执行1063函数解密字符串:
第一次:cdnver.dll

函数内部如下:

第二次:函数内部逻辑同上
 
1000函数

解密一段数据,该数据是PE文件
解密前:

解密后:

 
13F7函数

1DEF函数解密字符串:

实现数据压缩解压缩

解压到此处

解压完毕
 
155B函数

执行10CD函数
执行1DEF函数解密两个字符串


获取当前环境变量的字符串

加载Kernel32.dll

获取CreateFile函数地址

调用CreateFile创建一个文件


获取WriteFile函数的地址


此时文件已经写入完毕
 
264C函数

1DEF执行7次解密字符串:

加载ADVAPI32.dll,里面包含注册表、事件日志等相关操作

获取RegOpenKeyExW函数地址,用于打开注册表键

主键名称对应的常数


获取环境变量及处理字符串工作
_wgetenv:从环境中取字符串,获取环境变量

获取“LOCALAPPDATA”的环境变量

_wcsstr:从字符串中寻找子串
返回值:返回str中第一次出现strSearch的指针,如果strSearch未出现在str中,则返回NULL。如果strSearch指向长度为零的字符串,则函数返回str。

从cdnver.dll找".",获取文件后缀名字

循环判断,防止文件名中有不止一个"."

直到文件名中没有".",EAX返回值是0
 
2030函数

1DEF解密字符串

将其宽字节转多字节,UNICODE转ASCII

同样的对字符串"#1"、"cdnver.dll"、"LOCALAPPDATA"、"start"、"cdnver.bat"进行处理

获取CreateFileA的函数地址,准备创建文件

创建文件

创建文件完毕

构建字符串

字符串构建完成

通过WriteFile,写入文件

写入成功

lstrcatW:字符串拼接,该函数将一个字符串附加在另一个字符串后面。

构造字符串

加载ADVAPI32.dll,获取RegSetValueEx的函数地址

设置注册表,权限维持操作。因为HKEY_CURRENT_USER\Environment\Logon Scripts 的执行顺序在杀软前,所以Logon Scripts可以优先于杀软执行,绕过杀软对敏感操作的拦截。

设置前和设置后

 
1707函数

通过_wcsstr找".dll"的子串

解密三个字符串
 
1D09函数

判断当前函数的运行权限

判断运行权限是属于高权限0x3000


结果是0x1000,直接退出
结果是0x2000,返回值是1
结果是0x3000,返回值是2
结果是0x4000,返回值是3
结果是0x5000,直接退出
 
回到1707函数
如果是system权限
执行1B02函数
执行1957函数
加载一个Advapi32.dll

获取OpenProcessToken函数地址

调用OpenProcessToken函数

获取LookupPrivilegeValue函数地址

调用LookupPrivilegeValue函数

调用AdjustTokenPrivileges函数

上面是将程序更改为SeSecurityPrivilege权限,下面更改成SeTcbPrivilege权限

 
执行1C3D函数

该函数功能,遍历进程,找到explorer进程

通过OpenProcess函数打开explorer进程,通过OpenProcessToken函数获得explorer的令牌句柄,将OpenProcessToken的第三个参数TokenHandle返回。
 
回到1B02函数
内存初始化
执行18DC函数,该函数,将ESI的字符串写入内存

再回到1B02函数
加载Advapi32.dll

获取CreateProcessAsUser函数地址

执行CreaterocessAsUser函数,以当前登录用户身份运行程序

执行完毕后
回到1707函数,执行后续的内存释放操作

如果是administrator(高权限)权限,则直接执行


至此详细分析完毕。
梳理如下:




应对策略


样本行为
1、释放文件C:\Users\Administrator\AppData\Local\cdnver.bat和C:\Users\Administrator\AppData\Local\cdnver.dll
2、修改注册表

基于此样本,删除文件、还原注册表即可。




看雪ID:FSNSN

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

*本文由看雪论坛 FSNSN 原创,转载请注明来自看雪社区



# 往期推荐

1.CVE-2016-0095提权漏洞学习笔记

2.java序列化与反序列化

3.CVE-2022-21999 Windows Print Spooler 权限提升漏洞分析

4.The House of Mind (FASTBIN METHOD) + PRIME

5.totolink登陆跳过—分析思路

6.Android APP漏洞之战—插件化漏洞和解压缩漏洞详解






球分享

球点赞

球在看



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

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存