APT28样本超详细分析
2022-4-15 17:59:0 Author: mp.weixin.qq.com(查看原文) 阅读量:41 收藏


本文为看雪论坛优秀文章
看雪论坛作者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漏洞之战—插件化漏洞和解压缩漏洞详解

球分享

球点赞

球在看

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


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458437941&idx=1&sn=294e4e5b8c644383f89a00ac95a424ae&chksm=b18ff9bf86f870a9a94c03c1036a44b6161718391bbaf3c22d0c23c9fbdb3ef62dee4d21b1a7#rd
如有侵权请联系:admin#unsafe.sh