一例APT28(Fancybear)样本详细分析

  • A+
所属分类:安全文章

一例APT28(Fancybear)样本详细分析
 
0X00 背景
APT28是一个疑似具有俄罗斯政治背景的APT组织。笔者根据公开的情报整理到的信息大概如下。
一例APT28(Fancybear)样本详细分析
本次的样本来源于沙箱app.any.run:https://app.any.run/tasks/d6a8d1db-52c8-4371-b6d3-bf740408bb10/
上传到app.any.run的时间为2020年7月27.
一例APT28(Fancybear)样本详细分析
可以看到样本已经标记为了APT28
样本MD5为:36524c90ca1fac2102e7653dfadb31b2
 
0X01样本基本信息

样本下载到本地之后通过exeinfo查看样本可以知道样本是标准VC编译的程序。
一例APT28(Fancybear)样本详细分析
使用火绒剑和fakenet跑一下样本的行为:
一例APT28(Fancybear)样本详细分析
样本运行后,最直接的行为就是在本地appdata路径释放了一个dll文件和一个bat文件,然后在左边的fakenet窗口中可以看到发送了超级长的一段base64编码数据,这次猜测可能是通过base64编码了本地收集到的信息然后传到C2.
一例APT28(Fancybear)样本详细分析
转到bat和dll文件的目录下,可以看到bat的内容就是调用rundll32.exe去启用加载这个dll。
一例APT28(Fancybear)样本详细分析
所以看样子,我们拿到的这个exe有很大的概率是一个Dropper。

0X02 Dropper分析
使用IDA加载原始样本。
一例APT28(Fancybear)样本详细分析
WinMain的入口点没什么特殊的,进来之后调用了三次sub_401DEF函数,这种情况下,sub_401DEF一般都是解密函数。
一例APT28(Fancybear)样本详细分析
解密的第一个字符串是SystemRootSysWow64
第二个串是SystemRootSysWow64
第三个串是:TEMP
一例APT28(Fancybear)样本详细分析
所以我们将sub_401DEF函数重命名为:Rename_decodeStr
三个字符串解密之后,程序会再调用一个名为sub_4012D3的函数,这个函数如果调用失败,程序将通过jmp跳转到最后结束运行。所以sub_4012D3有可能是进行环境校验啥的。
一例APT28(Fancybear)样本详细分析

WinMain->12d3

12D3函数进来之后,首先会通过GetProcessHeap获取当前进程的堆地址,然后通过HeapAlloc分配一个堆空间。
一例APT28(Fancybear)样本详细分析
成功分配之后,程序会调用sub_401063继续分配
一例APT28(Fancybear)样本详细分析
然后在分配的堆空间中解密出这个dll名称
一例APT28(Fancybear)样本详细分析
第二次解密出appdata这个环境变量的名称
一例APT28(Fancybear)样本详细分析
12D3函数执行完成之后,程序会调用执行sub_4013F7

WinMain->13F7

该函数进来,程序首先是通过之前分析的解密函数,解密了两个解压相关的API:
RtlGetCompressionWorkSpaceSize
RtlDecompressBuffer
这里应该是为等会释放文件做准备了。
一例APT28(Fancybear)样本详细分析
然后LoadLibrary之后通过GetProcAddress获取刚才解密出来的API函数的地址
一例APT28(Fancybear)样本详细分析
然后直接调用该函数,参数为eax:
一例APT28(Fancybear)样本详细分析
然后调用了RtlDecompressBuffer,根据参数来看,这里应该是会将目标数据解压缩到esi所在的地址
一例APT28(Fancybear)样本详细分析
函数执行之后成功解压出一个PE
一例APT28(Fancybear)样本详细分析
一例APT28(Fancybear)样本详细分析
至此,sub_4013F7函数功能分析完毕,经过分析,该函数用于解压缩数据为PE文件。
接下来是调用sub_40155B函数。

WinMain->155B

在115B函数中,程序首先执行了一个call ,然后就准备LoadLibrary
一例APT28(Fancybear)样本详细分析
155B->sub_4010CD
跟进到sub_4010CD中,程序首先是解密了两个字符串,分别是SystemRoot和System32
然后就尝试通过GetEnvironmentVariableW获取LOCALAPPDATA环境变量的路径。
一例APT28(Fancybear)样本详细分析
成功获取,根据行为分析我们可以知道,这个路径是后续用于释放文件的。
一例APT28(Fancybear)样本详细分析
然后尝试通过lstrcatW拼接字符串,获取更完整的路径。
一例APT28(Fancybear)样本详细分析
最后拼接出解密dll的完整路径:
至此,sub_4010CD函数分析完成,我们回到1565B函数中
程序是通过了拆分字符串的方式,组装出了Kernel32.dll
一例APT28(Fancybear)样本详细分析
然后准备调用CreateFileW
一例APT28(Fancybear)样本详细分析
成功获取API地址之后,程序首先跳转到loc_4016E3去,然后通过jmp函数又跳转回来继续执行。
一例APT28(Fancybear)样本详细分析
跳回来之后,程序通过CreateFile创建这个dll的文件对象。
一例APT28(Fancybear)样本详细分析
同样的方式,去获取WriteFile的API地址:
一例APT28(Fancybear)样本详细分析
然后调用WriteFile将dll文件写入过去:
一例APT28(Fancybear)样本详细分析
这里是文件对象创建成功
一例APT28(Fancybear)样本详细分析
这里是closeHandle之后,dll文件写入成功。
一例APT28(Fancybear)样本详细分析
到这里,sub_40155B函数就分析完成。
通过分析我们可以知道,该函数的主要功能是解压缩资源,释放目标dll文件到指定的目录。
回到WinMain中,155B函数调用完成之后,程序会调用sub_40264C函数。

