April 12, 2022

Squirrel Waffle

This learning by OALab’s!

分析病毒行为

下载邮件链接下载

image-20220415123436034

下载并解压,然后就是关键的恶意宏,只要一启用就中招了

image-20220415123646413

会自动下载这几个

image-20220415123807375

来分析一下流量

首先是从包含doc文档的流量

其次就是打开了doc文档会启动了,从头https下载了dll files

最后squirrel waffle c2 (command and control)

攻击者使用这些工具和技术在初始利用后保持与受感染设备的通信,不同攻击的具体机制差异很大,但C2通常由受感染组织的设备与攻击者的控制的平台之间的一个或多个隐蔽通信通道组成,这些通信通道用于向受感染的设备发出指令下载额外的恶意负载,并将被盗的数据通过管道传回给攻击者image-20220415124230160

squirrel waffle之后的C2流量,之后就是额外恶意负载和数据传回

image-20220415125154347

整个病毒的流程图

image-20220415125211239

现在来分析一下松鼠华夫饼!看起来很好吃的Malware

0x00 日常查壳

无壳32位

image-20220412114720589

0x01 分析流程

这是个dll,分别是加载器入口点和DllEnterPoint

ldr这里是加载函数入口点导出dll

image-20220412114923238

可以通过生成C文件,来让IDA反编译整个文件,有助于修复一些参数之类(很有用!

image-20220412115230232

通过对第一个函数的逛街,发现引用字符串的奇怪函数

于是进去尝试解析可以发现C++的未被解析好的结构体

于是我们去修复他,这里可以看到gap4[12],可以进行修改一下,因为一开始我们并不确定这到底是类型,我们可以先从DWORD开始

如果确定了是字符串还是什么,再去修改

image-20220412154633147

改成3个DWORD,再改下命名

image-20220412154924108

继续分析可以发现,每两串奇怪数据就会进入这个函数

image-20220412162021638

进入这个函数,发现一个有趣的循环解密,而就是这两串数据

image-20220412163016951

0x02 提取数据

正好学习下CyberChef的使用

image-20220412163109509

通过看rdata段可以发现,密钥总是在密文的后面,所以就在怀疑制作者用了某种加载器让密钥在数据后面而且在rdata段

image-20220415120126975

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import pefile
from yaml import BlockMappingStartToken

data = open('X:\\Malware\\Squirrel Waffle\\squirre.bin', 'rb').read()

pe = pefile.PE(data = data)
rdata = None
for s in pe.sections:
if b'.rdata' in s.Name:
rdata = s.get_data()

blocks = rdata.split(b'\x00')
blocks = [x for x in blocks if x != b'']
blocks_sorted = sorted(blocks, key = len) # 根据长度进行排序
# print(blocks_sorted)

def Decrypt(key, data):
out = ''
for i in range(len(data)):
out += chr(data[i] ^ key[i % len(key)])
return out

for i in range(len(blocks)):
if blocks[i] == blocks_sorted[-2]: #找是否是大数据倒数第一个是c2地址 倒数第二个是配置命令
out = Decrypt(blocks[i + 1], blocks[i]) # 而数据的后一位就是密钥 制作者肯定用了某种加载器,让数据和密钥都是以这种方式排列

print(out)

0x03 动调提取

先打开DLL入口选项,于是当我们的dll一运行就会断住

image-20220415121255457

经历几次F9才会到达这个地方,也就是我们要调试的地方

image-20220415121218000

由于我们知道dll载入函数没什么有趣的代码,所以直接到我们的ldr载入地址

image-20220415121557654

直接跑到运行到解密函数之后可直接提取配置

image-20220415121847867

DASCTF X SU
🍬
HFCTF2022
🍪

About this Post

This post is written by P.Z, licensed under CC BY-NC 4.0.