记一次 SideWinder 组织样本分析
字数 3145 2025-08-06 18:08:01
SideWinder组织WarHawk后门样本分析教学文档
一、样本概况
1.1 样本来源
- 首次发现于巴基斯坦国家电力监管局(nepra.org.pk)官方网站
- 攻击方式:将恶意组件与诱饵文档捆绑成ISO文件
1.2 样本组成
| 文件名 | MD5 | 创建时间 | 性质 |
|---|---|---|---|
| 33-Advisory-No-33-2022.pdf.iso | 63d6d8213d9cc070b2a3dfd3c5866564 | 2022/9/26 11:28 | 恶意ISO |
| 33-ADVISORY-NO-33-2022.LNK | 1dd72390f35a9a5e207b61e397bc338e | 2021/10/6 13:51 | 恶意快捷方式 |
| 33-ADVISORY-NO-33-2022.PDF | 26dd72a5dad80756823d6bf1f95350df | 2022/9/6 12:09 | 诱饵文档 |
| MSBUILD.EXE | 5cff6896e0505e8d6d98bff35d10c43a | 2022/9/26 06:27 | 恶意载荷 |
二、攻击流程分析
2.1 初始感染阶段
- 受害者打开ISO中的LNK文件
- LNK文件执行两个操作:
- 打开诱饵PDF文档(33-ADVISORY-NO-33-2022.PDF)
- 通过CMD执行恶意二进制文件(MSBuild.exe)
2.2 恶意载荷分析(MSBuild.exe/WarHawk后门)
2.2.1 动态加载机制
-
获取Kernel32基地址:
- 遍历PEB中的InMemoryOrderModuleList链
-
API解密方法:
- 从预留字符串解密API和DLL名称
- 解密算法:每个字节减去0x42
-
关键解密函数:
- 首先解密"LoadLibraryA"和"GetProcAddress"
- 使用这两个函数动态加载其他所需API
-
解密出的关键API:
- LoadLibraryA
- GetProcAddress
- Advapi32
- GetCurrentHwProfileA
- GetComputerNameA
- GetUserNameA
2.2.2 信息收集与回传
-
硬件信息收集:
- 调用GetCurrentHwProfileA获取硬件配置GUID
- 格式化为JSON:
{"_hwid":"{GUID}"} - 发送到C2服务器
-
条件性信息收集:
- 若C2响应为0,则收集以下信息:
- GetComputerNameA:计算机/NetBios名称
- GetUserNameA:当前用户名
- RegQueryValueExA:检索注册表
SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName
- 若C2响应为0,则收集以下信息:
-
完整信息回传格式:
{
"_hwid": "{GUID}",
"_computer": "computer_name",
"_username": "user_name",
"_os": "windows_products"
}
- 心跳检测:
- 发送:
{"_hwid":{GUID}, "_ping": "true"} - 若响应为"del":
- 退出程序
- 发送:
{"_hwid": {GUID}, "_del": "true"}
- 发送:
三、WarHawk后门功能模块
3.1 下载执行模块
-
初始化请求:
- 发送:
{"_hwid": {GUID}, "_task": "true"}
- 发送:
-
响应处理:
- 响应格式:包含
_id、_type、_url字段的JSON - 根据
_type值执行不同操作:
- 响应格式:包含
| _type值 | 行为 | 后续操作 |
|---|---|---|
| 1 | 下载并执行EXE | 1. 使用URLDownloadToFileA下载 2. 随机生成文件名 3. 使用ShellExecuteA执行 4. 回传: {"_hwid": {GUID}, "_task_done": "true", "_id": "id"} |
| 2 | 下载并加载DLL | 1. 下载方式同类型1 2. 使用LoadLibraryA加载 |
| 3 | 下载并执行EXE | 同类型1 |
3.2 命令执行模块
-
初始化请求:
- 发送:
{"_hwid": {GUID}, "_cmd": "true"}
- 发送:
-
命令执行流程:
- 拼接命令格式:
/c cmd_command > file.bin - 使用ShellExecuteExA执行命令
- 读取结果文件内容
- 自定义Base64加密结果
- 回传格式:
- 拼接命令格式:
{
"_hwid": "{GUID}",
"_cmd_done": "true",
"_response": "base64_encry_infomation"
}
3.3 文件管理模块
-
初始化请求:
- 发送:
{"_hwid": {GUID}, "_filemgr": "true"}
- 发送:
-
功能分支:
-
驱动器枚举(响应为"drive"):
- 遍历A-Z驱动器
- 使用PathFileExistsA检查存在性
- 使用GetDriveTypeA获取类型
- 回传格式:包含
name和type字段的JSON
-
目录遍历(响应为路径):
- 遍历指定路径下所有文件和文件夹
- 收集文件信息:名称、日期、类型、大小
- 收集文件夹信息:名称、时间
-
3.4 文件下载模块
-
初始化请求:
- 发送:
{"_hwid": {GUID}, "_fileupload": "true"}
- 发送:
-
下载流程:
- 从C2下载指定文件
- 本地文件名由响应中
_path字段Base64解码得到 - 回传状态:
{
"_hwid": "{GUID}",
"_uploadstatus": "true/false"
}
四、关联样本分析
4.1 关联样本信息
| 文件名 | MD5 | 创建时间 | 性质 |
|---|---|---|---|
| Snitch.exe | ec33c5e1773b510e323bea8f70dcddb0 | 2022/9/19 5:18 | Cobalt Strike加载器 |
| OneDrive.exe | d0acccab52778b77c96346194e38b244 | 2022/9/19 11:46 | Cobalt Strike生成 |
4.2 关键发现
-
Snitch.exe特征:
- 包含针对巴基斯坦标准时间设置的反调试机制
- 证实攻击目标为巴基斯坦
-
OneDrive.exe特征:
- 使用仿冒域名fia-gov.org(模仿巴基斯坦联邦调查局fia.gov.pk)
- 通过tria.ge沙箱提取的配置确认
五、归属分析
5.1 归因依据
-
基础设施重用:
- 历史上SideWinder组织使用过相同域名(fia-gov.org)
-
攻击目标一致性:
- 针对巴基斯坦的定向攻击
- 使用本地化诱饵文档
-
TTPs相似性:
- 使用ISO文件作为初始载体
- 使用LNK文件执行多阶段攻击
- 使用Cobalt Strike作为后续载荷
六、分析技巧总结
6.1 动态分析注意事项
-
C2交互特性:
- 服务器可能对请求来源有验证机制
- 构造合法请求可能需要完整的环境信息
-
时效性:
- C2服务器可能很快关闭
- 建议及时从多个样本池获取关联样本
6.2 关键分析点
-
字符串解密:
- 识别并实现解密算法(本例中为每个字节减0x42)
-
API解析:
- 跟踪动态加载的API调用链
-
通信协议分析:
- 记录并分析JSON格式的请求/响应
- 注意字段含义和条件分支
七、IOC清单
7.1 文件HASH
- 见"样本组成"和"关联样本信息"表格
7.2 网络IOC
- C2域名:fia-gov.org(仿冒)
- WarHawk后门C2面板标题:"WarHawk登陆框"
7.3 其他指标
- 注册表路径:
SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName - 临时文件格式:随机生成的.bin文件