【APT】响尾蛇(SideWinder)APT组织样本分析

基础信息

名称:NDC Participants.docx
类型:.doc
MD5:df020e81b7ca32868a8ac1f5eddd086f
描述:通过远程模板注入技术加载含有CVE-2017-11882漏洞的RTF文档,执行shellcode
   释放执行使用“DotNetToJScript”生成的经过混淆处理的js脚本(1.a)
   释放.NET DLL,利用白加黑执行最终RAT

样本分析

通过远程模板注入技术加载含有CVE-2017-11882漏洞的RTF文档

RTF文档通过CVE-2017-11882漏洞执行ShellCode(调试参考),在temp目录下释放1.a文件,该文件是使用“DotNetToJScript”生成的经过混淆处理的js脚本。

js代码调试的时候直接在最后一条指令下断观察上下文即可,不用每条指令去跟踪执行,其主要功能是通过反序列化解密执行.NET DLL的“Work”函数。回溯代码,可以在so变量解密后将数据拷贝到010 Editer,使用Base64解码,去除PE头之前的数据就能获取到.NET DLL。

StInstaller.dll

解密出:“StInstaller.dll”

Work函数主要功能是:拷贝rekeywiz.exe(系统白文件)到指定目录,并将其添加到Run注册表自启动,然后在同目录下释放Duser.dll等文件,最后通过创建计划任务来执行rekeywiz.exe用于加载Duser.dll进行白利用。

SyncFiles目录释放文件如下:

Duser.dll

Duser.dll如下:

Duser.dll主要功能是:解密同目录下的.tmp文件,获取后续DLL文件。
解密算法:获取.tmp文件前32字节作为key,循环异或解密.tmp文件后续内容。
注意:这里可以把算法扣出来,用py写个自动解密的脚本,下次遇到.tmp文件可以解密SystenApp.dll到本地,然后直接提取C2地址。

SystemApp.dll

解密出:SystemApp.dll(最终Rat远控)代码没有混淆,从类名可以推测出基本功能。

入口点是Program类的Start()函数。

 1 public void Start()
 2 {
 3     try
 4     {
 5         //获取“Default”资源数据,并将解密后的配置文件写入:C:\ProgramData\\SyncFiles\\Sync
 6         this.MementoObserverFlyweightRestore = StructureFlyweightClassDynamicChain.FlyweightInstanceCommandCommand();
 7         //定时器1: 连接C2服务器获取指令,执行对应功能
 8         this.TemplateStructureTreeRestricted = new Timer(new TimerCallback(this.BridgeAlgorithmEncapsulatedFacade), null, 5000, -1);
 9         //定时器2: 上传指定文件与fls/flc/sif/err后缀文件
10         this.AlterCompositeTreeBridge = new Timer(new TimerCallback(this.CompositeGetGetObserver), null, 5000, -1);
11         if (this.MementoObserverFlyweightRestore.InterfaceCompositePutSingle)
12         {
13             //获取系统信息,以Json格式保存到指定路径(C:\Users\admin\AppData\Roaming\SyncDat\xxx.sif)
14             this.WriteSysInfo();
15             this.MementoObserverFlyweightRestore.InterfaceCompositePutSingle = false;
16             //获取配置信息,加密后写入本地文件(C:\ProgramData\\SyncFiles\\Sync)
17             this.MementoObserverFlyweightRestore.ObjectAccessorTreeMediator();
18         }
19         if (this.MementoObserverFlyweightRestore.AlgorithmBridgeAlgorithmAlgorithm)
20         {
21             //获取磁盘文件信息保存到(C:\Users\admin\AppData\Roaming\SyncDat\xxx.flc)
22             this.CompositeDecoratorCaptureComposite();
23             //保存doc/xls/ppt等文件信息到(C:\Users\admin\AppData\Roaming\SyncDat\xxx.fls)
24             this.StateAlgorithmAccessorGet();
25             this.MementoObserverFlyweightRestore.AlgorithmBridgeAlgorithmAlgorithm = false;
26             //获取配置信息,加密后写入本地文件(C:\ProgramData\\SyncFiles\\Sync)
27             this.MementoObserverFlyweightRestore.ObjectAccessorTreeMediator();
28         }
29         Thread.Sleep(-1);
30     }
31     finally
32     {
33         try
34         {
35             //删除定时器
36             this.TemplateStructureTreeRestricted.Dispose();
37             this.AlterCompositeTreeBridge.Dispose();
38         }
39         catch
40         {
41         }
42     }
43 }

获取配置文件:

从“Default”资源文件中获取配置文件数据:

1 get
2 {
3     return (byte[])FacadeInterfaceAccessorTemplateSingle.AlgorithmStateCompositeRestoreNotify(FacadeInterfaceAccessorTemplateSingle.DynamicImplementationRequestImplementation, "Default", FacadeInterfaceAccessorTemplateSingle.EncapsulatedAdapterFlyweightData);
4 }

配置文件包含:回连C2、文件释放路径、敏感文件后缀等信息。

将配置文件加密后写入Sync:

获取系统信息:

获取系统信息,以Json格式保存到指定路径(C:\Users\admin\AppData\Roaming\SyncDat\xxx.sif)

获取文件信息:

获取磁盘文件信息,保存到(C:\Users\admin\AppData\Roaming\SyncDat\xxx.flc)

写入数据包含:磁盘、目录、文件等信息,用记事本打开时有些字段会显示乱码:

获取指定后缀文件:

获取doc、xls、ppt等后缀文件信息,保存到(C:\Users\admin\AppData\Roaming\SyncDat\xxx.fls)

 同样以Json格式保存到文件:

定时器1:

连接C2服务器获取指令,执行对应功能

定时器2:

上传sif、flc、fls、err等文件

 

 

 

 

 

 

 

 

-----------------------------------------

posted @ 2020-11-08 22:00  SunsetR  阅读(513)  评论(0编辑  收藏  举报