APT28是一个疑似具有俄罗斯政治背景的APT组织。笔者根据公开的情报整理到的信息大概如下。
本次的样本来源于沙箱app.any.run:https://app.any.run/tasks/d6a8d1db-52c8-4371-b6d3-bf740408bb10/
上传到app.any.run的时间为2020年7月27.
可以看到样本已经标记为了APT28
样本MD5为:36524c90ca1fac2102e7653dfadb31b2
样本下载到本地之后通过exeinfo查看样本可以知道样本是标准VC编译的程序。
样本运行后,最直接的行为就是在本地appdata路径释放了一个dll文件和一个bat文件,然后在左边的fakenet窗口中可以看到发送了超级长的一段base64编码数据,这次猜测可能是通过base64编码了本地收集到的信息然后传到C2.
转到bat和dll文件的目录下,可以看到bat的内容就是调用rundll32.exe去启用加载这个dll。
所以看样子,我们拿到的这个exe有很大的概率是一个Dropper。
WinMain的入口点没什么特殊的,进来之后调用了三次sub_401DEF函数,这种情况下,sub_401DEF一般都是解密函数。
解密的第一个字符串是SystemRootSysWow64
所以我们将sub_401DEF函数重命名为:Rename_decodeStr
三个字符串解密之后,程序会再调用一个名为sub_4012D3的函数,这个函数如果调用失败,程序将通过jmp跳转到最后结束运行。所以sub_4012D3有可能是进行环境校验啥的。
WinMain->12d3
12D3函数进来之后,首先会通过GetProcessHeap获取当前进程的堆地址,然后通过HeapAlloc分配一个堆空间。
成功分配之后,程序会调用sub_401063继续分配
12D3函数执行完成之后,程序会调用执行sub_4013F7
WinMain->13F7
该函数进来,程序首先是通过之前分析的解密函数,解密了两个解压相关的API:
RtlGetCompressionWorkSpaceSize
RtlDecompressBuffer
然后LoadLibrary之后通过GetProcAddress获取刚才解密出来的API函数的地址
然后调用了RtlDecompressBuffer,根据参数来看,这里应该是会将目标数据解压缩到esi所在的地址
至此,sub_4013F7函数功能分析完毕,经过分析,该函数用于解压缩数据为PE文件。
WinMain->155B
在115B函数中,程序首先执行了一个call ,然后就准备LoadLibrary
跟进到sub_4010CD中,程序首先是解密了两个字符串,分别是SystemRoot和System32
然后就尝试通过GetEnvironmentVariableW获取LOCALAPPDATA环境变量的路径。
成功获取,根据行为分析我们可以知道,这个路径是后续用于释放文件的。
然后尝试通过lstrcatW拼接字符串,获取更完整的路径。
至此,sub_4010CD函数分析完成,我们回到1565B函数中
程序是通过了拆分字符串的方式,组装出了Kernel32.dll
成功获取API地址之后,程序首先跳转到loc_4016E3去,然后通过jmp函数又跳转回来继续执行。
跳回来之后,程序通过CreateFile创建这个dll的文件对象。
同样的方式,去获取WriteFile的API地址:
这里是closeHandle之后,dll文件写入成功。
通过分析我们可以知道,该函数的主要功能是解压缩资源,释放目标dll文件到指定的目录。
回到WinMain中,155B函数调用完成之后,程序会调用sub_40264C函数。
WinMain->264C
然后老套路解密出了操作注册表的API:RegOpenKeyExw
然后循环的去调用之前的解密函数,逐步解密出bat的完整内容
文件对象创建成功之后,将调用执行dll的命令写入进去:
到这里,sub_402030函数分析完成,该函数的主要功能就是将启动dll的命令写入到bat文件中。
然后创建一个UserInitMprLogonScript的注册表,这是一种用于权限维持的操作。因为HKEY_CURRENT_USEREnvironment
Logon Scripts 的执行顺序在杀软钱,所以Logon Scripts可以优先于杀软执行,绕过杀软对敏感操作的拦截。
该函数的主要功能就是释放bat文件,然后写入Logon Scripts注册表以绕过杀软。
接下来是在WinMain中调用sub_401707函数:
WinMain->1707
1707进来之后首先是解密了三个字符串,分别是RunDll32.exe ,#1 和Open
接着call到了sub_401D09中。该函数用于获取进程的一个执行权限
这里加载执行之后,程序就会做一些收尾操作,然后退出当前的程序了。
这里程序其实配置了多种启动方式,感兴趣的可以看下。
该样本功能非常完善,包括信息收集、信息上传、下载、执行PE、截屏等。
网上关于该木马的分析报告还挺多的,这里就随便看一下,且因为篇幅的原因,也不能写太长啦~ 这就是一个标准的远控木马,没有什么混淆,有一些自定义的解密函数,跟着调试很快就可以调试完。
使用IDA加载该dll,由bat文件中的执行指令可以知道,程序调用该dll的时候,是执行了序号为1的导出函数。
start rundll32.exe “C:UsersAdministratorAppDataLocalcdnver.dll”,#1
该函数结构非常简单,进来直接就是CreateThread执行了sub_10002CA0,这里是该特马的入口点。
#1->2ca0
2CA0进来调用的第一个函数是sub_10002CFD
sub_10002CFD
程序首先是通过10002F3F解密得到了一个互斥体名,然后通过CreateMuteA创建互斥体。
通过GetVolumeInformationW获取磁盘信息:
调用obtainUserAgentString检索当前的User-Agenet HTTP请求标头字符串。
打开:SoftwareMicrosoftWindowsCurrentVersionInternet SettingServers注册表键值,将C2信息加密后存储在这个键值的Domain项中。
将接下来要请求的信息base64编码,方便之后传输。
样本会来回在googl和真实的c2之间来回切换通信,达到隐藏通信的目的。
该样本中使用的是标准的HttpSendRequestA系列API进行网络请求:
发送数据之后,程序会通过InternetReadFile接收并解析返回值。
关于cdnver.dll就分析到这里。感兴趣的小伙伴可以到app.any.run上下载该样本到本地继续分析。
经过分析,可以看到这是一个apt28的老样本,Dropper释放出来的payload就是经典的APT28远控木马。现在他们更常用的payload是由Dephi编写的Zebrocy,后面有机会再分享给大家。
- End -
精彩推荐
蔓灵花(BITTER)一个新版本的Loader分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/104425.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论