1行 发表于 2020-9-20 16:32

浅析一个海莲花样本



## 前言

很早之前就对APT组织的攻击方式感兴趣,因为他们的传播方式、隐藏方式、攻击方式都让人眼界大开,也可以拓展分析思路的。所以就找了一个海莲花的样本来尝试分析,收获满满。

## 执行流程

利用微软白文件加载恶意wwlib.dll文件,释放出隐藏的doc文件,并在内存中释放出3段shellcode,最后获取恶意程序的链接并下载。



## 详细分析

### 样本概括

EXE文件是带有微软签名的合法 word 程序,攻击者通过该程序加载恶意的 wwlib.dll 文件来释放 shellcode 进行攻击。





dll文件是隐藏的恶意文件。





### wwlib.dll

exe文件调用dll,所以可以在 Loadlibrary 函数处下断点,来等待加载





继续运行之后会释放doc文件并运行





申请空间来存放第一次的shellcode,通过xor异或解密之后再存放



第一段 shellcode 是在这里之后转到的,





### 第一段 shellcode

从一个巨大的字符串数组中循环取出字符串后,经过解密算法来算出需要的函数字符串名称,如LoadlibraryA、VirtualAllocEx等







解密 VirtualAllocEx 之后,申请空间来存放新的 shellcode



### 第二段 shellcode

解密shellcode之后,会调用第二段shellcode,



使用极其耗费时间的大循环来解密字符串,防沙箱等检测工具



解密出 calloc 之后,申请空间



复制数据到申请的空间中



获取网关信息



第三段 shellcode 使用动态提取的方式来获取 CryptAcquireContextA、CryptCreateHash、CryptHashData、CryptDeriveKey,并通过这些函数来保证CryptDecrypt函数的正常运行

![](hdlmhx.assets/59e9c0a2-f242-45a3-a268-bd23bf47fb83.png)

创建空间,存放第三段 shellcode



通过 CryptDecrypt 解密函数,每次解密出shellcode的16位数据





将解密出的数据复制到申请的空间中



### 第三段 shellcode

以创建进程的方式运行第三段 shellcode



在第3段 shellcode 中,会将要连接的url复制到特定内存中,连接url,





由于C2早已掉线,无法连接,这次的分析也就只能到这里了,估计下载的是一个EXE,想来应该是个具有窃密,回传信息的恶意程序。



## 总结

分析了这个样本感觉收获很多,首先是对白加黑的投递方式有了更深的理解,其次是对shellcode内存荷载的多阶段释放印象深刻。

对于海莲花这种靠后梯队的APT组织来说,他所投递的样本相对高梯队的APT组织投递的样本,分析难度还是较低,至少有迹可循。

样本IOC:SHA256 - c0ea37db94aa0d747ece7f46afcf90e43fb22c06731f291f0b2ba189d4326e33.rar
(https://app.any.run/tasks/b3205da7-8c88-4375-bc87-ffbb985f01b8/)

1行 发表于 2020-9-20 20:44

慵懒丶L先森 发表于 2020-9-20 20:24
请教一下,为什么在内存中释放出了shellcode,杀毒软件没能发现呢?难道加载进了内存,杀毒软件就无法查杀 ...

是通过修改kernel32的某个函数返回地址来执行到shellcode的,这里杀软会认为你返回的是正常的函数,就不会报毒

wordmeng 发表于 2021-9-2 16:52

样本IOC:SHA256 - c0ea37db94aa0d747ece7f46afcf90e43fb22c06731f291f0b2ba189d4326e33.rar
https://app.any.run/tasks/b3205da7-8c88-4375-bc87-ffbb985f01b8/

这个样本是doc的文件,没有看到黑dll。能否把dll也共享一下,谢谢啦

1行 发表于 2020-9-20 18:39

ninefighter 发表于 2020-9-20 18:13
小白问:微软白文件是用的rundll么

loadlibrary 调用的

ifenglmy 发表于 2020-9-20 18:53

谢谢楼主分享,,,

年轻的旅途 发表于 2020-9-20 20:15

太难了,得慢慢看

慵懒丶L先森 发表于 2020-9-20 20:24

请教一下,为什么在内存中释放出了shellcode,杀毒软件没能发现呢?难道加载进了内存,杀毒软件就无法查杀了吗,还是这段shellcode做了免杀处理

52pj17759127760 发表于 2020-9-20 21:04

学习下,感谢分享

慵懒丶L先森 发表于 2020-9-20 21:18

1行 发表于 2020-9-20 20:44
是通过修改kernel32的某个函数返回地址来执行到shellcode的,这里杀软会认为你返回的是正常的函数,就不 ...

原来如此,受教了,多谢赐教

bright21vn 发表于 2020-9-21 06:29

技术贴,已收藏

tkggauwxf 发表于 2020-9-21 09:04

感谢分享
页: [1] 2 3 4 5
查看完整版本: 浅析一个海莲花样本