WinMain->264C

264c函数进来之后就一直在解密字符串:
一例APT28(Fancybear)样本详细分析
解密的第一个字符串是rundll32.exe
一例APT28(Fancybear)样本详细分析
解密出来的字符串分别如下:
一例APT28(Fancybear)样本详细分析
然后老套路解密出了操作注册表的API:RegOpenKeyExw
一例APT28(Fancybear)样本详细分析
然后循环的去调用之前的解密函数,逐步解密出bat的完整内容
一例APT28(Fancybear)样本详细分析
尝试通过CreateFileA创建文件:
一例APT28(Fancybear)样本详细分析
一例APT28(Fancybear)样本详细分析
文件对象创建成功之后,将调用执行dll的命令写入进去:
一例APT28(Fancybear)样本详细分析
写入成功之后就是一系列的收尾工作:
一例APT28(Fancybear)样本详细分析
到这里,sub_402030函数分析完成,该函数的主要功能就是将启动dll的命令写入到bat文件中。
一例APT28(Fancybear)样本详细分析
然后创建一个UserInitMprLogonScript的注册表,这是一种用于权限维持的操作。因为HKEY_CURRENT_USEREnvironment
Logon Scripts 的执行顺序在杀软钱,所以Logon Scripts可以优先于杀软执行,绕过杀软对敏感操作的拦截。
一例APT28(Fancybear)样本详细分析
到这里,264C函数也执行完毕。
该函数的主要功能就是释放bat文件,然后写入Logon Scripts注册表以绕过杀软。
接下来是在WinMain中调用sub_401707函数:
一例APT28(Fancybear)样本详细分析

WinMain->1707

1707进来之后首先是解密了三个字符串,分别是RunDll32.exe ,#1 和Open
一例APT28(Fancybear)样本详细分析
接着call到了sub_401D09中。该函数用于获取进程的一个执行权限
一例APT28(Fancybear)样本详细分析
获取之后,程序会带参数加载这个dll文件。
一例APT28(Fancybear)样本详细分析
这里加载执行之后,程序就会做一些收尾操作,然后退出当前的程序了。
这里程序其实配置了多种启动方式,感兴趣的可以看下。
最后,程序尝试通过DeleteFile删除自身
一例APT28(Fancybear)样本详细分析
到这里,Dropper这个程序就完全分析完成。
 
0X03 cdnver.dll分析
释放出来的这个dll就是APT28的特马。
该样本功能非常完善,包括信息收集、信息上传、下载、执行PE、截屏等。
网上关于该木马的分析报告还挺多的,这里就随便看一下,且因为篇幅的原因,也不能写太长啦~ 这就是一个标准的远控木马,没有什么混淆,有一些自定义的解密函数,跟着调试很快就可以调试完。
使用IDA加载该dll,由bat文件中的执行指令可以知道,程序调用该dll的时候,是执行了序号为1的导出函数。
start rundll32.exe “C:UsersAdministratorAppDataLocalcdnver.dll”,#1
一例APT28(Fancybear)样本详细分析
该函数结构非常简单,进来直接就是CreateThread执行了sub_10002CA0,这里是该特马的入口点。
一例APT28(Fancybear)样本详细分析

#1->2ca0

2CA0进来调用的第一个函数是sub_10002CFD
一例APT28(Fancybear)样本详细分析

sub_10002CFD

程序首先是通过10002F3F解密得到了一个互斥体名,然后通过CreateMuteA创建互斥体。
一例APT28(Fancybear)样本详细分析
一例APT28(Fancybear)样本详细分析
通过gethostbyname获取当前的主机名:
一例APT28(Fancybear)样本详细分析
通过GetVolumeInformationW获取磁盘信息:
一例APT28(Fancybear)样本详细分析
调用obtainUserAgentString检索当前的User-Agenet HTTP请求标头字符串。
一例APT28(Fancybear)样本详细分析
一例APT28(Fancybear)样本详细分析
打开:SoftwareMicrosoftWindowsCurrentVersionInternet SettingServers注册表键值,将C2信息加密后存储在这个键值的Domain项中。
一例APT28(Fancybear)样本详细分析
解密出域名:cdnverify.net
一例APT28(Fancybear)样本详细分析
该域名是apt28的经典域名
一例APT28(Fancybear)样本详细分析
将接下来要请求的信息base64编码,方便之后传输。
一例APT28(Fancybear)样本详细分析
首先对google发起网络请求,确保网络畅通。
一例APT28(Fancybear)样本详细分析
样本会来回在googl和真实的c2之间来回切换通信,达到隐藏通信的目的。
该样本中使用的是标准的HttpSendRequestA系列API进行网络请求:
一例APT28(Fancybear)样本详细分析
发送数据之后,程序会通过InternetReadFile接收并解析返回值。
一例APT28(Fancybear)样本详细分析
关于cdnver.dll就分析到这里。感兴趣的小伙伴可以到app.any.run上下载该样本到本地继续分析。
 
0X04总结
经过分析,可以看到这是一个apt28的老样本,Dropper释放出来的payload就是经典的APT28远控木马。现在他们更常用的payload是由Dephi编写的Zebrocy,后面有机会再分享给大家。
一例APT28(Fancybear)样本详细分析


- End -

精彩推荐

Go二进制文件逆向分析从基础到进阶——综述

利用 ZoomEye 追踪多种 Redteam C&C 后渗透攻击框架

七夕节网安男孩自我保护指南

蔓灵花(BITTER)一个新版本的Loader分析

一例APT28(Fancybear)样本详细分析

一例APT28(Fancybear)样本详细分析


戳“阅读原文”查看更多内容

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: