一、背景
关于“海莲花”(OceanLotus)的相关背景介绍在先前的文章:九维团队-暗队(情报)| “海莲花”APT近期攻击样本分析报告中已有提及,在此不再赘述,感兴趣的小伙伴可自行点击蓝字阅读。
二、概述
近日,安恒信息分子实验室反APT小组(九维团队-暗队)在研究过程中分析了“海莲花”的历史攻击活动样本。样本被加载后会加载多阶段Shellcode逃避反病毒软件,当执行到最后阶段时,会加载CobaltStrike Bind Beacon并等待主动连接。
小组通过对样本进行逆向分析,根据样本行为特征、C2以及结合开源情报,确定此次攻击活动背后的组织为“海莲花”APT。
三、样本分析
3.1 样本基础信息
文件名:HPScanUI.dll
MD5:53dcd2d08e115b907c95fcfeccb9d23f
SHA-1:1dad1b833a769ebf0a3b7b2b626f871fe626b087
SHA-256:9fb87b5d86639702329056bcffc740342477ff595d52adf1d6323d696d26b694
创建时间:2018-02-12 04:53:00 UTC
3.2 分析过程
3.2.1 第一阶段分析
创建互斥体,防止重复加载(eeba19f3-5f1d-4172-a776-3d5ccc5ebbd7):
初始化Shellcode数组:
|
接着调用sub_100015B0,挂起除当前主线程之外其余线程。
随后会调用sub_10001660方法,该方法将宿主进程的.text代码段添加可修改属性,并使用随机的单字节指令进行填充。
将主程序text节的可执行权限设置为读写执行(加入可写权限)。
运行前:
text节不具备可写:
运行后:
使用随机单字节指令镂空进程:
镂空后:
在已被镂空的宿主进程末尾写一段shellcode,随后结束DLL线程,跳转到宿主进程执行,执行完所有的单字节垃圾代码后,会跳转回DLL继续执行下一阶段。
|
3.2.2 第二阶段分析
从资源中检索并释放shellcode:
3.2.3 第三阶段分析
执行后跳转到加密Shellcode,随后在执行时动态替换解密。
|
获取 %windir% 环境变量:
解密Shellcode:
调用CreateThread执行Shellcode:
Shellcode头部经过混淆加密,执行时自解密:
解密后为 CobaltStrike Bind TCP beacon:
|
四、关联分析
根据样本行为特征、C2以及结合开源情报,确定此次攻击活动背后的组织为“海莲花”APT。
4.1 代码混淆
海莲花经常使用Shikata Ga Nai混淆器进行shellcode代码混淆,通过对比,该样本中多阶段shellcode均使用了代码混淆。
4.2 相似代码
在海莲花历史样本中,发现了多个与本次相同的执行片段与函数。
IOC:
MD5:53dcd2d08e115b907c95fcfeccb9d23f
SHA-1:1dad1b833a769ebf0a3b7b2b626f871fe626b087
SHA-256:9fb87b5d86639702329056bcffc740342477ff595d52adf1d6323d696d26b694
— 往期回顾 —
原文始发于微信公众号(安恒信息安全服务):九维团队-暗队(情报)| “海莲花”APT 历史样本分析报告